1

私は directX を使用して深刻なテクスチャを描画していますが、デバッグの目的で、テクスチャの周りに線を描画したいと考えています (つまり、長方形を描画します)。しかし、問題は、描画順序に関係なく、テクスチャが常に線の上部に表示され、線が背景にのみ描画されたように見えることです。描画に使用するコードは次のとおりです。

デバイス:

LPDIRECT3DDEVICE9       graphicsDevice; // this is used for drawing lines
LPD3DXSPRITE            spriteHandler; // this is used for drawing texture
LPD3DXFONT              textRect; // this is used for drawing texts

レンダリング コード:

graphicsDevice->Clear(0, NULL, D3DCLEAR_TARGET, BACKGROUND_COLOR, 1.0f, 0);
graphicsDevice->BeginScene();
spriteHandler->Begin(D3DXSPRITE_ALPHABLEND);
renderSprites();
renderText();
renderLines();
spriteHandler->End();
graphicsDevice->EndScene();
graphicsDevice->Present(NULL, NULL, NULL, NULL);


void DirectXGraphics::renderSprites()
{
    spriteHandler->Draw( texture, 
                     rect,
                     NULL,
                     &position,
                     DEFAULT_ALPHA_COLOR);
}

void DirectXGraphics::renderLines()
{
    graphicsDevice->SetFVF(D3DFVF_XYZRHW|D3DFVF_DIFFUSE);
    graphicsDevice->DrawPrimitiveUP(D3DPT_LINESTRIP, 
                        g_width,                    
                        LINES,              
                        sizeof(VERTEX_LIST));      
}

void DirectXGraphics::renderText()
{
      textFont->DrawText (  spriteHandler, 
                    lpcwstrText, 
                    -1, 
                    &textRect, 
                    DT_LEFT, 
                    fontColor );   
}

興味深いことに、textfont はこの問題の影響を受けず、描画順序の影響を受けます (spriteManagerパラメーターとして渡したためかもしれません)。

私の推測では、描画に使用しているさまざまなデバイスに優先レベルがある可能性があり、どういうわけか spriteHandler は常に上部にレンダリングされ、テクスチャ サイズがその線のセクションをカバーするのに十分な大きさでない場合にのみ線が表示されます (残ります)。灰色の背景と一緒に線を外します)。これを回避するための提案はありますか?

4

2 に答える 2

0

デプスバッファを有効にすることができます

電話してみてください:

graphicsDevice->SetRenderState(D3DRS_ZENABLE,D3DZB_FALSE);
graphicsDevice->SetRenderState(D3DRS_ZWRITEENABLE,FALSE);
graphicsDevice->SetRenderState(D3DRS_ZFUNC,D3DCMP_ALWAYS);

renderLines(描画呼び出しの前)では、通常は修正する必要があります。

于 2013-02-01T14:05:18.680 に答える