1

レンダリングターゲットでDrawLine関数を使用していて、常に1(デバイスに依存しない)ピクセルの太さの線を描画したいと思います。

私の問題は、水平方向と垂直方向の寸法が大きく異なる変換があり、これらの寸法の1つに対してのみstrokeWidthをスケーリングできるように見えることです。

変換をIdentityに設定し、マトリックス変換ポイントを使用して各ポイントをデバイスに依存しない座標に変換し、正しい結果を得ることができますが、作業はGPUにオフロードされていません。

レンダーターゲットの変換で作業を実行できるようにする方法はありますか?

私はC#のSharpDXを使用していますが、C++の回答を翻訳できてうれしいです。

4

1 に答える 1

2

ID2D1RenderTarget変換が絶対的であるという事実を利用できるはずです。プッシュ/ポップ システムはなく、いつでも単位行列に変換を設定できます。この知識があれば、1) 必要なジオメトリを作成し、2) レンダー ターゲットのマトリックスによってそれを変換し (ID2D1Factory::CreateTransformedGeometry()ただし、これはハードウェア アクセラレーションではないことは正しい)、3) レンダー ターゲットの恒等行列に変換し、4) 1 ピクセルのストローク幅でジオメトリを描画し、5) 元の変換をレンダー ターゲットに復元します。

また、Win8 に付属するバージョンの Direct2D には、変換に関係なく、常に 1 ピクセル幅の線で描画できるいくつかの機能があります。ストローク スタイルを作成D2D1_STROKE_TRANSFORM_TYPE_HAIRLINEし、transformType に指定します。

于 2012-12-18T18:40:00.673 に答える