我使用glm math lib和simd有问题。 我在计算外观矩阵时遇到了问题。
按照我的外观功能:
FORCE_INLINE_ALWAYSINLINE const glm::detail::fmat4x4SIMD LookAt( const glm::detail::fvec4SIMD &eyePos, const glm::detail::fvec4SIMD &lookAtPos, const glm::detail::fvec4SIMD &upVec )
{
glm::detail::fvec4SIMD v3X, v3Y, v3Z;
v3Y = glm::normalize(upVec);
v3Z = glm::normalize(eyePos - lookAtPos);
v3X = glm::normalize(glm::cross(v3Y, v3Z));
v3Y = glm::cross(v3Z, v3X);
glm::detail::fmat4x4SIMD m4EyeFrame = glm::detail::fmat4x4SIMD(v3X, v3Y, v3Z, eyePos);
return m4EyeFrame;
}
不幸的是,效果不好,例如: 如果eyePos(摄像机位置)在0,0,-10和lookAtPos(目标位置)在0,0,0并且对象位于该位置,则视图效果很好。但是,如果我在X轴或Y轴上移动eyePos,模型似乎变形(如拉伸)或消失,好像它已经超出截锥体,但实际上它仍然在内。 注意:fvec4SIMD的每四个元素设置为1.0f
我也读过这篇文章: My SSE implementation of lookAt doesn't work 但我不能在fmat4x4SIMD中使用因为行到列的转换,也许我需要将所有元素随机转换为从行转换为列,但我不知道如何以快速的方式进行转换。这只是我的印象,但也许问题出在其他地方。
有什么建议吗?