2009-05-06 10 views
1

私は、ユーザーが3D空間を介してカメラをナビゲートするためのいくつかの「ナビゲーションモード」を実装したい単純なソリッドモデリングアプリケーションを使用しています。それらの1つは、SketchUp、Blenderなどで使用されるユビキタスな「ドラッグ&パン/回転」です。私はまた、私の特定のアプリケーションに関連性の高いものを実装したいと思っています。具体的には、モデル化されているオブジェクト(建物)の上の「リング」上にカメラを浮かべて、モデルの中心を常に見ているモードを実装したいと思います。このようにして、ユーザーはオブジェクトの周りを簡単に「サークル」することができます。OpenGLレンダリングを1つのビューに結合する

私がしたいのは、建物を私のビューにレンダリングし、ビューの右上にトーラスを表示し、トーラスの小さな球でカメラの位置を表します。トーラスには北矢印があり、ユーザは球をドラッグしてモデルオブジェクトの周りにカメラをドラッグします。球を動かすと、カメラの位置が変わり、シーンが再描画されます。

私は次のようにします:「メインビュー」すなわち建物をレンダリングします。トーラスと球体を別々の視点設定と照明でレンダリングしてオフスクリーンバッファーにし、そこから私のメインビューにblitします。

しかし、私はヒットテストに着きます。私はユーザーが球またはトーラスをクリックしたかどうかを検出したい。私はOpenGLピッキング(これは難題です:/)の理解から、すべてのピッキング方法は1つの「シーン」での選択にのみ適用されます。それとは別に、私はまだ建物モデルの「通常の」ピッキング操作を検出したいと思います。

だから、私の質問:私は(アルファがトーラスのセンターのよう&透明度をブレンドして)別のOpenGLのコンテキストにオフスクリーンバッファとブリットにレンダリングするにはどうすればよい

  • 説明したシナリオでヒットテストを行うにはどうすればよいですか?

答えて

2

私はこのためにオフスクリーンレンダリングを行う必要はないと思います。あなたはカメラとviewportを再設定して、メインシーンの後にオーバーレイをレンダリングできるだけです。 Zオーダリングやバッファリングに問題があるかもしれませんが、おそらく "サブシーン"はそれほど単純ではありません。また、レンダリングする前にZバッファをクリアすることもできます。

0

私は@unwindに同意します。オフスクリーンバッファは必要ありません。とにかくしたいのであれば、 "render-to-texture"を検索してください。

ヒットテストでは、The OpenGL FAQにエントリがあります。 GLUELECTIONを使用してgluUnproject()を使用して3D衝突線を取得し、ユニークな色を使用して簡単な2Dソリューションを作成する方法について説明します。

1

トーラス/球体を描画するには、別のクラスを作成し、「描画」メソッドを実装します。クラスに球とトーラスの両方の位置が含まれていて、それらのものを画面上にdraw()してください。

次に、メイン描画メソッドでmyRing.draw()を呼び出すと、球とトーラスが表示されます。

ウィンドウの右上隅にサークル/リングを2Dでレンダリングする方が簡単な場合は、ヒットボックスのポストと同じ考えが適用されます厄介な投影計算!)

最後に、希望する機能を実装するために、マウスドラッグと組み合わせてファンクションキーを使用することを検討します。ユーザは「シフト」を保持してから、マウスをクリックして画面上をドラッグします。これらのマウスイベントは捕捉され、x-deltaは回転角度を計算するために使用されます。これが起こるようにカメラの位置が更新され、あなたが将来の読者のための完全性のためにスムーズなスライド動作:)

+0

おかげで、取得するには、ここにあなたが言及した記事へのリンクがあります:http://stackoverflow.com/questions/829786/ways -to-実装-操作・ハンドル・イン・3Dビュー/ 830909#830909を。私はそれが今の私の考えは、3Dトーラスをレンダリングすることであっても、ここで繰り返すことは十分に便利だと思います:) – Roel

関連する問題