Загрузка сетки с DirectXTK
Я использую DirectXTK для загрузки сетки. Сначала я импортирую.fbx в vs2015 и собираю, затем получаю файл.cmo. Затем я использую DirectXTK загрузить.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.
что я должен делать? Любой идеар?
1 ответ
Решение
С вашей моделью все в порядке, но ваш отбор перевернут, и поэтому рендер неправильный.
Треугольники, отправляемые в графический процессор, имеют порядок намотки, он должен быть последовательным, по часовой стрелке или против часовой стрелки, переставляя вершины треугольника. Затем состояние рендеринга определяет, что является лицевой стороной, а что должно быть отбраковано: лицевая сторона, задняя часть или нет.