首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用DirectXTK加载网格

用DirectXTK加载网格
EN

Stack Overflow用户
提问于 2016-08-19 21:02:07
回答 1查看 390关注 0票数 0

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

代码语言:javascript
复制
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模型不同。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-20 02:06:47

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

发送到GPU的三角形有一个缠绕顺序,它必须是一致的,通过重新排列三角形顶点来实现时钟方向或逆时针方向。然后,渲染状态定义了什么是正面,以及必须剔除的内容:正面、背面或无。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39039767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档