我正在处理我的代码,我必须将片段着色器中的矢量转换为另一个坐标空间(相似于摄像机空间和灯光空间之间的阴影映射),在此坐标中进行一些计算空间,并将其转化回来。
由于结果并不令人满意,而且我正在寻找原因,最后我检查了我是否只是变换了一个矢量,然后用变换矩阵的逆变换它,它等于原始矢量。
这样的事情:
vec4 transformedVec4 = transformMat4 * originalVec4;
vec4 ReTransformedVec4 = inverse(transformMat4) * transformedVec4;
if(transformedVec4 == ReTransformedVec4)
{
//some code to display if equal
}
我真的很惊讶地看到,我的代码永远不会进入if语句。
有人知道这是从哪里来的吗? 它只是浮点精度,导致结果不相等吗?
答案 0 :(得分:4)
是的,它是浮点和反转变换矩阵的不精确性质的组合(inverse(transformMat4)*transformMat4
并不完全相同)
如果你想知道亲密度,那么你可以使用矢量之间的距离
if(distance(transformedVec4,ReTransformedVec4) <0.01)
{
//some code to display if equal
}