3d 为什么三维模型具有不同uv坐标的重复顶点位置

3d 为什么三维模型具有不同uv坐标的重复顶点位置,3d,blender,directx-11,vertex-shader,collada,3d,Blender,Directx 11,Vertex Shader,Collada,我正在尝试从Blender导出Collada格式,并使用更复杂的对象和纹理,我注意到在索引“p”部分,它将列出相同的顶点信息,但使用不同的法线和uv坐标 我觉得两个主要问题非常重要。 1:为什么?它不应该只有一个顶点位置和一个UV坐标吗 2(最重要的问题):如果顶点信息被无序地放入顶点着色器,会发生什么?例如,索引1顶点和索引10顶点共享相同的位置,但具有不同的法线和UV坐标。如果先是索引10,然后是索引1呢?反之亦然,这会改变像素着色器内部的任何内容吗?这对管道的其余部分有何影响 谢谢大家!

我正在尝试从Blender导出Collada格式,并使用更复杂的对象和纹理,我注意到在索引“p”部分,它将列出相同的顶点信息,但使用不同的法线和uv坐标

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

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

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


谢谢大家!

顶点由定义它的所有信息的组合来定义。所以你的顶点是五维的:(x,y,z,u,v)。对于任意两个顶点,如果u1!=u2或v1!=v2它们不是同一个顶点。固定管道GPU不支持额外级别的间接寻址,如果您想说“顶点是位置A加纹理位置B加普通C加…”,那么就需要额外级别的间接寻址。使用可编程GPU添加该级别的间接寻址仍然不是标准做法,因为这通常意味着在内存带宽上花费的钱比节省的钱多。你可以,但人们通常不会


顶点着色器不知道它正在处理的顶点在排序中的位置;只要几何管道保持跟踪,就不会出现任何问题。

回答得很好,但问题1呢?GPU使用“交错顶点数据”,这意味着所有逐顶点数据都打包到由格式和跨步定义的相同块中。如果要使用不同法线、UV、骨骼索引或任何其他逐顶点数据来获得相同的位置,则必须复制该位置(也称为“拆分”)。GPU使用“结构的数组”,而不是“数组的结构”。即使使用多个顶点缓冲区流,每个vertexRight的所有缓冲区也只有一个索引。我对第一个问题的回答是:没有重复的顶点。顶点(x,y,z,u1,v1)和顶点(x,y,z,u2,v2)是不同的顶点,因为它们具有不同的(u,v)s。为什么三维模型具有相同的顶点但具有不同的UV?如果纹理只是包裹在模型的顶部,为什么需要这样做?如果它有不同的UV,它不是相同的顶点。它是一个不同的顶点。一个模型可能在同一位置有两个顶点,或者是因为它需要映射其源纹理中的不连续性-在一般情况下,避免这些是不可能的,例如,如何映射八的图形或者可能是因为它使用了多个纹理,并且坐标没有对齐。