我有一个问题,我认为是由于 CPU 上的浮点错误。
我目前正在研究阴影贴图,起初我在 GPU 上进行了 MVP 计算,例如
layout(location = 0) in vec3 inPos;
uniform mat4 projectionMatrix;
uniform mat4 viewMatrix;
uniform mat4 modelMatrix;
void main(void)
{
gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(inPos, 1.0);
}
这显然不是所有着色器代码,但这些计算得到了以下结果:
然后我想稍微优化一下代码并将 MVP 计算转移到 CPU 并将其作为统一传递给着色器,如下所示:
uniform mat4 MVP;
layout(location = 0) in vec3 inPos;
void main(void)
{
gl_Position = MVP * vec4(inPos, 1.0);
}
这些是结果:
几个小时以来,我一直在查看我的 CPU 矩阵乘法,所以我 > 90% 确定那里的一切都是正确的。
我为容器类提供了带有集合函数的矩阵,并使用单个 getter 检索它们。
void setModelMatrix(const glm::mat4& inModelMatrix){mModelMatrix = inModelMatrix;};
void setViewMatrix(const glm::mat4& inVewMatrix) {mViewMatrix = inVewMatrix;};
void setProjectionMatrix(const glm::mat4& inProjectionMatrix){mProjectionMatrix = inProjectionMatrix;};
//Calculates the MVP matrix and returns it
glm::mat4 getMVPMatrix() {
return (mProjectionMatrix * mViewMatrix * mModelMatrix);
}
所以..关于可能是什么问题的任何想法?会不会是浮点错误?感谢您的所有回复!