如何同时使用顶点、法线和纹理索引? 我用C++和DirectX 11编写了一个小型的渲染引擎。我已经设法使用索引顶点渲染模型。现在我还想支持纹理和顶点法线。我使用的是波阵面OBJ文件,它使用索引来引用正确的纹理和法线坐标(很像索引顶点)。这是我第一次把顶点、纹理和法线结合起来做这样的事情,所以这对我来说有点新鲜
我面临的问题是,顶点、法线和纹理坐标的索引数量不同,我正在尝试找到一种在顶点着色器中使用所有这些索引的正确方法。为了更清楚地说明这个问题,我制作了一些图片 左侧图像是简单的piramid对象的线框,右侧图像是其UV坐标布局(piramid底部位于中心)。在左图中,您可以看到piramid有4个顶点,因此有4个顶点索引。右UV布局有6个UV坐标,因此有6个纹理索引。因为皮拉明的每一面都有自己的法线,所以只有4个法线指数 我在搜索SO的过程中发现了这个问题,从理论上讲似乎是可行的(我还没试过)。这是解决此类问题的常用方法还是有更好的方法?你建议我做什么 谢谢:)如何同时使用顶点、法线和纹理索引? 我用C++和DirectX 11编写了一个小型的渲染引擎。我已经设法使用索引顶点渲染模型。现在我还想支持纹理和顶点法线。我使用的是波阵面OBJ文件,它使用索引来引用正确的纹理和法线坐标(很像索引顶点)。这是我第一次把顶点、纹理和法线结合起来做这样的事情,所以这对我来说有点新鲜,c++,directx,hlsl,directx-11,C++,Directx,Hlsl,Directx 11,我面临的问题是,顶点、法线和纹理坐标的索引数量不同,我正在尝试找到一种在顶点着色器中使用所有这些索引的正确方法。为了更清楚地说明这个问题,我制作了一些图片 左侧图像是简单的piramid对象的线框,右侧图像是其UV坐标布局(piramid底部位于中心)。在左图中,您可以看到piramid有4个顶点,因此有4个顶点索引。右UV布局有6个UV坐标,因此有6个纹理索引。因为皮拉明的每一面都有自己的法线,所以只有4个法线指数 我在搜索SO的过程中发现了这个问题,从理论上讲似乎是可行的(我还没试过)。
注意:我的顶点、法线和纹理数据存储在cpu端的单独阵列中。啊,在我看来,您需要访问:
看看他们这里有什么,让它旋转一下我建议你分析问题,缩小到最简单的情况;对我来说,它只使用了两个正方形(平面,4个三角形),并尝试在两个正方形上正确映射纹理,如图所示 使用这个简单的案例,您可以获得以下数据:
- 6个顶点
- 6紫外线
- 6条法线(对于每个顶点,即使某些顶点可能共享相同的法线)
- 12指数
看看一些基本的DirectX11教程,或者如果您可以预订的话。是的,这实际上是有意义的。现在我更清楚了,现在知道了这一点,我认为OBJ格式还不能直接从OBJ导出器中读取。我想我会看看其他更合适的数据格式。你知道你可以推荐的数据格式吗?我听说COLLADA是一种很好的数据格式,并且有一种可读的格式(xml),我自己还没有尝试过,但可能是你最好的选择。因为我实际上是为Blender和3DMax创建了自己的导出器,你可以在我的博客notnullgothik.blogspot.com中看到结果,大多数商业引擎都会使用自己的添加优化和二进制格式的数据,就像我使用的那样。