我正在使用 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 总是在顶部渲染,并且只有在纹理大小不足以覆盖该行部分时才能看到行(这会留下连同灰色背景一起去掉线条)。解决这个问题有什么建议吗?