状況
2 つのビューを持つ高さフィールド エディターを実装しています。メイン ビューには、高さフィールドが 3D で表示され、トラックボール ナビゲーションが可能になります。編集ビューには、高さフィールドが 2D 画像として表示されます。
この高さフィールドの上に、その外観を変更する新しい画像を適用できます (穴を開けたり、特定の領域を低くしたり、高くしたりします)。これはパッチと呼ばれます。
高さフィールドとパッチの両方が 1 チャネルのグレースケール png 画像です。
視覚化には、視覚化ライブラリフレームワーク (c++) と OpenGL 4 を使用しています。
タスク
実行時にこのパッチを (個別の画像として) 作成する、2D 編集ビュー (正投影) で使用可能な描画ツールを実装します。
重要事項・制約事項
- 高さフィールドの画像は、スケーリング、回転、転置することができます。
- パッチは高さフィールドと同じスケールを持つ必要があるため、パッチ内の 1 つのピクセルが高さフィールド内のピクセルを正確にカバーします。
- スケーリングの結果として、フレームバッファ ピクセルのサイズは、ハイト フィールド/パッチ イメージ ピクセルのサイズより大きくなったり小さくなったりする場合があります。
- シーンには、パッチに表示されるべきではないオブジェクト (例: 矢印) が含まれています。
質問 このタスクへの正しいアプローチは何ですか? これまでのところ、次のアイデアがありました。
- ある種の QT キャンバスを使用してパッチを作成し、それを高さフィールド イメージ プロポーションにマップして、新しいパッチとして保存します。これは、ユーザーが描画を開始するたびに行われます。この方法では、元に戻すの実装が簡単になります (最後に作成されたパッチを削除します)。
- ニュートラルカラーの画像を textre バッファオブジェクトと組み合わせて使用して、ある種のキャンバスを自分で実装します。このようにして、ユーザーが描画を停止するたびに、キャンバスの内容が高さフィールドにマップされ、パッチとして保存されます。次の描画のためにキャンバスをリセットします。
- フレーム バッファ オブジェクトを使用した例をいくつか示します。ただし、このアプローチが私のニーズに合っているかどうかはわかりません。open gl を使用してサブ イメージをフレーム バッファに描画すると、結果のイメージにすべてのデータが含まれませんか?