3d 为什么在directX中尝试渲染fbx模型时纹理坐标错误

3d 为什么在directX中尝试渲染fbx模型时纹理坐标错误,3d,directx,shader,c++-cx,directxtk,3d,Directx,Shader,C++ Cx,Directxtk,我有一个c++/cx项目,我想在其中使用DirectX-11渲染网格(从FBX文件加载)。 FBX文件包含纹理坐标,但在渲染它们时,发送到vertexshader的这些UV坐标是完全错误的 下面是它的外观: 这应该是2个人骑自行车,但纹理贴图完全错误 顶点描述如下所示: D3D11_INPUT_ELEMENT_DESC _vertexDescriptions[3] = { { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11

我有一个c++/cx项目,我想在其中使用DirectX-11渲染网格(从FBX文件加载)。 FBX文件包含纹理坐标,但在渲染它们时,发送到vertexshader的这些UV坐标是完全错误的

下面是它的外观:

这应该是2个人骑自行车,但纹理贴图完全错误

顶点描述如下所示:

D3D11_INPUT_ELEMENT_DESC _vertexDescriptions[3] =
{
    { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 },
    { "NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 },
    { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 },
};
请注意,渲染时位置和法线数据是正确的,只有纹理坐标错误/缺失

VertexShader输入和-输出:

struct VertexShaderInput
{
    float3 position : POSITION;
    float3 normal : NORMAL;
    float2 uv : TEXCOORD0;
};

struct VertexShaderOutput
{
    float4 color : COLOR0;
    float2 uv : TEXCOORD0;
    float4 position : SV_POSITION;
};
像素着色器输入:

struct PixelShaderInput
{
    float4 color: COLOR0;
    float2 uv : TEXCOORD0;
};
以下是fbx文件的一个片段:

LayerElementUV: 0 {
    Version: 101
    Name: "UVTex"
    MappingInformationType: "ByPolygonVertex"
    ReferenceInformationType: "IndexToDirect"
    UV: 0.118273,0.459037,0.598600,0.180400,0.647187,0.129884,
    //...
    UVIndex: 2136,255,879,734,2136,734,3602,1034,1034,3602,6071,1176,
    //...
visual studio将fbx文件构建到cmo文件中,并使用directxtk按如下方式加载:

_effectFactory = std::make_unique<EffectFactory>(_d3dDevice.Get());
_playerModel = Model::CreateFromCMO(_d3dDevice.Get(), L"Ambiorix.Track3DComponent\\PlayerModel.cmo", *_effectFactory);
而不是

struct VertexShaderOutput
{
    float4 color : COLOR0;
    float4 position : SV_POSITION;
    float2 uv : TEXCOORD;
};

修正了这个问题,不知道为什么。

没有太多的内容可以展示,但我会添加屏幕快照。我看错了,对不起。如果所有UV都归零了,那么确实没有什么可显示的。是的,它只显示纹理最左上角的像素,映射到整个模型上。嗯。。你的代码中没有显示加载过程,根据你的描述,在加载/导入模型时,UV似乎为零。是的,没错,我会将代码添加到我的帖子中。没有太多要显示的内容,但我会添加screenshotsAh,我误读了,抱歉。如果所有UV都归零了,那么确实没有什么可显示的。是的,它只显示纹理最左上角的像素,映射到整个模型上。嗯。。代码中没有任何内容显示加载过程,根据您的描述,加载/导入模型时UV看起来为零。是的,没错,我会将代码添加到我的帖子中。
struct VertexShaderOutput
{
    float4 color : COLOR0;
    float2 uv : TEXCOORD;
    float4 position : SV_POSITION;
};
struct VertexShaderOutput
{
    float4 color : COLOR0;
    float4 position : SV_POSITION;
    float2 uv : TEXCOORD;
};