【问题标题】:Is there any way to make a row of tiles work with GL_QUAD_STRIP?有没有办法让一排瓷砖与 GL_QUAD_STRIP 一起工作?
【发布时间】:2011-09-01 23:45:39
【问题描述】:

如果我想为游戏绘制一行 2D 方形图块,显而易见的方法是使用 GL_QUADS 并为每个图块指定 4 个顶点和纹理坐标。但由于这是一排正方形瓷砖,每个正方形的最后两个坐标是下一个的前两个坐标,这听起来正是 GL_QUAD_STRIP 的设计目的。您最终不必重复所有内部顶点。

当您尝试应用纹理时会出现问题。当您将它们绘制为四边形的“结束”时,您已经将纹理坐标绑定到顶点,但是当您想重用最后两个作为下一个四边形的开始时,您需要为它们重新分配新的纹理坐标,除非您正在使用的图块与前一个图块在图块集纹理上使用的图块直接相邻。

有什么办法可以使这个工作吗?还是只需要坚持使用 GL_QUADS 并指定所有内部顶点两次?

【问题讨论】:

    标签: opengl


    【解决方案1】:

    更高版本的 OpenGL 引入了一种在从顶点数组绘制时重新启动图元的方法。您所做的是指定一个特殊的虚拟元素索引,它不是引用顶点数组中的元素,而是指示新基元链的开始,例如四边形:http://www.opengl.org/wiki/Vertex_Specification#Primitive_Restart

    但是,如果您想让您的图块独立纹理化,那么它们共享顶点。顶点不仅仅是一个位置,它也是纹理坐标和分配给它的其他属性。所以实际上你不是在画一个四边形(共享顶点)而是独立的四边形。

    【讨论】:

      【解决方案2】:

      有一种方法可以做到,但没有有用的方法可以做到。也就是说,没有一种方法可以不添加更多索引。这样做实际上就是将您的GL_QUAD_STRIP 变成GL_QUADS

      所以我建议你坚持使用GL_QUADS

      【讨论】:

      • 使用 glPrimitiveRestart 怎么样?
      • @datenwolf:我的观点仍然成立,因为会使索引数据更大。您将有 4 个索引,然后重新启动,然后再有 4 个索引。使用 GL_QUADS,您只需拥有 4 个索引的每个单独的四边形。除了更大的索引数据,你什么也得不到。
      • 啊,我明白了。 OP 希望给每个图块一个纹理图集的不同部分。好吧,那么四边形不是正确的方法。
      猜你喜欢
      • 2020-03-09
      • 1970-01-01
      • 2013-03-27
      • 2010-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-22
      • 2023-03-28
      相关资源
      最近更新 更多