2017-10-21 168 views
0

我正在尝试从Blender导出Collada格式,并且使用更复杂的对象和纹理,我在索引“p”部分注意到它会列出相同的顶点信息,但使用不同的法线和uv坐标。为什么3D模型具有不同uv坐标的重复顶点位置

我觉得两个主要问题非常重要。

1:为什么?不应该只有1个顶点位置和1个UV坐标的位置?

2(所有最重要的问题):如果这个顶点信息不按顺序放入顶点着色器会发生什么?例如,索引1顶点和索引10顶点共享相同的位置,但具有不同的法线和UV坐标。如果指数10先走,然后指数1?反之亦然,这是否会改变Pixel Shader内部的任何内容?这是如何影响管道的其余部分的?

谢谢!

回答

1

顶点由定义它的所有信息的组合定义。所以你的顶点是五维的:(x,y,z,u,v)。对于任何两个顶点,如果u1!= u2或v1!= v2,它们不是同一个顶点。如果你想说“顶点是位置A加纹理位置B加上普通的C + ...”,固定管道GPU不支持这种额外的间接性,并且它还不是标准的与可编程图形处理器间接寻址,因为它通常相当于在内存带宽上花费的比在节省上更多。你可以,但人们通常不会。

顶点着色器没有关于它正在处理的顶点落在排序中的概念;只要几何管道保持跟踪,就不会出现问题。

+0

很好的答案,但问题1呢? – Mike5050

+0

GPU与“交错顶点数据”一起工作,这意味着所有的顶点数据都被打包到由格式和步幅定义的相同块中。如果您想要使用不同的法线,UV,骨骼指数或任何其他每个顶点数据都具有相同的位置(也称为“分割”),则必须重复该位置。 GPU使用“结构数组”,而不是“数组结构”。即使在使用多个顶点缓冲区流时,您也只有每个顶点的所有缓冲区都有一个索引 –

+0

正确。我对问题1的回答是:没有顶点被重复。顶点(x,y,z,u1,v1)和顶点(x,y,z,u2,v2)是不同的顶点,因为它们具有不同的(u,v)s。 – Tommy

相关问题