【发布时间】:2017-05-03 17:42:40
【问题描述】:
我有一个顶点和片段着色器不久前还可以正常工作,但我尝试实现骨骼动画,结果在某处损坏了一些东西。我什至不再使用我的自定义函数,而只是设置了一个简单的“绘制三角形并为其着色”代码块,但它不起作用。
绘图代码:
GLfloat vertices[] = {
0.5f, 0.5f, 0.0f, // Top Right
0.5f, -0.5f, 0.0f, // Bottom Right
-0.5f, -0.5f, 0.0f, // Bottom Left
-0.5f, 0.5f, 0.0f // Top Left
};
GLuint indices[] = { // Note that we start from 0!
0, 1, 3, // First Triangle
1, 2, 3 // Second Triangle
};
GLuint VBO, VAO, EBO;
glGenVertexArrays(1, &VAO);
glGenBuffers(1, &VBO);
glGenBuffers(1, &EBO);
// Bind the Vertex Array Object first, then bind and set vertex buffer(s) and attribute pointer(s).
glBindVertexArray(VAO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), (GLvoid*)0);
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, 0); // Note that this is allowed, the call to glVertexAttribPointer registered VBO as the currently bound vertex buffer object so afterwards we can safely unbind
glBindVertexArray(0);
while (!win.windowShouldClose) {
win.clearScreen(glm::vec4(1.0f,1.0f,1.0f,1.0f));
newShader.Use();
GLint mvpLoc = glGetUniformLocation(newShader.Program, "MVP");
glUniformMatrix4fv(mvpLoc, 1, GL_FALSE, glm::value_ptr(camera.proj * camera.view));
glBindVertexArray(VAO);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
glBindVertexArray(0);
win.display();
}
顶点着色器:
#version 430
layout (location = 0) in vec3 position;
layout (location = 1) in vec3 normal;
layout (location = 2) in vec2 texCoords;
out vec2 TexCoords;
out vec3 ourColor;
uniform mat4 MVP;
void main()
{
gl_Position = MVP * vec4(position,1.0f);
TexCoords = texCoords;
ourColor = vec3(1.0f, 0.0f, 1.0f);
}
片段着色器:
#version 430
in vec2 TexCoords;
in vec3 ourColor;
out vec4 color;
uniform sampler2D texture_diffuse1;
void main() {
color = vec4(ourColor,1.0f);
}
我已经花了几天的时间来解决这个问题,但我还没有找到解决方案。我认为这是我发送到着色器的数据的问题,但即使将片段的输出设置为如图所示的常量,三角形仍然是黑色的,根本不受顶点着色器的影响,就好像它们正在运行一样直接从 NDC 到屏幕空间。
【问题讨论】: