zoukankan      html  css  js  c++  java
  • 还是关于Automatic TextureCoordinate Generation

    多谢tomb4的指点,发现原来AutoTexCoordGen中最根本的一点被我理解错了。

    Object Linear模式并不是在Object Space中以默认投影点做Projective,Eye Linear模式也并非是在Eye Space中以默认投影点做Projective,这是最关键的一点。基于这一点的理解错误,对于Eye Linear模式的TexGen和Object Linear模式的TexGen的结果正确与否的判断也相应错误了。

    两者的区别在于:Object Linear模式是基于Object Space中的点做变换的,Eye Linear模式是基于Eye Space中的点做变换的,在TexGen后没有做ModelView变换的情况下,两者的最终结果是相同的,都是基于Projector点(如果没有专门的Projector变换就是指最初的投影点)做Projective获得TexCoord。不同的仅在于参数所使用的Coordinate System。如果TexGen后做了ModelView变换,Object Linear模式不发生变换,Eye Lienar模式则会累加这段变换。

    若定义变量如下:
    Vo 顶点在object space中的坐标
    Ve 顶点在eye space中的坐标
    V 顶点的纹理坐标
    Mp 传入的平面参数
    Mb 纹理偏移矩阵
    Me 最终的model view matrix
    Mg TexGen时的model view matrix
    Mm Mg到Me中间所进行的变换
    则AutoTexCoordGen的公式为:

    object linear模式:
    Vt = Mb * Mp * Vo
    eye linear模式:
    Vt = Mb * Mp * Mg-1 * Ve

    其中,因为:Me = Mg * Mm => Me * Mm-1 = Mg * Mm * Mm-1 => Mg = Me * Mm-1
    所以eye linear模式又可以变换为:
    Vt = Mb * Mp * (Me * Mm-1)-1 * Ve = Mb * Mp * Mm * Me-1 * Ve = Mb * Mp * Mm * Vo
    对比object linear模式的公式就可以比较清楚的区分两者的不同了。

    关于这一点,NV在ProjTex的文档里面要讲的详细一些,RedBook也没有错,它里的公式实际上是没有进行过Mm变换的,所以两者结果完全相同。不过这真是误导人啊。

    另外验证RedBook结论的试验也是错误的,当时没有弄清楚Mg是在何时传入固定渲染管线的。

    看来我还是太笨了。
  • 相关阅读:
    poj 1961 Period
    call 大佬 help7——kmp 补齐 循环节
    hdu 3746 Cyclic Nacklace
    poj 2406 Power Strings
    [Baltic2009]Radio Transmission
    poj 2752 Seek the Name, Seek the Fame
    hdu 3336 Count the string
    hdu 2594 Simpsons’ Hidden Talents
    hdu 1711 Number Sequence
    我在开发第一个Swift App过程中学到的四件事
  • 原文地址:https://www.cnblogs.com/Pointer/p/84367.html
Copyright © 2011-2022 走看看