10

OpenGL で単純な回転を行おうとしていますが、要点が欠けているに違いありません。OpenGL の回転をより一般的に説明する簡単な説明やリンクほど、特定の修正を探しているわけではありません。

現時点では、次のようなコードがあります。

glPushMatrix();
  glRotatef(90.0, 0.0, 1.0, 0.0);
  glBegin(GL_TRIANGLES);        
    glVertex3f( 1.0, 1.0, 0.0 );        
    glVertex3f( 3.0, 2.0, 0.0 );        
    glVertex3f( 3.0, 1.0, 0.0 );        
  glEnd();
glPopMatrix();

しかし、結果は 90 度回転した三角形ではありません。

編集 うーん、Mike Haboustak のおかげです。私のコードは、glOrtho を使用する SetCamera 関数を呼び出していたようです。私はOpenGLに慣れていないので、これが何を意味するのかわかりませんが、これを無効にしてZ軸で回転させると、望ましい結果が得られました。

4

6 に答える 6

7

glRotatef 呼び出しの前に次の行を追加して、モデルビュー マトリックスを変更していることを確認します。

glMatrixMode(GL_MODELVIEW);

そうしないと、代わりに投影またはテクスチャ マトリックスを変更している可能性があります。

于 2008-08-23T03:38:22.613 に答える
6

1 単位の直線が得られますか? どうやら90度腐っているようです。Y の周りでは、深さのない三角形の辺を見ることになります。

代わりに Z 軸を中心に回転させてみて、より意味のある結果が得られるかどうかを確認してください。

OpenGL には、ジオメトリの表示に関連する 2 つのマトリックス、ModelView と Projection があります。どちらも、データが画面に表示される前に座標に適用されます。最初に ModelView マトリックスが適用され、データがモデル空間からビュー空間に変換されます。次に、投影マトリックスが適用され、2D モニターでの「投影」のためにビュー空間からのデータが変換されます。

ModelView は複数のオブジェクトを「ワールド」内の位置に配置するために使用され、Projection はオブジェクトを画面上に配置するために使用されます。

あなたのコードは問題ないように見えるので、ドキュメントを読んで、glPushMatrix() のような関数の性質が何であるかを知っていると思います。Z を中心に回転しても意味がない場合は、glMatrixMode を呼び出して、ModelView マトリックスを編集していることを確認してください。

于 2008-08-23T03:40:29.037 に答える
5

「受け入れられた答え」は完全には正しくありません。このコードの前に奇妙なことをしていなければ、Zの周りを回転してもこの三角形を見るのに役立ちません。glOrtho(...)呼び出しを削除すると、この場合の問題は修正された可能性がありますが、他にもいくつか問題があります。

記述されたコードに関する2つの主要な問題:

  • 以前にカメラを配置しましたか?OpenGLでは、カメラは原点に配置され、Z軸を見下ろし、正のYを上に向けます。この場合、三角形はあなたの目と同じ平面に描かれていますが、右上に描かれています。非常に奇妙な射影行列がない限り、それは表示されません。gluLookat()はこれを行うための最も簡単なコマンドですが、現在のマトリックス(MODELVIEWである必要があります)を移動する任意のコマンドを機能させることができます。

  • 三角形は左利きまたは時計回りの方法で描画していますが、OpenGLのデフォルトは右利きまたは反時計回りの座標系です。これは、背面をカリングしている場合(おそらくそうではありませんが、高度になるにつれて上に移動する可能性があります)、期待どおりに三角形が表示されないことを意味します。問題を確認するには、右手を顔の前に置き、XY平面にあると想像して、頂点(1,1)、(3,2)、(3,1)を描画する順序で指を動かします。 )。これを行うとき、親指は顔の反対側を向いています。つまり、三角形の裏側を見ていることになります。右利きの方法で顔を描く習慣を身につける必要があります。これは、OpenGLで行われる一般的な方法だからです。

私がお勧めできる最善のことは、NeHeチュートリアル(http://nehe.gamedev.net/ )を使用することです。まず、いくつかのシステムでOpenGLをセットアップする方法を示し、三角形の描画に移り、ゆっくりと確実に、より高度なトピックに進みます。彼らは非常に簡単にフォローできます。

于 2008-09-15T23:41:56.617 に答える
1

私は本を​​お勧めしたい:

3D コンピュータ グラフィックス :サミュエル R. ブスによるOpenGL の数学的紹介

それは非常に明確な説明を提供し、数学は非グラフィック領域に広く適用できます. また、正射投影と透視変換の完全な説明もあります。

于 2008-09-02T10:47:00.460 に答える
1

OpenGL を初めて見たとき、NeHe のチュートリアル(左のメニューを参照) は非常に役に立ちました。

于 2008-09-02T04:10:48.743 に答える
1

射影行列に関しては、ここから始めるのに適したソースを見つけることができます。

http://msdn.microsoft.com/en-us/library/bb147302(VS.85).aspx

1 種類の射影行列を作成する方法について少し説明します。正投影は、このようなマトリックスの非常に基本的/原始的な形式であり、基本的には、3 つの軸座標のうち 2 つを取り、それらを画面に投影します (軸を反転してスケーリングすることはできますが、ワープや遠近効果はありません)。 .

マトリックスの変換は、3D でレンダリングする際に最も重要なことの 1 つである可能性が高く、基本的に 3 つのマトリックス ステージが含まれます。

  • Transform1 = オブジェクト座標系からワールドへ (例 - オブジェクトの回転とスケール)
  • Transform2 = カメラへのワールド座標系 (オブジェクトを適切な場所に配置)
  • Transform3 = カメラ座標系からスクリーン スペースへ (スクリーンへの投影)

通常、3 つの行列の乗算結果は WorldViewProjection 行列 (この用語に出くわした場合) と呼ばれます。これは、座標をモデル空間からワールド、カメラ、最後に画面表現に変換するためです。

楽しむ

于 2008-09-15T19:08:35.400 に答える