我正在使用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总是在顶部渲染,只有在纹理大小不足以覆盖该线部分时才能看到线条(这也留下了灰色背景的线条)。有什么建议可以解决这个问题吗?
答案 0 :(得分:0)
您可以启用深度缓冲区
尝试致电:
graphicsDevice->SetRenderState(D3DRS_ZENABLE,D3DZB_FALSE);
graphicsDevice->SetRenderState(D3DRS_ZWRITEENABLE,FALSE);
graphicsDevice->SetRenderState(D3DRS_ZFUNC,D3DCMP_ALWAYS);
在renderLines中(在绘制调用之前),通常应该修复它。
答案 1 :(得分:0)
我遇到了同样的问题,令人沮丧,因为它没有太多信息。
在对设备进行任何绘制调用之前,请务必spriteHandler->End();
。
在你的例子中,而不是
spriteHandler->Begin(D3DXSPRITE_ALPHABLEND);
renderSprites();
renderText();
renderLines();
spriteHandler->End();
切换到:
spriteHandler->Begin(D3DXSPRITE_ALPHABLEND);
renderSprites();
renderText();
spriteHandler->End();
renderLines();