我正在使用 C++ 和 DirectX 11 编写一个小型渲染引擎。我已经设法使用索引顶点渲染模型。现在我也想支持纹理和顶点法线。我正在使用 Wavefront OBJ 文件,它使用索引来引用正确的纹理和法线坐标(很像索引顶点)。这是我第一次用顶点、纹理和法线组合做这样的事情,所以这对我来说有点新鲜。
我面临的问题是顶点、法线和纹理坐标的索引数量不一样,我试图找到在顶点着色器中使用所有这些索引的正确方法。为了更清楚地说明问题,我制作了一些图像。
左图是一个简单的金字塔对象的线框,右图是它的 UV 坐标布局(金字塔的底部在中心)。在左图中,您可以看到 piramid 有 4 个顶点,因此有 4 个顶点索引。正确的 UV 布局有 6 个 UV 坐标,因此有 6 个纹理索引。对于 piramid 的每个面都有自己的法线,因此只有 4 个法线索引。
我在搜索 SO 时发现了这个问题,它似乎在理论上有效(我还没有尝试过)。这是解决此类问题的常用方法还是有更好的方法?你会建议我做什么?
谢谢 :)
PS:我的顶点、法线和纹理数据存储在 cpu 端的单独数组中。