2013-02-01 7 views
1

나는 텍스처를 많이 그리기 위해 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가이 문제의 영향 및 그리기 순서의 적용을받습니다되지 않는다 (I 매개 변수로 spriteManager 통과하기 때문에 어쩌면 그것은이다).

내가 추측하는 데 사용하는 다른 장치에 우선 순위 수준이있을 수 있으며 여하튼 spriteHandler는 항상 위쪽에 렌더링되고 선은 텍스처 크기가 해당 선을 덮을만큼 크지 않은 경우에만 볼 수 있습니다 섹션 (회색 배경과 함께 선을 벗어남). 이 문제를 해결하기위한 제안은 무엇입니까? 당신은 깊이 버퍼를 가질 수

답변

0

는 전화

시도를 사용할 수 : renderLines에서

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

(그리기 호출하기 전에), 즉 일반적으로 수정해야합니다.

+0

나는이 세 줄의 내부'renderLines() SetFVF''전'권리를 추가하지만이 문제를 해결하기 위해 보인다 않았다. 또한 나는 방금 게시물을 편집하고 다른 장치'LPD3DXFONT'를 사용하는'renderText()'를 추가했지만 문제의 영향을받지 않습니다. – ryf9059

+0

스프라이트 그리기를 비활성화하면 선이 올바르게 렌더링됩니까? – catflier

+0

예, 스프라이트를 그리는 선을 주석 처리 한 경우 선이 올바르게 표시되지만 그릴 배경이 없으므로 기본 회색 배경이 표시됩니다 – ryf9059

0

나는 많은 정보가 없기 때문에 같은 문제를 겪었습니다. 장치에 대한 그리기 호출을 수행하기 전에 spriteHandler->End();을 확인하십시오. 귀하의 예에서

, 대신 spriteHandler->Begin(D3DXSPRITE_ALPHABLEND); renderSprites(); renderText(); renderLines(); spriteHandler->End();

스위치 : spriteHandler->Begin(D3DXSPRITE_ALPHABLEND); renderSprites(); renderText(); spriteHandler->End(); renderLines();

관련 문제