我使用directX绘制了严重的纹理,现在为了调试目的,我想围绕纹理绘制线(如此绘制矩形)。但问题是无论我尝试纹理总是出现在行的顶部,无论绘制顺序如何,似乎该行只在背景上绘制,下面是我用于绘制的代码:无法在纹理之上绘制直线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总是会在顶部和顶部渲染,只有纹理尺寸不足以覆盖该线时才能看到部分(它也将灰色背景与线条一起)。任何建议在解决这个问题?
我加入这三行内'renderLines()之前''SetFVF'的权利,但没有似乎解决这个问题。此外,我刚刚编辑了这篇文章,并添加了'renderText()',它使用了不同的设备'LPD3DXFONT',但它不受问题的影响。 – ryf9059
如果您禁用精灵绘制,您的线条是否得到正确渲染? – catflier
是的,如果我注释了绘制精灵的线条,线条显示正常,但是使用默认的灰色背景,因为没有别的东西可以绘制 – ryf9059