|
下面是求解光照模型向量的两种写法,请问哪一种写法是正确的,说说原因吧
写法一:
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));
第一种写法是在视觉坐标系中求解相关向量
第二种写法是在世界坐标系中求解相关向量 |
|