0

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 モデルとは、ホイールの角度と一部の詳細が異なります。 私のレンダリングモデル

正しい .fbx モデル

私は何をすべきか?アイデアはありますか?

4

1 に答える 1

2

モデルは問題ありませんが、カリングが反転しているため、レンダリングが間違っています。

GPU に送信される三角形にはワインディング オーダーがあり、三角形の頂点を再配置することによって、時計回りまたは反時計回りに一貫している必要があります。次に、レンダー ステートは、表側とは何かを定義し、何を除外する必要があるか (前面、背面、なし) を定義します。

于 2016-08-19T18:06:47.327 に答える