2

DirectX で 2D ラバー バンドの四角形を描画するにはどうすればよいですか? C# を使用することをお勧めします。

4

2 に答える 2

3

ラバーバンディングを行う古典的な方法は次のとおりです。

  • 通常のシーン、つまり「背景」を描く
  • 「XOR モード」に切り替えます。このモードでは、ペンがフレーム バッファーに既にあるピクセルを XOR します。ここでのモードが XOR であることが重要です。XOR は、たとえば追加操作とは異なり、ロスレスで「元に戻すことができる」ためです。
  • 「ラバーバンディング」中:
    • 現在の座標でラバーバンドの四角形を描画します
    • 次のフレームで、以前の座標を使用して、引き続き XOR を使用して、長方形を再度描画します。これにより長方形が削除され、フレームバッファはそのまま残ります。
    • 長方形の座標を更新する

「DirectX を使用して」これを行う方法の詳細は少し難しいです... DirectX で 2D を行う「古い学校」の方法である DirectDraw は時代遅れであると考えているため、Direct3D を使用している必要があります。残念ながら、詳細についてはわかりません。XOR 描画を行うための事前定義された機能を見つけることができず、自分で作成する必要があるかもしれません。うまくいけば、誰かがそれについてより良い詳細を提供できるでしょう。ラバーバンディング理論自体について既に理解していた場合は、お詫び申し上げます。

于 2008-10-28T09:44:30.597 に答える
0

2つのポイント変数が必要です(それぞれがx座標とy座標を保持しています)。それらをFirstPointとSecondPointと呼びましょう。

マウスダウン時に、現在のマウス位置をFirstPointとSecondPointに保存します。マウスが下にある限り、マウスが動くたびに、SecondPointを新しいマウスの位置で更新します。

次に、各フレームでマウスが下がっている場合は、FirstPointとSecondPointの2つのコーナーに基づいて長方形を描画します。それらが左上/右下または右上/左下のどちらであるかを検出するには、少し計算が必要ですが、それらの間に長方形または2つの三角形を描画するだけです。もちろん、描画する前に正投影(2D)モードに切り替える必要があります。

unwindの答えについてはよくわかりません。また、XOR演算の実行方法もわかりません。長方形を背景の負の値にする必要がない限り、非常に複雑に見えます(これは、XOR演算で実行されます。私は信じている)。さらに、フレームごとにシーンを再描画する場合、前の長方形を消去するために、ばかげたXORを行ったり来たりする理由はありません。新しいフレームを描画することで、すでに上書きされているはずです。

個人的には、輪郭がしっかりしていて塗りつぶしが半透明の長方形を描くことを好みます。このために、現在の色をおそらく128(または0.5f)のアルファ値に設定し、2つのポイントの間に長方形を描画します。次に、ポリゴン描画モードを線に変更して色立体を設定し、別の長方形を描画します。

最後に、あなたはラバーバンドに反応したいと思うでしょう。マウスを離したら、FirstPoint変数とSecondPoint変数に基づいて必要な操作を行います。また、描画コードは、マウスが下がっているときにのみ長方形を描画する必要があるため、描画が停止します。

于 2009-07-01T12:42:27.317 に答える