我一直在尝试在基于磁贴的2D OpenGL游戏中使用glDrawElements
。然而,当我绘制切片时,同一顶点的不同面的tex坐标可能不同:例如,这里的texcoords对于公共顶点处的2个四边形将是不同的:
___|
___|___
|___
|___
问题是glDrawElements
只接受一个索引数组,因此看起来每个顶点只能使用一个tex坐标。有没有办法克服这个限制?
答案 0 :(得分:7)
简答:你没有。您可以将顶点分解为唯一的顶点,这样就可以为每个属性创建一个索引列表。如果您有多个索引列表,则需要遍历索引列表,为任何未重复的索引集复制属性数据(位置,纹理坐标等)。
答案很长:你不应该。
使用现代硬件功能技术(OpenGL 3.x中的buffer textures和/或4.x中的shader image load/store),您可以完全颠覆属性管道并从缓冲区对象中任意加载数据。但是,你不应该期望这几乎和正确做事一样快。
除非你有一些明确定义的需要这样做(并且我不仅仅意味着你的模型格式提供这样的数据),你最好还是做得更好。请记住:这是每个图形应用程序在渲染过程中使用数组的过去十五年。您不会错过任何特殊的硬件功能或任何东西。