首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DirectXTK和3D对象

DirectXTK和3D对象
EN

Stack Overflow用户
提问于 2015-10-14 21:08:10
回答 1查看 162关注 0票数 0

我有一个使用D3D11和DirectXMath显示3D对象的应用程序。我还想在左上角显示一个HUD,所以我想我应该使用DirectXTK sprintBatch/spriteFont来做这件事。我的3D是很好的,直到我添加了以下代码。DirectXTK是否使用了自己的着色器并更改了某些状态?

问题是我该如何解决这个问题?

代码语言:javascript
复制
m_spriteBatch->Begin();
        const wchar_t* output = L"Hello World";
        m_font->DrawString(m_spriteBatch.get(), output, DirectX::XMFLOAT2{ 10, 10 }, Colors::Yellow);
        m_spriteBatch->End();

Without spritefont->DrawString

With spritefont->DrawString

这是我的着色器。

代码语言:javascript
复制
Texture2D txDiffuse : register( t0 );
SamplerState samLinear : register(s0);
cbuffer WorldViewProjectionType : register(b0)
{
    matrix World;
    matrix View;
    matrix Projection;
};
cbuffer TransparentBuffer
{
    float4 blendAmount;
};
struct VS_INPUT
{
    float4 Pos : POSITION;
    float2 Tex : TEXCOORD0;
};
struct PS_INPUT
{
    float4 Pos : SV_POSITION;
    float2 Tex : TEXCOORD0;
};
PS_INPUT VS(VS_INPUT input)
{
    PS_INPUT output = (PS_INPUT)0;
    output.Pos.w = 1.0f;
    output.Pos = mul(input.Pos, World);
    output.Pos = mul(output.Pos, View);
    output.Pos = mul(output.Pos, Projection);
    output.Tex = input.Tex;
    return output;
}
float4 PS(PS_INPUT input) : SV_Target
{
    float4 color = txDiffuse.Sample(samLinear, input.Tex);
    color.a = blendAmount.a;
    return color;
}
float4 PSGray(PS_INPUT input) : SV_Target
{
    float4 color = txDiffuse.Sample(samLinear, input.Tex);
    float fLuminance = 0.299f * color.r + 0.587f * color.g + 0.114f *          color.b;
    return float4(fLuminance, fLuminance, fLuminance, blendAmount.a);
}
EN

回答 1

Stack Overflow用户

发布于 2015-10-14 21:45:30

太好了,我把它修好了。太好了。在swapchain->present之后,我确实重置了所有这些。

代码语言:javascript
复制
            //*************************************************************************
        m_pImmediateContext->IASetInputLayout(m_pVertexLayout);
        m_pImmediateContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
        TurnOffAlphaBlending(m_pImmediateContext);
        // Set the depth stencil state.
        m_pImmediateContext->OMSetDepthStencilState(m_pdepthStencilState, 1);
        m_pImmediateContext->OMSetRenderTargets(1, &m_pdesignerRenderTargetView, m_pdesignerDepthStencilView);
        m_pImmediateContext->RSSetState(m_prasterState);
        //*************************************************************************
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33126207

复制
相关文章

相似问题

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