将每个对象渲染到空间中,并在3D场景上渲染2D场景
Rendering each object into the space independently and rendering 2D scene over 3D scene
扰流板:这个问题很长,请耐心等待直到结束。
问题编号1:我正在制作一个池项目,并且由于每个对象的独立移动,我想分别渲染每个对象。至于目前,我将其堆放到一个缓冲区中,然后将其构成一块。(侧面注意:每个球对象和表格对象都包括顶点和正常。(
问题编号2:我试图渲染2D栏(代表引人注目的力量(,它不会出现。我在渲染3D场景
后就称呼它我已经看了几次视频,不明白我做错了什么。
我现在正在做的事情(将对象堆叠到vertexbuffer和normalbuffer之后(:(原始源(
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
应该包含什么?如何使其起作用?
您的顶级循环应该:
- 用
glClear
清除颜色和深度缓冲液 - 设置整个场景范围的制服,例如光ID,投影和视图矩阵
- 分别渲染每个球:(即
Ball::draw
方法(- 将模型矩阵统一设置以旋转和/或重新定位世界空间中的球。这可能需要重新计算
MVP
制服,具体取决于您的着色器代码 - (可选(以某种方式识别球(通过统一或绑定不同纹理的不同颜色(
- 渲染共享球网(可选地绑定球的VAO,然后致电
glDrawArrays
(
- 将模型矩阵统一设置以旋转和/或重新定位世界空间中的球。这可能需要重新计算
- 渲染hud
- 交换缓冲区
所有设置代码(加载网格,创建数组缓冲区和VAO,设置均匀 - 属性绑定(都应在前面进行。
相关文章:
- 无法将结构注册为增强几何体3D点
- CPU 瓶颈;处理具有许多非静态对象的 3D 场景渲染的简单方法
- 如何使用Qt 3D库加载和显示搅拌机.obj源文件场景
- 如何在 3D OpenGL 场景上绘制 SDL 2D 矩形?
- 使用 pcl 或 opencv 在 2D 场景中匹配 3D 模型
- Oculus Tiny Room,DirectX,将3D模型加载到场景中
- 将每个对象渲染到空间中,并在3D场景上渲染2D场景
- Qt点云降低了场景3d中的性能
- DirectX 10 3D场景随着2D绘图而消失
- 3D场景转换无法正常工作
- 如何在 QML 场景上绘制 3D 线条
- 如何在 3D 场景中旋转单个对象
- Opengl 在移动的 3D 场景中绘制 2D 矩形
- DirectX::SpriteFont/SpriteBatch 阻止绘制 3D 场景
- 将 3D 模型加载到 OpenGL 场景中
- OpenGL 3.3:在3D场景上显示2D纹理的问题
- 如何在3D场景中使用和设置轴
- HUD被绘制出来,但是OpenGL 3D场景消失了
- 在3D场景中存储模型位置的好方法是什么?
- 在3D场景中定位物体,然后找出用户点击了什么