C++ OpenGL不渲染任何东西
我正在遵循一个在线教程(大致),虽然我没有错误,但没有任何渲染 以下是我的代码的重要部分 初始化:C++ OpenGL不渲染任何东西,c++,opengl,graphics,C++,Opengl,Graphics,我正在遵循一个在线教程(大致),虽然我没有错误,但没有任何渲染 以下是我的代码的重要部分 初始化: void init() { GLfloat firstTriangle[] = { -0.9f, -0.5f, 0.0f, // left -0.0f, -0.5f, 0.0f, // right -0.45f, 0.5f, 0.0f, // top }; GLfloat secondTriangle[] =
void init()
{
GLfloat firstTriangle[] = {
-0.9f, -0.5f, 0.0f, // left
-0.0f, -0.5f, 0.0f, // right
-0.45f, 0.5f, 0.0f, // top
};
GLfloat secondTriangle[] = {
0.0f, -0.5f, 0.0f, // left
0.9f, -0.5f, 0.0f, // right
0.45f, 0.5f, 0.0f // top
};
// Set up the shaders
buildandcomp();
//generate VAOs/VBOs
generateVertexArrayObjects(firstTriangle, secondTriangle);
}
这里是buildandcomp():
请注意,变量是全局定义的
以下是generateVertexArrayObjects():
以下是着色器:
const char* vertexShaderSource = "#version 330 core\n"
"layout (location = 0) in vec3 aPos;\n"
"void main()\n"
"{\n"
" gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);\n"
"}\0";
const char* fragmentShader1Source = "#version 330 core\n"
"out vec4 FragColor;\n"
"void main()\n"
"{\n"
" FragColor = vec4(1.0f, 0.5f, 0.2f, 1.0f);\n"
"}\n\0";
const char* fragmentShader2Source = "#version 330 core\n"
"out vec4 FragColor;\n"
"void main()\n"
"{\n"
" FragColor = vec4(1.0f, 1.0f, 0.0f, 1.0f);\n"
"}\n\0";
以下是我的显示功能:
void display() {
keyOperations();
glClear(GL_COLOR_BUFFER_BIT);
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glUseProgram(shaderProgramOrange);
glBindVertexArray(VAOs[0]);
glDrawArrays(GL_TRIANGLES, 0, 3);
glUseProgram(shaderProgramYellow);
glBindVertexArray(VAOs[1]);
glDrawArrays(GL_TRIANGLES, 0, 3);
glutSwapBuffers();
}
我怀疑这与我的着色器有关,但我不知道这可能是什么。我还是OpenGL新手,所以我不确定它在哪里,我错了。我已经加载了我的数据,我已经构建并编译了我的着色器,我已经使用这些着色器显示了我的三角形。如果您有任何见解,我们将不胜感激。这是一个非常基本的c/c++问题,与OpenGL无关。想想
sizeof(t1)
和sizeof(t2)
。将其替换为sizeof(GLfloat)*9
@Rabbid76谢谢您的回答。一定有什么我不明白的。为什么sizeof(t1)不等于sizeof(GLfloat)*9?当我在init()函数中打印firstTriangle的大小时,大小是36。然而,在我的VAO发生器中,sizeof(t1)是4。发生了什么事?谢谢。您不知道数组的大小。获取参数的大小,该参数是指向数组的指针
const char* vertexShaderSource = "#version 330 core\n"
"layout (location = 0) in vec3 aPos;\n"
"void main()\n"
"{\n"
" gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);\n"
"}\0";
const char* fragmentShader1Source = "#version 330 core\n"
"out vec4 FragColor;\n"
"void main()\n"
"{\n"
" FragColor = vec4(1.0f, 0.5f, 0.2f, 1.0f);\n"
"}\n\0";
const char* fragmentShader2Source = "#version 330 core\n"
"out vec4 FragColor;\n"
"void main()\n"
"{\n"
" FragColor = vec4(1.0f, 1.0f, 0.0f, 1.0f);\n"
"}\n\0";
void display() {
keyOperations();
glClear(GL_COLOR_BUFFER_BIT);
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glUseProgram(shaderProgramOrange);
glBindVertexArray(VAOs[0]);
glDrawArrays(GL_TRIANGLES, 0, 3);
glUseProgram(shaderProgramYellow);
glBindVertexArray(VAOs[1]);
glDrawArrays(GL_TRIANGLES, 0, 3);
glutSwapBuffers();
}