使用DirectXTK加载网格

使用DirectXTK加载网格,directx,directx-11,directxtk,Directx,Directx 11,Directxtk,我使用DirectXTK加载网格。首先,我将.fbx导入vs2015并构建,然后获取.cmo文件。然后我使用DirectXTK load.cmo,如下所示: bool MeshDemo::BuildModels() { m_fxFactory.reset(new EffectFactory(m_pd3dDevice)); m_states.reset(new CommonStates(m_pd3dDevice)); m_model = Model::CreateFrom

我使用DirectXTK加载网格。首先,我将.fbx导入vs2015并构建,然后获取.cmo文件。然后我使用DirectXTK load.cmo,如下所示:

bool MeshDemo::BuildModels()
{
    m_fxFactory.reset(new EffectFactory(m_pd3dDevice));
    m_states.reset(new CommonStates(m_pd3dDevice)); 
    m_model = Model::CreateFromCMO(m_pd3dDevice, L"T54.cmo", *m_fxFactory, true, true);

    return true;
}
void MeshDemo::Render()
{
    m_pImmediateContext->ClearRenderTargetView(m_pRenderTargetView, Colors::Silver);
    m_pImmediateContext->ClearDepthStencilView(m_pDepthStencilView, D3D11_CLEAR_DEPTH | D3D11_CLEAR_STENCIL, 1.0f, 0);

    XMVECTOR qid = XMQuaternionIdentity();
    const XMVECTORF32 scale = { 0.01f, 0.01f, 0.01f };
    const XMVECTORF32 translate = { 0.f, 0.f, 0.f };
    XMMATRIX world = XMLoadFloat4x4(&m_world);
    XMVECTOR rotate = XMQuaternionRotationRollPitchYaw(0, XM_PI / 2.f, XM_PI / 2.f);
    rotate = XMQuaternionRotationRollPitchYaw(0, XM_PI / 2.f, XM_PI / 2.f);
    XMMATRIX local = XMMatrixMultiply(world, XMMatrixTransformation(
        g_XMZero, qid, scale, g_XMZero, rotate, translate));
    local *= XMMatrixRotationX(-XM_PIDIV2);
    m_model->Draw(m_pImmediateContext, *m_states, local, XMLoadFloat4x4(&m_view),
        XMLoadFloat4x4(&m_proj));

    m_pSwapChain->Present(0, 0);
}
但是我不能得到正确的结果,车轮的角度和一些细节与.fbx模型不同。


我该怎么办?有什么想法吗?

你的模型很好,但是你的剔除是反向的,这就是为什么渲染是错误的


发送到GPU的三角形具有缠绕顺序,必须通过重新排列三角形顶点来保持一致、按时钟顺序或按逆时钟顺序。然后,渲染状态定义什么是正面,什么必须剔除,正面、背面或无。

您的模型很好,但剔除是反向的,这就是渲染错误的原因


发送到GPU的三角形具有缠绕顺序,必须通过重新排列三角形顶点来保持一致、按时钟顺序或按逆时钟顺序。然后,渲染状态定义什么是正面,什么是必须剔除的,正面、背面或无。

是的,没错。我将第四个参数改为false,结果是正确的。是的,它是正确的。我将第四个参数更改为false,结果是正确的。您使用的是左手还是右手查看坐标?(我看不出您在哪里计算
m_proj
。通常,CMOs是为右撇子查看而导出的,这就是为什么API提供了一个选项来翻转消隐方向,使其在左撇子坐标下看起来向右。您使用的是左撇子查看坐标还是右撇子查看坐标?(我看不出您在哪里计算
m_proj
。通常,CMOs被导出用于右手查看,这就是为什么API提供了一个选项来翻转消隐方向,使其在LH坐标下看起来正确。