Opengl三角形和面顶点限制?

时间:2015-05-27 05:19:44

标签: android ios opengl-es

我正在制作一个opengl-es应用程序,我总是通过在每个四边形中传入6个顶点索引来绘制四边形,从而将四边形分成两个三角形。我认为你在3D图形中所能做的就是四边形和三角形..?我在混合器中注意到,如果使用decimate修改器,则可以制作具有十几个或更多顶点的面。可以用opengl-es渲染吗?你如何渲染由十几个顶点组成的面孔?我不确定它是如何从敞篷车的角度来看的。 opengl每次收到3个顶点索引时都知道绘制吗?如果这样那将是方便的。

1 个答案:

答案 0 :(得分:0)

OpenGL ES以及桌面OpenGL的核心配置文件仅支持三角形组成的基本类型。较早版本的OpenGL支持其他原始类型,如GL_QUADSGL_POLYGON,但最近的硬件并没有直接支持它们,而且大多数都是冗余的。

除了单独的三角形(GL_TRIANGLES基本类型)之外,还支持三角形条带(GL_TRIANGLE_STRIP)和三角形扇形(GL_TRIANGLE_FAN)。它们允许您绘制连接三角形的集合,而不是为每个三角形指定3个顶点。

下图(从Red Book借用)显示了如何根据每种原始类型的指定顶点形成三角形:

primitive types

例如,当前对四边形使用6个顶点索引时,只能使用4个三角形网格或三角形扇形。有些人声称,只要你共享顶点,减少索引的数量通常不会有助于提高性能。

如果您的输入格式使用具有任意数量顶点的多边形,只要多边形是凸的,这仍然很容易处理。如果你看一下上图中的三角形扇形,你会发现顶点排序实际上与多边形相同。因此凸多边形可以直接用三角形扇形表示。

如果您希望坚持使用GL_TRIANGLES进行渲染,并且输入具有n边多边形,则必须将它们分割为三角形。同样,只要多边形是凸的,这很容易。除了为每个三角形分别生成索引外,您可以使用与三角形扇形所示的三角形相同的三角剖分。我在这里的回答详细阐述了这一点:Converting quadriladerals in an OBJ file into triangles?

非凸多边形是另一回事。您将不得不使用从中等简单到相当复杂的算法将它们分成三角形。如果您使用类似"多边形三角剖分算法"等搜索词,您应该能够找到大量文献。通过巧妙地使用OpenGL中的模板缓冲区,也可以绘制凹多边形。但我怀疑大多数建模程序会生成凹多边形,因此这是一个非常罕见的用例。