2012-12-16 3 views
1

렌더 대상에 DrawLine 함수를 사용하고 있는데, 하나의 (장치 독립적 인) 픽셀 두께의 선을 항상 그려야합니다.항상 1 픽셀 (장치 독립) 라인 direct2d를 그릴 수 있습니까?

제 문제는 가로 및 세로 치수가 크게 다른 변형이 있으며이 치수 중 하나에 대해서만 strokeWidth를 조정할 수있는 것으로 보입니다.

변환을 ID로 설정하고 매트릭스 변환 점을 사용하여 각 장치를 올바른 결과를 얻는 장치 독립 좌표로 변환 할 수 있지만 작업이 GPU로 오프로드되지 않습니다.

렌더 대상에서 변환을 수행하도록 할 수있는 방법이 있습니까?

저는 C#에서 SharpDX를 사용하고 있습니다. 그러나 C++ 응답을 번역 해 드리겠습니다.

답변

2

ID2D1RenderTarget의 변환이 절대적이라는 사실을 이용해야합니다. 푸시/팝 시스템이 없기 때문에 언제나 변환을 단위 행렬로 설정할 수 있습니다. 이 지식으로, 1) 원하는 지오메트리를 생성 할 수 있어야합니다. 2) 렌더 타겟에서 행렬로 변환합니다 (ID2D1Factory::CreateTransformedGeometry(), 하드웨어 가속이 맞지 않는 것이 맞지만). 3) 렌더링을 설정합니다. 표적의 단위 행렬로의 변환, 4) 기하학을 1px 스트로크 폭으로 그리기, 5) 원본 변환을 렌더링 대상으로 복원.

또한 Win8과 함께 제공되는 Direct2D 버전에는 변환에 관계없이 항상 1px 너비의 선으로 그릴 수있는 몇 가지 기능이 있습니다. 획 스타일을 만들고 transformType에 D2D1_STROKE_TRANSFORM_TYPE_HAIRLINE을 지정합니다.

+0

또 다른 지적할만한 점은 Win8의 Direct2D가 Win7에 등장한 것 같습니다. "Windows 7 플랫폼 업데이트"를 찾으십시오. 현재 시험판 (베타 버전) : http://support.microsoft.com/kb/2670838 –