【发布时间】:2013-09-05 18:07:05
【问题描述】:
我正在尝试让纹理在我的 OBJMesh 加载器上工作。到目前为止,我已经看过一些关于如何做到这一点的在线教程,最明显的例子是我理解的立方体/盒子的例子。但是我遇到了一个顶点可能使用/具有多个纹理坐标的问题。
例如:
f 711/1/1 712/2/2 709/3/3
f 711/9/1 704/10/9 712/11/2
如您所见,索引顶点编号 711 使用纹理坐标编号 1 和 9,索引顶点编号 712 使用纹理坐标编号 2 和 11。所以我的问题是如何让它与多个纹理坐标一起使用?是否有某种缓冲区可以使用,例如顶点缓冲区和索引缓冲区?
我为此使用索引,并且我有以下顶点声明:
D3DVERTEXELEMENT9 vertexElement[] = { {0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0},
{0, 12, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0},
D3DDECL_END()};
device->CreateVertexDeclaration(vertexElement, &vertexDec);
这是我的顶点结构:
struct VERTEX{
D3DXVECTOR3 position;
D3DXVECTOR2 uv;
D3DCOLOR color;
};
不太确定这里要显示什么其他代码,但如果我遗漏了一些东西或者你们需要看到一些可以帮助我的东西,请告诉我。
谢谢
编辑:如果我使用 FVF 而不是顶点声明会更好吗?
【问题讨论】:
-
不行,你需要在你的顶点缓冲区中添加多个位置相同、纹理坐标不同的顶点。
-
@NicoSchertler 真的没有办法解决这个问题吗?我真的不敢相信 DirectX 没有提供解决这个问题的方法......
-
实在是没有办法了。
标签: c++ directx texture-mapping directx-9