2012-09-05 252 views
3

我只是在玩HLSL。我想获得矢量“pos”中的矢量“inputPos”。 case2正在工作,但不是case1。为什么?两种情况都不一样吗? M * M_Inv * inputPos = inputPos。为什么案例1没有给出正确的价值?hlsl矩阵乘法

//case 1 
pos = mul(float4(inputPos, 1), c_mView);  // Line1 
pos = mul (pos , c_mViewInverse);   // Line2 

//case2 
pos = mul (mul(float4(inputPos, 1), c_mView) , c_mViewInverse); 

谢谢。

回答

0

可能在你的情况下,变量pos是float3,所以如果你没有在第二个操作中提供w组件,将会搞乱你的计算。 (在情况2你使用第一个mul的结果,这将是一个float4)

pos = mul(float4(inputPos, 1), c_mView); 
pos = mul (float4(pos,1) , c_mViewInverse);