3d 为什么在directX中尝试渲染fbx模型时纹理坐标错误
我有一个c++/cx项目,我想在其中使用DirectX-11渲染网格(从FBX文件加载)。 FBX文件包含纹理坐标,但在渲染它们时,发送到vertexshader的这些UV坐标是完全错误的 下面是它的外观: 这应该是2个人骑自行车,但纹理贴图完全错误 顶点描述如下所示: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
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;
};