Opengl绘制立方体边缘
Opengl draw cube edges
我能够使用现代 opengl 绘制一个简单的立方体,但我希望能够从我绘制当前立方体的相同数据中绘制一个线立方体(顶点):
目前我正在绘制一个立方体并使用 glPolygonMode 绘制线条,但我想摆脱穿过每个四边形面的线条(基本上只是绘制立方体的边缘)
我无法比这更进一步,我不知道如何解决这个主题(着色器或其他一些 opengl 方法)
这样怎么画立方体?
最简单的方法是在渲染 QUADS 而不是 TRIANGLES 时仍然使用 glPolygonMOde(...)
。但是,这需要更改您的数据...
如果您的网格始终由 QUADS 组成并进行三角剖分,因此 2 个后续三角形始终形成 QUAD 但您不愿意切换到 QUADS,那么您可以编写一个几何着色器,接收 6 个顶点并输出 4 条线仍将或多或少地“快速”,但请注意几何着色器在过去不是很可靠...
如果这些都不是您可以修改的选项:
渲染接近急剧正常变化的片段。然而,这将隐藏背面,所以为了让它们也一样,你必须在 2 次传递中执行此操作,一次使用 glFrontFace(GL_CW);
,另一次使用 glFrontFace(GL_CCW);
组合它们的输出。这也允许您为隐藏的边缘设置不同的颜色...
所以我是这样看的:
glFrontFace(GL_CW);
render_mesh_to_trexture(); // using normal instead of color
render_siluete_from_texture(); // using texture from previous line
glFrontFace(GL_CCW);
render_mesh_to_trexture(); // using normal instead of color
render_siluete_from_texture(); // using texture from previous line
但是这会慢很多并且需要一致的缠绕规则...
另一种选择是仅编译 CPU 侧网格中的边列表,并删除所有重复项。它既简单又快速,但是会创建新的 VBO/VAO 数据并且不再符合您使用相同数据的要求(但是新的 VBO 可能只是整数索引,因此每个边 2 个整数)。
我能够使用现代 opengl 绘制一个简单的立方体,但我希望能够从我绘制当前立方体的相同数据中绘制一个线立方体(顶点):
目前我正在绘制一个立方体并使用 glPolygonMode 绘制线条,但我想摆脱穿过每个四边形面的线条(基本上只是绘制立方体的边缘)
我无法比这更进一步,我不知道如何解决这个主题(着色器或其他一些 opengl 方法)
这样怎么画立方体?
最简单的方法是在渲染 QUADS 而不是 TRIANGLES 时仍然使用 glPolygonMOde(...)
。但是,这需要更改您的数据...
如果您的网格始终由 QUADS 组成并进行三角剖分,因此 2 个后续三角形始终形成 QUAD 但您不愿意切换到 QUADS,那么您可以编写一个几何着色器,接收 6 个顶点并输出 4 条线仍将或多或少地“快速”,但请注意几何着色器在过去不是很可靠...
如果这些都不是您可以修改的选项:
渲染接近急剧正常变化的片段。然而,这将隐藏背面,所以为了让它们也一样,你必须在 2 次传递中执行此操作,一次使用 glFrontFace(GL_CW);
,另一次使用 glFrontFace(GL_CCW);
组合它们的输出。这也允许您为隐藏的边缘设置不同的颜色...
所以我是这样看的:
glFrontFace(GL_CW);
render_mesh_to_trexture(); // using normal instead of color
render_siluete_from_texture(); // using texture from previous line
glFrontFace(GL_CCW);
render_mesh_to_trexture(); // using normal instead of color
render_siluete_from_texture(); // using texture from previous line
但是这会慢很多并且需要一致的缠绕规则...
另一种选择是仅编译 CPU 侧网格中的边列表,并删除所有重复项。它既简单又快速,但是会创建新的 VBO/VAO 数据并且不再符合您使用相同数据的要求(但是新的 VBO 可能只是整数索引,因此每个边 2 个整数)。