为什么OpenGL不会在屏幕上绘制任何内容?

时间:2013-04-21 16:46:59

标签: c++ opengl

所以,我正在关注OpenGL 4.x的Swiftless教程。我按照他的教程创建的程序并没有输出任何内容。我已经尝试检查着色器是否有错误 - 我没有看到任何错误。

也许你可以指点我可能对此负责。或者一些调试程序。

这是由6个顶点组成的正方形的设置函数。

float* vertices = new float[18];    // Vertices for our square
float* colors = new float[18];
glGenVertexArrays(1, &vaoID[0]); // Create our Vertex Array Object

glBindVertexArray(vaoID[0]); // Bind our Vertex Array Object so we can use it

glGenBuffers(2, &vboID[0]); // Generate our Vertex Buffer Object

glBindBuffer(GL_ARRAY_BUFFER, vboID[0]); // Bind our Vertex Buffer Object
glBufferData(GL_ARRAY_BUFFER, 18 * sizeof(GLfloat), vertices, GL_STATIC_DRAW); // Set the size and data of our VBO and set it to STATIC_DRAW
glVertexAttribPointer((GLuint)0, 3, GL_FLOAT, GL_FALSE, 0, 0); // Set up our vertex attributes pointer
glEnableVertexAttribArray(0); // Disable our Vertex Array Object

glBindBuffer(GL_ARRAY_BUFFER, vboID[1]); // Bind our Vertex Buffer Object
glBufferData(GL_ARRAY_BUFFER, 18 * sizeof(GLfloat), colors, GL_STATIC_DRAW); // Set the size and data of our VBO and set it to STATIC_DRAW
glVertexAttribPointer((GLuint)1, 3, GL_FLOAT, GL_FALSE, 0, 0); // Set up our vertex attributes pointer
glEnableVertexAttribArray(1); // Disable our Vertex Array Object

glBindVertexArray(0); // Disable our Vertex Buffer Object

现在为绘图功能:

glViewport(0, 0, windowWidth, windowHeight); // Set the viewport size to fill the window
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); // Clear required buffers

viewMatrix = glm::translate(glm::mat4(1.0f), glm::vec3(0.0f, 0.0f, -5.f)); // Create our view matrix
modelMatrix = glm::scale(glm::mat4(1.0f), glm::vec3(0.5f));  // Create our model matrix


shader->bind(); // Bind our shader

int projectionMatrixLocation = glGetUniformLocation(shader->id(), "projectionMatrix"); // Get the location of our projection matrix in the shader
int viewMatrixLocation = glGetUniformLocation(shader->id(), "viewMatrix"); // Get the location of our view matrix in the shader
int modelMatrixLocation = glGetUniformLocation(shader->id(), "modelMatrix"); // Get the location of our model matrix in the shader
glUniformMatrix4fv(projectionMatrixLocation, 1, GL_FALSE, &projectionMatrix[0][0]); // Send our projection matrix to the shader
glUniformMatrix4fv(viewMatrixLocation, 1, GL_FALSE, &viewMatrix[0][0]); // Send our view matrix to the shader
glUniformMatrix4fv(modelMatrixLocation, 1, GL_FALSE, &modelMatrix[0][0]); // Send our model matrix to the shader

glBindVertexArray(vaoID[0]); // Bind our Vertex Array Object

glDrawArrays(GL_POINTS, 0, 6);
//glDrawArrays(GL_TRIANGLES, 0, 6); // Draw our square

glBindVertexArray(0); // Unbind our Vertex Array Object


shader->unbind(); // Unbind our shader

SwapBuffers(hdc); // Swap buffers so we can see our rendering

顶点着色器:

#version 330 core

uniform mat4 projectionMatrix;
uniform mat4 viewMatrix;
uniform mat4 modelMatrix;

layout(location = 0) in vec3 in_Position;
in vec3 in_Color;

out vec3 pass_Color;

void main(void)
{
    gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(in_Position, 1.0);
    pass_Color = in_Color;
}

片段着色器:

#version 330 core

in vec3 pass_Color;
out vec4 out_Color;

void main(void)
{
    out_Color = vec4(pass_Color, 1.0);
}

0 个答案:

没有答案