【问题标题】:Draw quad elements using GL_Trianglestrip OpenGL ES 2.0使用 GL_Trianglestrip OpenGL ES 2.0 绘制四边形元素
【发布时间】:2012-04-18 13:55:32
【问题描述】:

我想在 OpenGL ES 2.0 中解析模型并渲染 4 顶点多边形(矩形),而不是使用两个三角形,我想为每个四边形/矩形使用一个三角形带。

问题是我的矩形没有在整个模型中连接。如果我有三个四边形(12 个顶点),我想像这样绘制它们(numOfQuadFaces = 3):

glDrawArrays(GL_TRIANGLE_STRIP, 0, numOfQuadFaces*4);

对顶点数组进行排序,以便每四个顶点开始一个新的四边形。但是当然 OpenGL 将其解释为对数组中第三个顶点之外的每个新顶点开始一个新三角形。我可以在某个地方指定我想要长度为 4 的单个三角形条/四边形吗? - 这样我就可以画出类似的东西(如果当然只在 glDrawArrays- 调用):

glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glDrawArrays(GL_TRIANGLE_STRIP, 4, 4);
glDrawArrays(GL_TRIANGLE_STRIP, 8, 4);

【问题讨论】:

  • 感谢 Andreas 下方的帮助,但我在为 iOS 开发时坚持使用 OpenGL ES。模型是由用户动态加载的,所以我需要有一些可以直接工作而不是来自 OpenGL 3.x 的东西。我确实将所有四边形转换为三边形,但我只是觉得我在浪费内存,特别是因为我需要多面阴影(即我的三边形不能共享顶点,因为每个顶点都需要自己的法线向量,而多面阴影在 OpenGL ES 上不是一个选项据我所知)。

标签: ios opengl-es gl-triangle-strip


【解决方案1】:

您最好的选择是将四边形转换为三角形。在普通 OpenGL 中,如果您使用索引三角形条带,glPrimitiveRestartIndex 基本上指定了一个索引,当发送时重新启动条带,这在 OpenGL ES 2.0 中不可用,所以我想这没有帮助。

另一种选择是将“条”与退化三角形连接起来,但这将占用与将四边形转换为三角形(两个额外顶点)一样多的内存。

【讨论】:

  • glPrimitiveRestartIndex 在 3.1 及更高版本中,不在 ES 2.0 中。
  • 谢谢,把信息留在那里,以防有人遇到类似问题。
【解决方案2】:

您可以通过插入额外的点来渲染退化的三角形,从而产生线形三角形,图形驱动程序将优化这些三角形并渲染不连贯的三角形带,可以是四边形(两个三角形)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多