• 还是关于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是在何时传入固定渲染管线的。

    看来我还是太笨了。
  • 相关阅读:
    mina简介
    idea编辑器jdk版本报错
    设计模式之-工厂模式
    设计模式之-外观模式
    ssm项目中bean注入失败,获取spring中指定bean之解决方案
    Jquery.Page.js 分页插件的使用
    发现某网站低级致命漏洞引发的对多用户系统安全性讨论
    C#微信公众号开发之网页授权oauth2.0获取用户基本信息(一)
    有关C#中使用if else和try catch的问题及效率问题
    C#伪静态实现的方法
  • 原文地址:https://www.cnblogs.com/Pointer/p/84367.html
Copyright © 2020-2023  润新知