【问题标题】:How to draw a texture using indices如何使用索引绘制纹理
【发布时间】:2010-12-15 04:05:06
【问题描述】:

我正在使用 8 个顶点和 36 个索引绘制一个简单的立方体。只要我不尝试纹理化就没有问题。

但是我想对其进行纹理处理。我可以只用 8 个顶点吗?似乎我得到了一些奇怪的纹理行为。我是否需要设置具有 24 个顶点和 36 个索引的立方体才能正确纹理立方体?

然后使用顶点和索引来绘制是没有意义的。我也可以只使用顶点。

【问题讨论】:

  • 恭喜,您刚刚发现立方体是邪恶的,无法进一步优化。不过,您可以使用三角条。但是,是的,你是对的。位置相同但属性不同的顶点在 OpenGL 中不被认为是相等的,因为索引只有一个间接性。 (一组索引到几个数组,不是每个数组的一组索引,或者一组索引到几组索引)

标签: opengl-es


【解决方案1】:

一个索引是指一组属性(顶点、法线、颜色、边缘标志等)。如果您愿意在立方体侧面的相邻面上镜像纹理,则可以共享侧面的纹理和顶点坐标。但是,共享相同坐标的顶面和底面将不起作用——纹理坐标的一个轴不会改变。添加其他属性(尤其是法线)后,立方体将需要 24 个单独的索引(每个索引都有顶点、纹理和法线)才能拥有“平坦”的边。

另一种可能适合您的方法是texture coordinate generation。但是,一个立方体需要 24 个单独的顶点是完全正常的。

【讨论】:

  • 谢谢!我在想为什么根本需要索引?为什么不只使用vertcies?它是 OpenGL ES,它应该在内存有限的移动设备上运行。一个用于顶点的缓冲区和一个用于索引的缓冲区似乎很多。
  • 立方体是一个角落案例(双关语不是故意的)。大多数网格更加复杂和镶嵌,因此可以从使用条带、扇形和索引中受益,因为您需要复制的数据更少。
  • “为什么不只使用顶点?”这正是glDrawArrays 所做的。
  • @本:很好。我读过的关于 OpenGL ES 的教程都没有提到 glDrawArrays。我认为通过使用索引和顶点以正确的方式进行操作,他们对此非常感兴趣。我会做一个测试,看看我得到了什么。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-25
  • 2014-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多