1

私のコードは現在次のようになっています:

glViewport (0, 0, this->w(), this->h());

glMatrixMode(GL_PROJECTION);

glLoadIdentity();
glFrustum(-1.0, 1.0, -1.0, 1.0, 1.5, 20.0);
//glTranslated (m_fXmovement, 0.0, m_fZmovement - 5);
//glRotated (m_fYangleView, 1.0, 0.0, 0.0);
//glRotated (m_fXangleView, 0.0, 1.0, 0.0);

///// Model View \\\\\

glMatrixMode(GL_MODELVIEW);

glTranslated (m_fXmovement, 0.0, m_fZmovement - 5 );
glRotated (m_fYangleView, 1.0, 0.0, 0.0);
glRotated (m_fXangleView, 0.0, 1.0, 0.0);

DrawWaveFrontObject (m_pDataObjectMedia);

glPushMatrix();
    glTranslated (0.0, -3.0, 0.0);  
    DrawArea();
glPopMatrix();  

DrawClickAnimation();

glLoadIdentity();

最初に GL_PROJECTION に移動部分があり、霧で作業するまではすべて正常に動作していました.... カメラが動いていないように感じました.そのカメラを指している追加のカメラのように感じました....

次に、誤って動きの部分を GL_MODELVIEW にコピーしてしまい、霧が思いどおりに動作していました。クリック アニメーションが領域に関連していないことを受け入れて、すべて問題ありませんでした。アニメーションは私のエゴで動きました。パースペクティブ....そして、これらの2つのVIEWのどちらにどのような種類の図面を配置する必要があるのか​​ よくわかりません。私のコードに従って、誰かが私の例や説明、または私のスタイルで改善できるヒントを教えてもらえますか?

4

2 に答える 2

11

opengl.org フォーラムからの引用:

射影行列は、ビュー ボリュームを作成するために使用されます。現実世界のシーンを想像してみてください。周りのすべてが実際に見えるわけではなく、目で見えるものだけが見えます。たとえば、あなたが魚であれば、物事は少し広く見えます。したがって、射影行列を設定すると言うときは、作成したシーンから見たいものを設定することを意味します。つまり、世界のどこにでもオブジェクトを描くことができます。それらがビュー ボリューム内にない場合、何も表示されません。ビュー ボリュームを作成するとき、視野を定義する 6 つのクリッピング プレーンを作成することを想像してください。

モデルビュー マトリックスに関しては、ワールド内のモデル (オブジェクト) にさまざまな変換を行うために使用されます。このように、オブジェクトを一度定義してから、それを移動、回転、またはスケーリングするだけで済みます。

ビュー ボリュームを設定するために、シーン内のオブジェクトを描画する前に射影行列を使用します。次に、オブジェクトを描画し、それに応じてモデル ビュー マトリックスを変更します。もちろん、たとえば、シーンを描画してからテキストを描画したい場合 (いくつかの方法では、正射投影で簡単に作業できます)、モデルビュー マトリックスに戻す場合など、モデルの描画の途中でマトリックスを変更できます。

モデルビューという名前は、モデリングと表示変換の二重性に関係しています。カメラを 5 単位後ろに引いたり、オブジェクトを 5 単位前に移動したりしても、基本的には同じです。

于 2013-12-15T13:42:06.650 に答える
1

まず第一に、固定機能のパイプライン (glTranslate など) を放棄することをお勧めします。これは、10 年ほど前から非推奨になっているためです。興味がある場合は、より最新のチュートリアルについてはこちらをご覧ください。

あなたの問題に関しては、次のような 2 つの行列の意味を想像できます。射影行列は、視野がどのように形成されるかなど、本質的にカメラ自体に固有のプロパティをキャプチャします。

一方、モデル ビュー マトリックスは、モデル マトリックスとビュー マトリックスの 2 つの部分で構成されます。モデル パーツは、(オブジェクト自体に関連する) オブジェクト空間からワールド空間に変換するためのものです。次に、ビュー パーツはそこから目の空間に変換されます。この空間では、カメラが原点に位置し、(負の?) z 軸を下に向けます。一緒に、modelview マトリックスは、基本的に、オブジェクトがカメラに対してどのように配置されるかを示します。

詳細については、このリソースで、OpenGL のコンテキストでのグラフィックス変換について詳しく説明しています。

[2017 年 1 月]編集: 最初のリンクのページは最近アクセスできないようです。そのため、アーカイブから同じコンテンツへの別のリンクがあります。

于 2013-03-18T17:50:34.777 に答える