Спойлер: эта проблема длинная, поэтому, пожалуйста, наберитесь терпения и читайте до конца.
Задача № 1:
Я делаю проект пула и хочу визуализировать каждый объект отдельно из-за независимого перемещения каждого объекта.
Что касается сейчас, я собираю его в один буфер и рендеринг в один кусок.
(примечание: каждый объект Ball и объект Table включают в себя вершины и нормали.)
Задача № 2:
Я пытаюсь визуализировать 2D-бар (который отражает силу удара), и он не будет отображаться. Я звоню после того, как я рендеринг 3D сцены
Я смотрел это видео несколько раз и не понял, что я сделал не так.
Что я сейчас делаю (после помещения объектов в вершинный буфер и нормальный буфер): ( оригинальный источник )
do {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glUseProgram(programID);
glUniform3f(LightID, 0, 6, 4);
computeMatricesFromInputs();
ProjectionMatrix = getProjectionMatrix();
ModelMatrix = glm::mat4(1.0);
MVP = ProjectionMatrix * viewMatrix * ModelMatrix;
glUniformMatrix4fv(MatrixID, 1, GL_FALSE, &MVP[0][0]);
glUniformMatrix4fv(ModelMatrixID, 1, GL_FALSE, &ModelMatrix[0][0]);
glUniformMatrix4fv(ViewMatrixID, 1, GL_FALSE, &viewMatrix[0][0]);
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
glVertexAttribPointer(
0, // attribute
3, // size
GL_FLOAT, // type
GL_FALSE, // normalized?
0, // stride
(void*)0 // array buffer offset
);
glEnableVertexAttribArray(2);
glBindBuffer(GL_ARRAY_BUFFER, normalbuffer);
glVertexAttribPointer(
2, // attribute
3, // size
GL_FLOAT, // type
GL_FALSE, // normalized?
0, // stride
(void*)0 // array buffer offset
);
glDrawArrays(GL_TRIANGLES, 0, vertices.size());
DrawHUD();
// Swap buffers
glfwSwapBuffers(window);
glfwPollEvents();
} // Check if the ESC key was pressed or the window was closed
while (glfwGetKey(window, GLFW_KEY_ESCAPE) != GLFW_PRESS &&
glfwWindowShouldClose(window) == 0);
То, что я хочу, чтобы это было:
do{
for (int i = 0; i < BALL_NUMBER; i++)
{
balls[i].draw();
}
} // Check if the ESC key was pressed or the window was closed
while (glfwGetKey(window, GLFW_KEY_ESCAPE) != GLFW_PRESS &&
glfwWindowShouldClose(window) == 0);
что должно содержать draw
и как мне это сделать?