1

私はOpenGLに非常に慣れていません。画面にフライング 3D テキストを表示するプログラムを作成しています。特定のテキスト文字列が画面に表示 (描画) され、ユーザーに表示されるタイミングを知る必要があります。プログラムは、表示されるテキスト文字列を識別する必要があります。(注: 私の問題はテキストを扱っていますが、任意の OpenGL オブジェクトに一般化できます)。

最初は、OpenGL のピッキング メカニズムを使用できると考え始めましたが、これまでのところ、選択領域が何らかのユーザー インタラクションに重点を置いている例しか見たことがありません。ウィンドウ領域全体に表示されているオブジェクトを知りたいです。これは、私が間違った方向に進んでいると思うように導きます... 何か足りないのでしょうか?

どんな提案でも大歓迎です。

4

4 に答える 4

2

クエリオブジェクト(具体的には、GL_ARB_occlusion_query拡張機能仕様を使用して作成されたオブジェクト)を使用できます。これらのオブジェクトは、一連のOpenGL操作(開始/終了など)を使用してレンダリングされるフラグメントの数を照会するために使用されます。

別のスキーム(ソフトウェアのみ)は、レンダリングされたテキストのバウンディングボックスを決定し、バウンディングボックスがビュー錐台(レンダリングに使用される現在のパースペクティブから派生)内にあるかどうかを数学的に計算することです。

注:OpenGLピッキングを使用することは、必ずしもgluPickMatrixの使用を意味する必要はありません。シーンを「そのまま」レンダリングし、レンダリングされた名前をクエリすることができます(OpenGL 3では、選択は非推奨になっています)。

クエリオブジェクトは使いやすく、軽量です。ピッキングは、ほとんどのハードウェアにとってもう1つの優れたソリューションですが、クエリオブジェクトよりも概略的です。

于 2010-03-09T18:08:56.337 に答える
0

うーん、それは本当に3Dですか?それとも、2D 空間の画面上の 2D テキストですか? その場合、手動で追跡するだけです。テキストをどのように正確に描いていますか?

一般に、これを行う方法は、基本的にカメラのボリュームを作成し、3D オブジェクトがその中にあるかどうかをテストする「フラスタム チェック」を使用することです。

于 2010-03-09T07:48:08.113 に答える
0

OpenGL のフィードバックメカニズムを試すことができます。このモードでは、OpenGL はフラグメントを生成し、それらをフィードバック バッファーに渡します。何かが切り取られた場合、フラグメントは生成されません。テキストが表示されると、フラグメント バッファに対応するフラグメントが見つかります。

このリンクから開始できます。

これが別のリンクです。質問10.010は、あなたが望むものに特に関連しているようです。

于 2010-03-09T07:51:07.627 に答える
0

投影およびモデル ビュー マトリックスを介してオブジェクト座標を実行し、画面空間座標を取得します。X/Y 出力を画面範囲と比較して、テキストが画面上にあるかどうかを判断します。

于 2010-03-09T16:47:52.830 に答える