|
|
VS(引用自OGRE的脚本文件 Example_BumpMapping.cg)
- void main_vp(float4 position : POSITION,
- float3 normal : NORMAL,
- float2 uv : TEXCOORD0,
- float4 tangent : TANGENT0,
- // outputs
- out float4 oPosition : POSITION,
- out float2 oUv : TEXCOORD0,
- out float3 oTSLightDir : TEXCOORD1,
- // parameters
- uniform float4 lightPosition, // object space
- uniform float4x4 worldViewProj)
- {
- oPosition = mul(worldViewProj, position);
- oUv = uv;
- float3 lightDir = lightPosition.xyz - position ;
- float3 binormal = cross(tangent.xyz, normal);
- float3x3 rotation = float3x3(tangent.xyz, binormal, normal);
- oTSLightDir = mul(rotation, lightDir);//问题处!!!
- }
复制代码
为什么是rotation左乘lightDir呢?
照我理解,构成的rotation应该是row-major矩阵
[
tangent.x ,tangent.y ,tangent.z,
binormal.x ,binormal.y ,binormal.z
normal.x ,normal.y ,normal.z
]
我觉得应该使用lightDir*rotation;
而其转制矩阵
[
tangent.x, binormal.x, normal.x
tangent.y, binormal.y normal.y
tangent.z, binormal.z normal.z
]
才应该用右乘rotation*lightDir啊,
望指教
|
|