2009-05-12 8 views
3

QtおよびQWt3Dプロットツールを使用して、必要な3Dおよび2Dプロット機能を提供するように拡張しています。その過程でいくつかのOpenGLを学びます。OpenGLの「点状」の図形をズームに無関係に描画する

現在のところ、OpenGLを使用して点をプロットすることはできますが、サークル(またはアンチエイリアスをオフにすることによって「四角形」)としてのみ使用できます。これらの点は、好きなように機能します。つまり、ズームするとサイズが変わりませんが、x/y/zの位置はズーム、パンなどのように適切に移動します。

何ができるようにしたいですか(^、<、>、*、。など)を使用してプロットポイントを作成します。私はOpenGLについて理解していますが(これはあまりありません)、OpenGLはすべてを「本当の」3Dオブジェクトとして扱うので、実現するのは簡単ではありません。したがって、どのようなOpenGLシェイプでもズームインすることができますが、サイズ。

  1. 使用OpenGLのテクスチャ:

    は、いくつかの読書を行った後、私はこの問題への(少なくとも)2つの可能な解決策があると思います。これは難しいとは思われませんが、ズームインするにつれてテクスチャイメージが大きくなったり小さくなったりすると思います。

  2. OpenGLのポリゴンや線などを使用し、*、三角形などを描画します。しかしここでもまた同じ問題にぶつかります。ズームするとOpenGLの「サイズ変更」を防ぐ方法を教えてください。

は、単純に弾丸をかむと、ユーザはポイントが同じサイズのままことを確認してズームしたりパンするたびに設定し、全データを再描画するためのソリューションですか?オブジェクトのサイズを再計算しないようにOpenGLに指示する方法はありますか?

申し訳ありませんが、これはOpenGLのドキュメントのどこかにある - 私はそれを見つけることができませんでした。

答えて

8

あなたが望むのは「ポイントスプライト」と呼ばれます。 OpenGL1.4では、これらを拡張子ARB_point_spriteでサポートしています。

は、このチュートリアル

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

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

0

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

2

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

あなたはテクスチャ付きのポリゴンを使用するか、ポリゴンを直接使用することをお勧めします。カメラが動くにつれてプロットポイントがグラフの正しい位置に残るようにしたいが、ユーザーがズームしたときにプロットポイントがサイズを変更しないようにしたいと思う。これを行うには、ポリゴンのサイズとカメラまでの距離の比が一定になるようにプロットポイントポリゴンのサイズを変更するだけです。プロットポイントがたくさんある場合は、平方根が関係するため、カメラとの距離を計算するのは高価になる可能性がありますが、ルックアップテーブルで解決する可能性があります。

リサイズに加えて、プロットポイントをカメラに向けることが望ましいので、billboardingがあなたの解決策です。

代わりに、2Dのスクリーン座標を見つけるための3Dプロットポイント位置のそれぞれがprojectです。次に、それらの画面座標にポリゴンをレンダリングします。再スケーリングは必要ありません。しかし、gluProjectは非常に遅いので、私が最初に提案したように、プロットポイントのポリゴンを単純にリスケーリングするよりも、これが桁違いに遅くなければ、私は非常に驚くでしょう。

幸運を祈る!

関連する問題