查看: 732|回复: 2

osg中采用glsl书写光照模型

[复制链接]

该用户从未签到

发表于 2014-4-10 14:48:01 | 显示全部楼层 |阅读模式
下面是求解光照模型向量的两种写法,请问哪一种写法是正确的,说说原因吧
写法一:
        vec3 n=normalize(gl_NormalMatrix * gl_Normal);
        vec3 vt= gl_ModelViewMatrix * gl_Vertex;
        vec4 light=vec4(LightPosition.xyz,1);
        light=light*osg_ViewMatrix;
        vec3 lin=normalize(light.xyz-vt);
        vec3 lout=reflect(-lin,n);
        vec3 vision=normalize(-vt);

写法二:       
        vec3 n=gl_NormalMatrix*gl_Normal;
        vec3 vt= gl_ModelViewMatrix* gl_Vertex;
        vec4 n_world=vec4(n,1)*osg_ViewMatrixInverse;
        vec4 vt_world=vec4(vt,1)*osg_ViewMatrixInverse;
        vec3 lin=normalize(LightPosition-vt.xyz);
        vec3 lout=reflect(-lin,n_world.xyz);
        //视觉坐标系中相机的位置
        vec4 eye=vec4(0,0,0,1);
        //把相机转换到世界坐标系中
        vec4 eye_world=eye*osg_ViewMatrixInverse;
        vec3 vision=normalize(eye_world.xyz-vt_world.xyz);
向量夹角求解
        float d=max(0.0,dot(n,lin));
        float s=max(0.0, dot(vision,lout));
第一种写法是在视觉坐标系中求解相关向量
第二种写法是在世界坐标系中求解相关向量

该用户从未签到

 楼主| 发表于 2014-4-12 14:51:58 | 显示全部楼层
没有人知道这两种写法的区别,或存在的问题吗?唉

该用户从未签到

发表于 2014-4-16 18:35:30 | 显示全部楼层
哪种写法都可以,但是你忽略了齐次坐标转换。而且其中几个矩阵乘反了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表