【发布时间】:2020-06-29 21:59:02
【问题描述】:
我按照教程http://www.mbsoftworks.sk/tutorials/opengl3/ 并尝试编译第 10 个示例。
除了我发送到着色器的地方(投影矩阵 mul 模型视图矩阵)之外,一切正常。
有我发送矩阵的地方:
//...
// render.cpp
glm::mat4 projectionMatrix = *(oglControl->getProjectionMatrix());
glm::mat4 cam = glm::translate(mModelView, cCamera.vEye);
auto newM = projectionMatrix * cam;
spDirectionalLight.setUniform("projectionMatrixMulModelViewMatrix",&newM);
//...
//...
// setUniform implementation
void CShaderProgram::setUniform(string sName, glm::mat4* mMatrices, int iCount)
{
int iLoc = glGetUniformLocation(uiProgram, sName.c_str());
glUniformMatrix4fv(iLoc, iCount, FALSE, (GLfloat*)mMatrices);
}
//...
最后 mMatrices 包含 ] .
着色器代码
#version 330 core
uniform mat4 projectionMatrixMulModelViewMatrix;
uniform mat4 normalMatrix;
layout (location = 0) in vec3 inPosition;
layout (location = 1) in vec2 inCoord;
layout (location = 2) in vec3 inNormal;
out vec2 texCoord;
smooth out vec3 vNormal;
void main()
{
gl_Position = projectionMatrixMulModelViewMatrix*vec4(inPosition, 1.0);
texCoord = inCoord;
vec4 vRes = normalMatrix*vec4(inNormal, 0.0);
vNormal = vRes.xyz;
}
结果是空白屏幕。 Renderdoc 调试器告诉我 gl_position 矩阵完全是 NaN。 Renderdoc screeenshot
当我发送 glm::mat4(1) 时,我得到了有效的结果。
为什么乘法着色器得到 NaN 向量?
【问题讨论】:
-
你必须初始化
mModelView = glm::mat4(1.0f) -
其实mModelView之前已经初始化了。这不是原因。
glm::mat4 mModelView = cCamera.look();`glm::mat4 CFlyingCamera::look() { return glm::lookAt(vEye, vView, vUp); } -
正如我之前提到的 mMatrix 是 VALID 你可以看到它here
-
@Rabbid76:似乎不是重复的,因为 glm 矩阵没问题。问题可能是上传到着色器。
-
@DiliDup:你在
setUniform之前打电话给glUseProgram吗?iLoc的值是多少?为什么对setUniform的调用不包含第三个参数
标签: c++ opengl glsl glm-math opengl-3