如何使用glDrawElements为tex coords数组和顶点数组使用不同的索引

Sud*_*n S 4 opengl

我一直在尝试glDrawElements在基于磁贴的2D OpenGL游戏中使用.然而,当我绘制切片时,同一顶点的不同面的tex坐标可能不同:例如,这里texcoords对于公共顶点处的2个四边形将是不同的:

___|
___|___
   |___
   |___
Run Code Online (Sandbox Code Playgroud)

问题是glDrawElements只需要一个索引数组,因此看起来每个顶点只能使用一个tex坐标.有没有办法克服这个限制?

Nic*_*las 7

简短的回答:你没有.您可以将顶点分解为唯一的顶点,这样就可以为每个属性创建一个索引列表.如果您有多个索引列表,则需要遍历索引列表,为任何未重复的索引集复制属性数据(位置,纹理坐标等).

答案很长:不应该.

使用现代硬件功能技术(OpenGL 3.x中的缓冲区纹理和/或4.x中的着色器图像加载/存储),您可以完全颠覆属性管道并从缓冲区对象中任意加载数据.但是,你不应该期望这几乎和正确做事一样快.

除非你有一些定义明确的要这样做(我不仅仅意味着你的模型格式提供这样的数据),你最好还是做得更好.请记住:这是在过去的十五年中,在渲染中使用数组的每个图形应用程序.您不会错过任何特殊的硬件功能或任何东西.

  • 不.您使所有属性都使用_single_索引数组.这将涉及复制一些顶点数据. (2认同)