2012-04-09 4 views
1

단순히 ID3DXFont::DrawText()을 사용하면 들쭉날쭉 한 글꼴, 특히 큰 글꼴 크기의 글꼴이 생성됩니다. DirectX9를 사용하여 Windows 8 Metro UI 에서처럼 글꼴을 매우 부드럽게 렌더링하는 방법이 있습니까?DirectX9에서 어떻게 부드러운 부드러운 글꼴을 렌더링합니까?

Direct2D가 필요하기 때문에 DirectWrite를 피하려고 노력하고 있지만 DirectX9를 사용하고 있습니다.

+0

소리 :

는이 시점에서 나는 이것이 달성했다. –

+0

@ MДΓΓLLLLLL 나는'CLEARTYPE_QUALITY' 및'ANTIALIASED_QUALITY' 플래그를 시도했습니다. 그들은 여전히 ​​들쭉날쭉 한 글꼴을 생성하고, 나는 그들을 스케일링하지 않습니다. – Joshua

+0

@ Joshua : 스크린 샷과 렌더링 코드 조각을 제공하십시오. – SigTerm

답변

1

DirectWrite는 실제로 Direct2D를 요구하지 않으며 자체적으로 사용할 수 있습니다 (IDWriteBitmapRenderTarget). DirectWrite 텍스트를 IWICBitmap (ID2D1Factory :: CreateWicBitmapRenderTarget())을 통해 DirectWrite 텍스트를 렌더링하고 DX를 사용하여 그 비트 맵을 그리는 것이 훨씬 더 쉽습니다 (DX 표면에 복사하거나 일부 공유 표면 접근법을 사용하는 것). 여기에 구체적인 것은 잘 모르겠다.) IWICImagingFactory :: CreateBitmap()을 통해 IWICBitmap을 만들 수 있습니다.

Metro는 ClearType을 사용하지 않는 것으로 보이므로 회색 음영이 좋을 것입니다. 적절한 ClearType 텍스트는 실제로 구성 요소 별 알파를 필요로하므로 일반적으로이를 알파 채널이있는 비트 맵으로 렌더링하는 데는 효과가 없습니다.

XP에서 실행할 수 있도록 DX9를 사용하고 있습니까? 아니면 다른 이유로 사용하고 있습니까? Win7 또는 Vista SP2 + Platform Update가 최소한으로 필요하면 D2D + DW를 사용하여 텍스트를 비트 맵으로 렌더링 한 다음 DX를 사용하여 비트 맵을 그리는 것이 좋습니다.

0

"매우 간단하다"에서 "매우 복잡하다"까지 범위를 지정할 수있는 비트 맵 글꼴 렌더링을 만들 수 있습니다.

간단한 방법으로 Managed DirectX에 있지만 C++/DirectX 9에서 쉽게 수행 할 수있는이 예제가 있습니다. Bitmap Fonts. 이 무료 앱인 Bitmap Font Generator으로 비트 맵 글꼴 시트를 쉽게 만들 수도 있습니다 (여기에 비트 맵 렌더러를 만드는 방법에 대한 링크가 있습니다).

그런 다음 Improved Alpha-Tested Magnification for Vector Textures에 설명 된대로 signed distanced fields을 사용하는 것과 같이 글꼴을 사용하는 더 복잡한 방법이 있습니다.

0

ID3DXFont는 정말 멋지고 부드러운 글꼴을 그릴 수 없습니다. 이것을 달성하기 위해 필자 자신의 텍스쳐 아틀라스를 폰트로 렌더링 한 다음 텍스쳐가있는 쿼드로 그립니다. 두 번째 방법은 atlas에서 비슷한 방법으로 글꼴을 그리지 만 Distance 필드 메서드를 사용하는 것입니다. 간단한 픽셀 쉐이더가있는 거리 필드는 매우 부드럽고 확장 가능한 글꼴을 제공합니다. 당신은 안티 앨리어싱 또는 클리어를 찾고있는 것처럼 my distance field font