내 gl 화면에는 아무 것도 그릴 수 없습니다. 그냥 화면을 지 웁니다. 다음은 Main, Display 및 Cube 클래스입니다.OpenGL 3.3은 무언가를 그릴 수 없습니다
MAIN.CPP 생성자 glfw 및 glew를 초기화
Display d(800, 600, "Hi");
while (!d.IsClosed()) {
d.Clear();
d.Update();
}
return 0;
display.cpp.
void Display::Update() {
glfwPollEvents();
m_shader->UseProgram();
m_renderer->Render(*m_cube);
glfwSwapBuffers(m_window);
}
UseProgram 함수는 Shader 클래스에서 제공되며 단지 glUseProgram(m_programID);
입니다.
또한 m_renderer->Render()
은 매개 변수의 개체에서 Render 함수를 호출하기 만합니다.
cube.cpp
void Cube::Init() {
//cube vertices - colors
GLfloat data[] = {
-0.5f, 0.5f, 0.0f, m_color.r, m_color.g, m_color.b, m_color.a,
-0.5f, -0.5f, 0.0f, m_color.r, m_color.g, m_color.b, m_color.a,
0.5f, -0.5f, 0.0f, m_color.r, m_color.g, m_color.b, m_color.a,
0.5f, 0.5f, 0.0f, m_color.r, m_color.g, m_color.b, m_color.a,
-0.5f, 0.5f, -0.5f, m_color.r, m_color.g, m_color.b, m_color.a,
-0.5f, -0.5f, -0.5f, m_color.r, m_color.g, m_color.b, m_color.a,
0.5f, -0.5f, -0.5f, m_color.r, m_color.g, m_color.b, m_color.a,
0.5f, 0.5f, -0.5f, m_color.r, m_color.g, m_color.b, m_color.a
};
//cube indices
GLuint indices[] = {
//front
0, 1, 2,
0, 2, 3,
//top
4, 0, 3,
4, 3, 7,
//bottom
1, 3, 6,
1, 6, 2,
//left
4, 3, 1,
4, 1, 0,
//right
3, 2, 6,
3, 6, 7,
//back
4, 5, 6,
4, 6, 7,
};
m_vertexCount = sizeof(indices)/sizeof(GLuint);
//Generate buffers
glGenVertexArrays(1, &m_vaoID);
glGenBuffers(1, &m_vboID);
glGenBuffers(1, &m_eboID);
//Bind vertex array object
glBindVertexArray(m_vaoID);
//Bind vertex buffer object
glBindBuffer(GL_ARRAY_BUFFER, m_vboID);
glBufferData(GL_ARRAY_BUFFER, sizeof(data), data, GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GL_FLOAT), (GLvoid*)0);
glVertexAttribPointer(1, 4, GL_FLOAT, GL_FALSE, 4 * sizeof(GL_FLOAT), (GLvoid*)(3 * sizeof(GL_FLOAT)));
//Unbind vertex buffer object
glBindBuffer(GL_ARRAY_BUFFER, 0);
//Bind Element buffer object
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_eboID);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
//Unbind Element buffer object
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
//Unbind vertex array object
glBindVertexArray(0);
}
Init()
함수 생성자에서 호출된다. 이것은 모든 큐브 초기화 코드입니다. 배열 바인딩 및 바인딩 해제.
void Cube::Render() {
glBindVertexArray(m_vaoID);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_eboID);
glDrawElements(GL_TRIANGLES, m_vertexCount, GL_UNSIGNED_INT, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
glBindVertexArray(0);
}
어떤 문제인지 알 수 없습니다. 화면에 아무 것도 표시하지 않습니다. 원하는 경우 Shader 클래스도 게시 할 수 있습니다.
쉐이더 클래스와 소스를 표시 할 수 있습니까? 또한 VAO가 바인드 된 인덱스 버퍼를 저장하기 때문에'Init()'의'glBindBuffer (GL_ELEMENT_ARRAY_BUFFER, 0);'와'Render()'의 다른 호출을 제거 할 수 있습니다. – Nazar554