【问题标题】:DirectXTK spriteFont in 3D space3D 空间中的 DirectXTK spriteFont
【发布时间】:2015-10-15 18:00:12
【问题描述】:

我希望使用 DirectXTK 在 (50,0,0) 处显示一个“X”并关注有关广告牌的文章。但是我似乎不正确。 谁能帮帮我。

XMVECTOR textPosition = XMVectorSet(50, 0, 0, 0);
            unique_ptr<BasicEffect> basicEffect(new BasicEffect(m_pd3dDevice));
            unique_ptr<CommonStates> commonStates(new CommonStates(m_pd3dDevice));
            /*basicEffect->SetWorld(XMMatrixScaling(1,-1, 1) * XMMatrixTranslationFromVector(textPosition));*/
/*          basicEffect->SetWorld( XMMatrixTranslationFromVector(textPosition));
            basicEffect->SetView(m_View);*/
            basicEffect->SetProjection(m_Projection);
            basicEffect->SetTextureEnabled(true);
            basicEffect->SetVertexColorEnabled(true);
            basicEffect->Apply(m_pImmediateContext);
            wstring message = L"X";
            XMFLOAT2 textOrigin;
            XMStoreFloat2(&textOrigin, m_font->MeasureString(message.c_str()));
            const float textSize = 1.0f;
            m_spriteBatch->Begin(SpriteSortMode_Deferred, nullptr, nullptr, commonStates->DepthRead(), commonStates->CullNone());
            m_font->DrawString(m_spriteBatch.get(), message.c_str(), XMFLOAT2(0, 0), Colors::White, 0, textOrigin, XMFLOAT2(textSize, textSize), SpriteEffects_None, 0.0f);

            m_spriteBatch->End();

这看起来很有希望

XMVECTOR textPosition = XMVectorSet(50, 0, 0, 0);
wstring message = L"X";
textPosition = XMVector3Transform(textPosition, m_View);
textPosition = XMVector3Transform(textPosition, m_Projection);
XMFLOAT3 pos;
XMStoreFloat3(&pos, textPosition);
pos.x /= pos.z;
pos.y /= pos.z; 
pos.x = (pos.x + 1.0) * GetViewPort().Width  / 2.0;
pos.y = (-pos.y + 1.0) * GetViewPort().Height / 2.0;


m_spriteBatch->Begin();
m_font->DrawString(m_spriteBatch.get(), message.c_str(), XMFLOAT2(pos.x, pos.y), Colors::White, 0.0f, XMFLOAT2(0, 0), XMFLOAT2(0.5f, 0.5), SpriteEffects_None);     
m_spriteBatch->End();

【问题讨论】:

    标签: directx directxmath


    【解决方案1】:

    我认为以下内容。

    XMVECTOR mp = XMVector4Transform(textPosition, m_World);
    XMVECTOR pt = XMVector3Project(mp, 0, 0, GetViewPort().Width, GetViewPort().Height, 0, 1, m_Projection, m_View, m_World);
    XMFLOAT3 pos;
    XMStoreFloat3(&pos, pt);
    
    
    m_spriteBatch->Begin();
    m_font->DrawString(m_spriteBatch.get(), message.c_str(), XMFLOAT2(pos.x, pos.y), Colors::LightGreen, 0.0f, XMFLOAT2(0, 0), XMFLOAT2(0.6f, 0.6));
    m_spriteBatch->End();
    

    【讨论】:

    • 使用 DirectX 工具包的SpriteBatch,您还可以使用SetRotation( DXGI_MODE_ROTATION_UNSPECIFIED ) ;“关闭”最终视口缩放,然后您可以在Begin 上提供完整的变换作为可选的transformationMatrix 参数。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    • 2017-05-17
    • 1970-01-01
    • 2014-05-11
    • 1970-01-01
    相关资源
    最近更新 更多