为什么变换后的Vector乘以逆变换矩阵而不是原始Vector?

时间:2014-05-22 14:14:00

标签: opengl glsl fragment-shader

我正在处理我的代码,我必须将片段着色器中的矢量转换为另一个坐标空间(相似于摄像机空间和灯光空间之间的阴影映射),在此坐标中进行一些计算空间,并将其转化回来。

由于结果并不令人满意,而且我正在寻找原因,最后我检查了我是否只是变换了一个矢量,然后用变换矩阵的逆变换它,它等于原始矢量。

这样的事情:

vec4 transformedVec4 = transformMat4 * originalVec4;
vec4 ReTransformedVec4 = inverse(transformMat4) * transformedVec4;

if(transformedVec4 == ReTransformedVec4)
{
    //some code to display if equal
}

我真的很惊讶地看到,我的代码永远不会进入if语句。

有人知道这是从哪里来的吗? 它只是浮点精度,导致结果不相等吗?

1 个答案:

答案 0 :(得分:4)

是的,它是浮点和反转变换矩阵的不精确性质的组合(inverse(transformMat4)*transformMat4并不完全相同)

如果你想知道亲密度,那么你可以使用矢量之间的距离

if(distance(transformedVec4,ReTransformedVec4) <0.01)
{
    //some code to display if equal
}