我能够用现代opengl绘制一个简单的立方体,但我希望能够从我用(顶点)绘制的数据中绘制一个直线立方体:
目前,我正在绘制一个立方体,并使用glPolygonMode绘制线条,但我想去掉通过每个四面的线条(实质上只是绘制立方体的边缘)。
我无法得到更多,我不知道如何处理这个主题(着色器,或其他一些opengl方法)
我怎么能这样画一个立方体呢?
发布于 2022-03-03 10:17:26
最简单的方法是在渲染四边形时仍然使用glPolygonMOde(...)
,而不是三角形。然而,这需要更改您的数据..。
如果你的网格总是由四边形和三角形组成,那么两个后续三角形总是形成一个四边形,但是你不愿意切换到四边形,那么你可以编写一个几何着色器,包含6个顶点并输出4行,这些行仍然或多或少是“快速”的,但是请注意,在过去不太可靠的几何图形着色器.
如果这些不是选项,您可以修改以下内容:
使碎片接近于剧烈的正常变化。然而,这将隐藏背面,因此,为了让它们也这样做,您必须在两次传递中完成,一次使用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个ints )。
https://stackoverflow.com/questions/71325300
复制相似问题