d3dxfont :: drawText를 사용할 때 중복 텍스트가 다른 텍스처의 z 버퍼에 렌더링되는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1358896

  •  20-09-2019
  •  | 
  •  

문제

나는 이것에 대해 잠시 동안 걸려 넘어졌고 누군가가 전에이 문제를 해결했는지 궁금해하고있었습니다.

내가 작업하는 응용 프로그램은 여러 데이터 플롯과 화면 하단의 단일 타임 라인으로 나뉩니다. 각 플롯 (실제로는 서로 위에 여러 텍스처)과 타임 라인이 별도의 텍스처로 렌더링됩니다. 타임 라인 텍스처가 먼저 렌더링되고 화면 상단에서 하단으로 각 플롯 텍스처가 이어집니다. DXUT 및 DirectX9 (2009 년 3 월)를 사용하고 있습니다.

타임 라인 텍스처에 시간 텍스트를 추가 한 후 모든 데이터 플롯의 제목 표시 줄에서 텍스트가 반복되는 것을 알았습니다. 다음은 디스플레이의 일부의 스크린 캡입니다. 단일 플롯 만 표시되지만 텍스트는 열린 모든 플롯에서 반복됩니다.

alt text

타임 라인의 렌더링 함수에서 호출되는 드로우 텍스트에 직접 묶인 것 같습니다. RELT가 DrawText로 전달되는 것처럼 상대 좌표를 사용하지만, 이미 렌더 대상을 원하는 텍스처로 설정 했으므로 현재 텍스처에만 영향을 미칩니다. 나중에 렌더링 된 모든 텍스처는 아닙니다.

D3dxFont를 사용하여 이와 유사한 문제를 해결 한 사람이 있습니까?

편집하다: 좀 더 실험 한 후에는 Z 버퍼와 관련이있는 것처럼 보입니다. 각 텍스처 표면의 클리어에 d3dclear_zbuffer를 추가하면 중복 텍스트가 사라집니다. 지금은 문제가 우회 된 것처럼 보이지만, 드로크 텍스트 호출 중에 완전히 별도의 텍스처에 대한 z 버퍼가 쓰여진 이유에 대해 여전히 궁금합니다.

도움이 되었습니까?

해결책

Z 버퍼 상태는 지속적입니다.

예를 들어,

SetDepthStencilSurface(X)
SetRenderTarget(A)
Draw()
SetRenderTarget(B)
Draw()

두 드로우 콜은 동일한 깊이 버퍼를 사용합니다.

DrawText는 설정 한 깊이 버퍼를 변경하지 않습니다. 그것은 당신이 한 일을하려고했다고 가정합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top