3D環境をナビゲートするために、オービット、ウォーク、パン、回転などのナビゲーション機能を実装するOpenGLアプリケーションがあります。このすべては完璧に機能し、gluPerspectiveとgluLookAtを使用してセットアップするのはかなりストレートです。 CADソフトウェアの典型的なZoomExtents又はZoomToFitコマンドと同様OpenGLズームエクステントを実装する方法
glMatrixMode GL_PROJECTION
glLoadIdentity
gluPerspective m_ViewAngle, m_AspectRatio, m_ClipDistance_Near, m_ClipDistance_Far
glMatrixMode GL_MODELVIEW
glLoadIdentity
gluLookAt m_Eye.X, m_Eye.Y, m_Eye.Z, m_Focus.X, m_Focus.Y, m_Focus.Z, m_ViewUP.X, m_ViewUP.Y, m_ViewUP.Z
glCallList DisplayListIndex
、任意の視点(視線方向)から、私は (1)全体の3D環境ことをズームできるようにしたいと思い (2)3D環境モデルはビューポート全体を塗りつぶします(ビューポートの現在のサイズを考慮して、できるだけ大きい)。
私は環境の境界ボックス(範囲)を知っています(最小XYZ、最大XYZ)。しかし、私は、指定されたViewAngleとAspectRatioと環境エクステントに対して目と焦点の位置がどんなものであるべきかを導き出すことができませんでした。
gluLookAtよりも簡単な方法があります。どんな助けもありがとう!
「あなたはすでにこれをやっている」と言ったとき、実際に起こっていることは、OpenGLが彼のためにやっているということです。私はそれらの計算の結果にアクセスする方法を知らない。それは簡単ですか?そうでない場合は、これを実装するために、彼は自身のコードで行列/頂点の算術を複製する必要があります:PROJECTIONとMODELVIEWの行列をとり、モデルのすべての頂点でそれらを掛けます。モデル内のすべての頂点ではなく、モデルの境界ボックス全体で計算します。 –
Ah。このバウンディングボックスのショートカットは、この質問に対する他の回答に対するJRSのコメントを考慮すると、明らかに適切ではありません。 –