2016-08-19 80 views
0

我使用DirectXTK加載網格。首先,我將.fbx導入vs2015並構建,然後獲取.cmo文件。然後我用DirectXTK負載.cmo如下:使用DirectXTK加載網格

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模式不同。 my render model

the correct .fbx model

我應該怎麼辦?任何想法?

+0

您是使用左手還是右手的查看座標? (我看不到你在哪裏計算'm_proj'。通常CMO被導出用於右手查看,這就是爲什麼API提供了一個選項來翻轉剔除方向,使它看起來與LH座標正確。 –

回答

2

你的模型很好,但你的剔除是倒置的,這就是渲染錯誤的原因。

發送給GPU的三角形有一個排列順序,它必須通過重新排列三角形頂點來保持一致,順時針或逆時針方向。然後,渲染狀態定義了什麼是正面,什麼必須被撲滅,正面,背面或沒有。

+0

是的,這是對的,我將第四個參數改爲false,結果是正確的。 – zhangbaochong