3

最新の OpenGL での回転は廃止されているため、三角形を回転するにはどうすればよいですか? 廃止前:

    gl.glRotated(i, 0, 0, 1);

    gl.glBegin(GL2.GL_TRIANGLES);       
    gl.glVertex3f(0.0f, 1.0f, 0.0f );   
    gl.glVertex3f(-1.0f, -1.0f, 0.0f ); 
    gl.glVertex3f(1.0f, -1.0f, 0.0f );  
    gl.glEnd();

私はこれをやってみましたが、それは単なる翻訳です:

    double rotCos = Math.cos(i);
    double rotSine = Math.sin(i);


    gl.glBegin(GL2.GL_TRIANGLES);       
    gl.glVertex3d(0.0f + rotSine, 1.0f + rotCos, 0.0f );    
    gl.glVertex3d(-1.0f + rotSine, -1.0f + rotCos, 0.0f );  
    gl.glVertex3d(1.0f + rotSine, -1.0f + rotCos, 0.0f );   
    gl.glEnd();

glRotated の背後にある数学を達成する方法は?

4

3 に答える 3

4

あなたがしたことは、それらの関数の非推奨の背後にある考え方ではありません。この非推奨には関数glBeginglVertexglEndも含まれていたため、これらを使用している場合は要点がわかりません

あなたがすべきことは、頂点変換の通常のステップを実行する頂点シェーダーを実装することです。つまり、最初に頂点をモデルビューで乗算し、次に射影行列を乗算します。モデルビューとプロジェクションを 1 つのマトリックスに縮小することもできますが、これによりイルミネーションが少し難しくなります。

行列は、いわゆるユニフォームを通じて OpenGL に渡されます。行列を作成するには、GLM や Eigen などのベクトル数学ライブラリを使用します (Eigen に付随する非公式の OpenGL モジュールを使用)。

于 2012-09-20T15:30:07.757 に答える
1

glRotated の背後にある数学を達成する方法は?

行列glRotate()構造はドキュメントにあります

于 2012-09-20T16:07:05.583 に答える
0

廃止された関数を使用することはまだ問題ありませんが、「最新の」OpenGL (OpenGL 3 以降) を使用する場合は、かなり異なる方法で行う必要があります。

1 つは、glBegin/glEndを使用しなくなり、代わりに頂点バッファー オブジェクトを使用してすべてを描画することです。次に、固定関数パイプラインが削除されたため、何かを描画するには頂点シェーダーとフラグメント シェーダーが必要です。他にも多数の変更があります (頂点配列オブジェクトやジオメトリ シェーダーの追加など)。

OpenGL 3 で回転を行う方法は、modelView と射影行列をユニフォームで渡し、それらを使用して頂点シェーダーで頂点位置を計算することです。

最終的に、「最新の」OpenGL を学習したい場合は、オンラインで OpenGL 3.0 (またはそれ以降) のチュートリアルを探すのが最善の方法です。

于 2012-09-20T22:04:26.623 に答える