我有一个来自 Blender 的对象渲染到我的场景中,并且法线已正确加载。我正在使用 Gourrad 漫反射着色将 ModelViewProjectionMatrix (CameraToClip * ModelToCamera) 传递给着色器,并使用 3x3 版本的 ModelToCameraMatrix 与法线相乘。
但是,当我将输出颜色设置为 DiffuseColor * Angle 时,我的整个对象(在我的情况下是一个立方体)就会消失(甚至没有黑线,我的灰色背景上什么也没有出现)。当我将颜色输出替换为
theColor = Vec4(1.0f, 1.0f, 1.0f, 1.0f);
它以白色显示我的 obj,没有任何阴影。我很好奇为什么我什么都没看到?我的着色器或我通过制服的方式有问题吗?
顶点着色器:
#version 330
layout(location = 0) in vec4 position;
layout(location = 1) in vec3 normal;
smooth out vec4 theColor;
uniform mat4 modelViewProjectionMatrix;
uniform vec3 lightDir;
uniform mat3 normalModelToCameraMatrix;
void main()
{
gl_Position = modelViewProjectionMatrix * position;
vec3 normCamSpace = normalize(normalModelToCameraMatrix * normal);
vec4 diffuseColor = vec4(0.6f, 0.7f, 0.8f, 1.0f);
float angle = dot(normCamSpace, lightDir);
angle = clamp(angle, 0, 1);
theColor = diffuseColor * angle;
}
渲染方法:
stack.Translate(glm::vec3(0.0f, 0.0f, 3.0f));
glm::vec4 lightDirCameraSpace = stack.Top() * glm::vec4(1.5f, 1.0f, 0.0f, 0.0f);
glUniform3fv(lightDirUnif, 1, glm::value_ptr(lightDirCameraSpace));
glm::mat3 normalMatrix(stack.Top());
glUniformMatrix3fv(normalModelToCameraMatrixUnif, 1, GL_FALSE, glm::value_ptr(normalMatrix));
// Draw Blender object
glBindVertexArray(this->load.vertexArrayOBject);
glm::mat4 modelViewProjectionMatrix = cameraToClipMatrix * stack.Top();
glUniformMatrix4fv(modelViewProjectionMatrixUnif, 1, GL_FALSE, glm::value_ptr(modelViewProjectionMatrix));
glDrawElements(GL_TRIANGLES, this->load.indicesVec.size(), GL_UNSIGNED_INT, 0);
我看不出着色器和渲染部分有什么问题。
更新 使用 glGetError 时,我似乎不断收到错误代码 1285,这似乎与“内存不足”问题有关。但是,我没有使用任何类型的纹理,所以我有点困惑为什么会这样?