如果我想为游戏绘制一行2D方形拼贴,显而易见的方法是使用GL_QUADS并为每个拼贴指定4个顶点和纹理坐标。但由于这是一排方形瓷砖,每个方块的最后两个坐标是下一个方块的前两个坐标,这听起来就像GL_QUAD_STRIP的设计。您最终不必重复所有内部顶点。
当您尝试应用纹理时会出现问题。当您将纹理坐标绘制为四边形的“结束”时,已经将纹理坐标绑定到顶点,但是当您想要将最后两个重复使用作为下一个四边形的开头时,您需要为它们重新指定新的纹理坐标,除非您正在使用的图块与您的图块集纹理上使用的上一个图块的图块直接相邻。
有没有办法让这项工作?或者你只需坚持使用GL_QUADS并指定所有内部顶点两次?
答案 0 :(得分:1)
有一种方法可以做到这一点,但没有有用的方法来做到这一点。也就是说,没有办法不添加更多索引。这样做实际上就是将GL_QUAD_STRIP
变成GL_QUADS
。
所以我建议你坚持使用GL_QUADS
。
答案 1 :(得分:1)
更高版本的OpenGL引入了一种从顶点数组绘制时重新启动基元的方法。你要做的是指定一个特殊的虚拟元素索引,它不是引用顶点数组中的元素而是指示新原始链的开头,如四边形条:http://www.opengl.org/wiki/Vertex_Specification#Primitive_Restart
但是如果你想让你的瓷砖独立纹理化,那么它们不共享顶点。顶点不仅仅是一个位置,它还是纹理坐标和分配给它的其他属性。所以实际上你并没有绘制四边形条(它共享顶点)而是独立的四边形。