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