【问题标题】:Opengl triangles and faces vertex limit?Opengl三角形和面顶点限制?
【发布时间】:2015-05-27 05:19:44
【问题描述】:
我正在制作一个 opengl-es 应用程序,我总是通过每个四边形传入 6 个顶点索引来绘制四边形,从而将一个四边形分成两个三角形。我以为你可以在 3d 图形中制作的只是四边形和三角形..?我在搅拌机中注意到,但是如果您使用抽取修饰符,您可以制作具有十几个或更多顶点的面孔。 opengl-es 可以渲染这个吗?如何渲染由十几个顶点组成的面?我不确定它是如何从引擎盖下的 opengl 工作的。每次收到 3 个顶点索引时,opengl 是否只知道绘制?如果是这样就方便了。
【问题讨论】:
标签:
android
ios
opengl-es
【解决方案1】:
OpenGL ES 以及桌面 OpenGL 的核心配置文件仅支持 由个三角形组成的基本类型。旧版本的 OpenGL 支持额外的原始类型,如 GL_QUADS 和 GL_POLYGON,但最近的硬件并不直接支持它们,而且大多是多余的。
除了单独的三角形(GL_TRIANGLES 原始类型)之外,还支持三角形条带(GL_TRIANGLE_STRIP)和三角形扇形(GL_TRIANGLE_FAN)。它们允许您绘制连接三角形的集合,而无需为每个三角形指定 3 个顶点。
下图(借自Red Book)显示了三角形是如何从这些基本类型的指定顶点形成的:
例如,如果您当前对四边形使用 6 个顶点索引,则只能将 4 个用于三角形网格或三角形扇形。有些人声称,只要您共享顶点,减少索引的数量通常不会提高性能。
如果您的输入格式使用具有任意数量顶点的多边形,那么只要多边形是凸的,这仍然很容易处理。如果您查看上图中的三角形扇形,您会注意到顶点顺序实际上与多边形的顺序相同。所以凸多边形可以直接用三角扇来表示。
如果您宁愿坚持使用 GL_TRIANGLES 进行渲染,并且输入具有 n 边多边形,则必须将它们拆分为三角形。同样,只要多边形是凸的,这很容易。除了为每个三角形单独生成索引之外,您可以使用与三角形扇形显示的相同类型的三角剖分。我在这里的回答更详细地说明了这一点:Converting quadriladerals in an OBJ file into triangles?。
非凸多边形是另一回事。您必须使用从中等简单到相当复杂的算法将它们分成三角形。如果您使用“多边形三角剖分算法”之类的搜索词,您应该能够找到大量文献。也可以通过巧妙地使用 OpenGL 中的模板缓冲区来绘制凹多边形。但我怀疑大多数建模程序会生成凹多边形,所以这种用例要少得多。