3

私は Qt および QWt3D プロット ツールを使用しており、それらを拡張して必要な 3 次元および 2 次元プロット機能を提供しているため、その過程で OpenGL について学習しています。

現在、OpenGL を使用して点をプロットできますが、円 (またはアンチエイリアシングをオフにすることで「正方形」) としてのみプロットできます。これらのポイントは、私が好きなように動作します。つまり、ズームインしてもサイズは変わりませんが、ズームやパンなどに応じて x/y/z 位置が適切に移動します。

私ができるようにしたいのは、無数の形状 (^、<、>、*、. など) を使用して点をプロットすることです。私が OpenGL について理解していることから (これはあまり多くありません)、OpenGL はすべてを「実際の」3D オブジェクトとして扱うため、これを達成するのは簡単ではありません。サイズ。

いくつか読んだ後、この問題には(少なくとも)2つの解決策があると思います。

  1. OpenGL テクスチャを使用します。これは難しくないように思えますが、拡大するとテクスチャ イメージが大きくなったり小さくなったりすると思いますが、そうですか?

  2. OpenGL ポリゴン、ラインなどを使用して、*、三角形などを描画します。しかし、ここでも同じ問題に遭遇します。ズーム時に OpenGL が「ポイント」のサイズを変更しないようにするにはどうすればよいですか?

ポイントが同じサイズに保たれるように、ユーザーがズームまたはパンするたびに、単に弾丸を噛んでデータセット全体を再描画するソリューションはありますか? オブジェクトのサイズを再計算しないようにopenGLに指示する方法はありますか?

これが OpenGL ドキュメントのどこかにある場合は申し訳ありませんが、見つかりませんでした。

4

3 に答える 3

8

必要なものは「ポイント スプライト」と呼ばれます。OpenGL1.4 はARB_point_sprite拡張機能を通じてこれらをサポートします。

このチュートリアルを試す

http://www.ploksoftware.org/ExNihilo/pages/Tutorialpointsprite.htm

それがあなたが探しているものかどうかを確認してください。

于 2009-05-12T03:18:52.297 に答える
2

とにかく、ユーザーがズームまたはパンするたびにシーンが再描画されるため、サイズを再計算することもできます。

あなたは、テクスチャ ポリゴンを使用するか、ポリゴンを直接使用することを提案しましたが、これは私には良いアイデアのように思えます。カメラが移動してもプロット ポイントをグラフ内の正しい位置に維持したいように思えますが、ユーザーがズームしたときにサイズが変化しないようにしたいと考えています。これを行うには、プロット ポイント ポリゴンのサイズを変更して、ポリゴンのサイズとカメラまでの距離の比率が一定になるようにします。プロット ポイントが多数ある場合、カメラまでの距離を計算すると、平方根が関係するためコストが高くなる可能性がありますが、ルックアップ テーブルを使用すると、おそらくそれを解決できます。

サイズ変更に加えて、プロット ポイントをカメラに向けたままにしておく必要があるため、ビルボードがソリューションです。

別の方法として、各 3D プロット ポイントの位置を投影して、それらの 2D スクリーン座標を見つけることもできます。次に、それらの画面座標でポリゴンを単純にレンダリングします。再スケーリングは必要ありません。ただし、gluProject は非常に遅いため、最初に提案したようにプロット ポイント ポリゴンを単純に再スケーリングするよりも桁違いに遅くなかったとしたら、非常に驚​​かれることでしょう。

幸運を!

于 2009-05-12T04:29:24.287 に答える
0

やりたいことを実現する簡単な方法はありません。カメラの現在のズームに応じて、描画しているプリミティブのサイズを動的に変更する必要があります。ビルボードと呼ばれる手法を使用して、オブジェクトが常にカメラの方を向くようにすることができます。

于 2009-05-12T03:11:18.020 に答える