私は単純なソリッドモデリングアプリケーションを構築しています。ユーザーは、直交ビューと透視ビューの両方でオブジェクトを操作できる必要があります。たとえば、画面にボックスがあり、ユーザーがそれを選択するためにクリックすると、コーナーとセンターで「ハンドル」を取得して、そのハンドルの上にマウスを移動してドラッグする必要がありますボックスを拡大または移動します。3Dビューで操作ハンドルを実装する方法
これを実行するにはどのような戦略があり、どちらが最適ですか?私は2つの明白なものを考えることができます:
1)ハンドルを3Dオブジェクトとして扱います。私。ボックスの場合、「メイン」ボックスのコーナーにある小さなボックスをシーンに追加します。問題:これはパースビューでは機能しません。現在のズームレベルに相対的なボックスのサイズを決定する必要があります(ユーザーがズームイン/ズームアウトしても、ハンドルのサイズは同じでなければなりません)
2)シーンがレンダリングされた後にハンドルを追加します。オフスクリーンバッファーにレンダリングし、何らかの形でコーナーの2dの位置を決定し、ハンドルを描くために通常の2D描画技法を使用します。問題:私はどのようにヒットテストをしますか?私も、2段階のヒットテストのアプローチを行う必要があります。 3Dレンダリングされた画像で2dをどのように描画するのですか? GDIに戻りますか?
おそらく、両方のアプローチでより多くの問題があります。この問題に取り組む業界標準の方法はありますか?
私はOpenGLを使用しています。
視覚的な手掛かりを追加する観点についてのポイントを参照してください。私はまだこれがユーザーにとって自然に感じられるとは確信していません。例えば、他のオブジェクトによってクリップされるハンドルはどうでしょうか?私は他の3Dモデラーを調べて、どのようにそれを行い、両方のアプローチをテストアプリケーションで試してみます。答える時間をとってくれてありがとう。 – Roel
1つの選択肢は、パースペクティブを維持することですが、深度テストをオフにしてパースペクティブをレンダリングします。それらは常に表示されます(他のオブジェクトの上でも)。私はそれをデフォルトの方法にしませんが、それは素晴らしいオプションです。したがって、ハンドルを常に表示するかどうかを切り替えることができます。 –
深度バッファでどのように動作するかを調べる必要がありますが、それはうまくいくと思います。私は私の前に多くの試行錯誤があります:)ありがとう。 – Roel