是否可以在OpenGL中的单个绘图调用中绘制线条和三角形?

时间:2016-04-29 05:23:45

标签: opengl

在Blender和许多其他3D建模程序中,有3D操纵器小部件(句柄),看起来像这样。

Example of a 3D manipulator widget

但是,正如您所看到的,这些小部件由多边形手柄和从原点连接到它们的线组成。但是,在OpenGL中,绘制调用类似 glDrawElementsglDrawArrays每个绘制调用只能使用一种基本模式(例如GL_TRIANGLESGL_POINTSGL_LINES,...)。

因此,为了绘制由三角形和线条组成的3D小部件,它需要至少两个VBO,一个用于多边形,一个用于线条。但是我认为为此进行两次平局调用非常尴尬。 (或者,如果没有实例化或合并VBO,我们每个轴需要2个绘制调用。)

在这种情况下,是否可以在单个绘制调用中绘制线条和三角形?虽然绘制小部件不会有太多的性能损失,但我很好奇是否有是一种有效的方法来绘制它。

1 个答案:

答案 0 :(得分:2)

  

在这种情况下,是否可以在单次绘制调用中绘制线条和三角形?

是的,您可以使用geometry shaders。这些将允许您发出不必与输入基元匹配的新输出基元。

在这种情况下值得吗?我建议不要,为了一点利益,这将是非常复杂的。

对所有axi的几何数据使用单个VBO / IBO。在顶点数据中包含一种颜色,然后在一次调用中绘制三条轴线,然后在另一条调用中绘制三个轴线。