【发布时间】:2016-07-31 16:25:20
【问题描述】:
我想使用 VAO/VBO 来回收相同的顶点并使用索引来加速渲染。
一切都很好,除了我的纹理模型使用 UV 坐标,并且对于相同的顶点(大约 >80%),我最终可能会根据我期望渲染的三角形有不同的 UV 坐标(事实上,我'我正在使用 md2 models 和纹理)。
这种渲染方式对于旧的 立即 模式来说很好而且很花哨;现在,解决这个问题并通过 VAO/VBO 进行渲染的最佳方法是什么?
我想到的是分解三角形并创建具有重复顶点的非常大的 VBO,以便我可以将正确的 UV 坐标链接到每个“相同”。
我不得不说我不喜欢这个...有什么想法吗?
附言。对于不了解格式的人:如果您想使用纹理映射,我相信您必须使用基于您正在渲染的三角形的自定义 UV 坐标。不然贴图颜色都乱了!
【问题讨论】:
-
"我最终可能会根据要渲染的三角形获得不同的 UV 坐标" 嗯...为什么?
-
@NicolBolas 这是 md2 规范(Quake 1/2)。在过去的美好时光(我说的是 2000 年初),相同的顶点具有不同的 UV 坐标,具体取决于渲染到哪个三角形 - 在某些情况下甚至是 4。正如您可以想象的那样,使用 VAO/VBO,您只能拥有一个 UV( AFAIK ofc :) 这在 compacted 形式中根本不起作用。查看我提供的链接以获取更多信息。
-
"同一顶点具有不同的 UV 坐标,具体取决于渲染到哪个三角形 - 在某些情况下甚至是 4。" 这并不能解释 为什么我> 你想要那个。这种能力有什么作用?谁在乎 MD2 格式是否允许?如果它没有任何用处,则不应使用它。
-
@NicolBolas 也许你不明白……如果我不指定多个不同的 UV 坐标,纹理映射对象就会全部混乱。我想要使用纹理映射,这就是纹理映射的定义方式!
-
如果您将几何图形拆分为不同的数组,放置在一个数组中,将 uv1 放在一个 uv2 中,等等。您可以按照您想要的任何组合绑定您想要的(事件绑定子范围)。
标签: opengl vbo texture-mapping uv-mapping vao