OpenGlプログラミング(freeglut)、プリミティブの描画

こんにちは、Habrauser! 今日の最初の記事では、 OpenGlプログラミングについて説明します。



//注:freeglutの代わりにglutを使用することもできます(glutの代替案です)。



始めるために、 opengl(freeglut'e)でコーディングを開始するためにダウンロードしてインストールする必要があるものについて少し書きます。



openglで描画するには、 freeglutライブラリ(OpenGL Utility Toolkit-openglのラッパー)を使用します。 Freeglutファイルはこちらにあります 。 これをLinuxおよびWindows(MSVCおよびMinGW)にインストールする方法についての指示があります。 Linuxでは、freeglutはいくつかのコマンドに配置され、Windowsでは数回クリックするだけで配置されます。 インストールで問題が発生した場合は、私に連絡してください。freeglutのインストール方法について詳しく説明します。



カットの下の詳細。



そのため、最初はコードの初期初期化について理解しましょう。

通常、freeglutプロジェクトには次のコードが含まれます。

#include <GL/freeglut.h>//     void display() { /*    */ } int main(int argc, char **argv) { glutInit(&argc, argv);//   glutInitDisplayMode(GLUT_DOUBLE);//   glutInitWindowSize(400,400);//  glutInitWindowPosition(200, 200);//    //        glutInit...?,      ,      -. glutCreateWindow("Window");//  glClearColor(1, 1, 1, 0);//  //  ,    -    . glMatrixMode(GL_PROJECTION);//  glLoadIdentity();//  glOrtho(-100, 100, -100, 100, -100, 100);//c   ,    3D   ,     200 . glutDisplayFunc(display);//        . glutMainLoop();//  ,     - main,     glut' - main. return 0; }
      
      







上記の関数のいくつかをさらに詳しく分析してみましょう。

Q glutInitDisplayMode()は異なるパラメーターを取ることができますが、今のところそれらのいくつかのみを使用します:



GLUT_RGB -RGBモードの使用(それぞれ赤|緑|青-赤|緑|青-)。 デフォルトで使用されます。

GLUT_SINGLE-単一のバッファを持つウィンドウ。 このモードはデフォルトでも使用されます。

GLUT_DOUBLE-ダブルバッファーのあるウィンドウ。



バッファは、データが一時的に保存される領域です。



疑問が生じますが、単一のバッファと二重のバッファはどう違うのですか? ダブルバッファは次のように機能します。2つのバッファがあり、最初のバッファは画面に描画され、2番目のバッファは最初のバッファが完全に描画された後に準備され描画されます。 次に、同じ方法で、バッファのみが交換されます。 つまり バッファは順番に描画されます。 なぜこれが必要なのですか? 画面がちらつかないようにするため。 上記から、単一のバッファの意味を理解できると思います。



Q glOrtho (左、右、下、上、zNear、zFar)-座標系を設定します

leftパラメーターは、oX軸に沿って左に移動する単位の数を意味します

正しいパラメーターは、oX軸に沿って右に移動する単位数を意味します

bottomパラメーターは、oY軸を下に移動するユニットの数を意味します

topパラメーターは、oY軸を上に移動するユニットの数を意味します

zNearパラメーターは、oZ軸に沿ってより深く移動するユニットの数を意味します

zFarパラメーターは、oZ軸に沿って前方に移動するユニットの数を意味します

わかりやすくするために、図を破線で示しました。



openglでのプリミティブのプログラミング:

直接コーディングに取りかかりましょう。

線を引く小さなコード:

 #include <GL/freeglut.h> void display() { glClear(GL_COLOR_BUFFER_BIT);//  glColor3f(1.0f,0.0f,0.0f);//   glLineWidth(3);//   glBegin(GL_LINES);//     glVertex2d(-1, 0);//     (x,y) glVertex2d( 1, 0);//   glEnd();//     glutSwapBuffers();//    } int main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE); glutInitWindowSize(200, 200); glutInitWindowPosition(200, 200); glutCreateWindow("Window"); glClearColor(1, 1, 1, 0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-10, 10, -10, 10, 0, 0); glutDisplayFunc(display); glutMainLoop(); return 0; }
      
      







画像



glBegin()関数では、描画を開始するものを指定します。次のようなパラメーターを使用できます。



GL_POINTS-ポイントを描くことをプログラムに伝えます

GL_LINES-線を引きます

GL_TRIANGLES-三角形を描画します

GL_QUADS-長方形を描画します

...

線を組み合わせたり、三角形、四角形、多角形のグループを描画したりできるその他のパラメーター。

Ffl glEnd()は描画オブジェクトを完成させます



それでは、 glBegin (GL_POINTS)、 glBegin (GL_LINES)、 glBegin (GL_TRIANGLES)、 glBegin (GL_QUADS)を使用して、点、線、三角形、長方形を描画しましょう。



 #include <GL/freeglut.h> void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPointSize(6); glColor3f(0.0f,0.0f,0.0f); glBegin(GL_POINTS);//   glVertex2f(-0.5f, 0.2f); glEnd(); glLineWidth(3); glColor3f(1.0f,0.0f,0.0f); glBegin(GL_LINES);//   glVertex2d(-1, 1); glVertex2d( 1, -1); glEnd(); glColor3f(0.0f, 1.0f,0.0f); glBegin(GL_TRIANGLES);//   glVertex2d(0, 0); glVertex2f(0.5, 1); glVertex2d(1, 0); glEnd(); glColor3f(0.0f, 0.0f, 1.0f);//   glBegin(GL_QUADS); glVertex2d(-1, -1); glVertex2d(-1, 0); glVertex2d( 0, 0); glVertex2d( 0, -1); glEnd(); glutSwapBuffers();//    } int main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE); glutInitWindowSize(200, 200); glutInitWindowPosition(200, 200); glutCreateWindow("Window"); glClearColor(1, 1, 1, 0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-1, 1, -1, 1, 0, 0); glutDisplayFunc(display); glutMainLoop(); return 0; }
      
      







画像



これで私はそれが終わる時だと思う、私は次の記事で残りを説明する。 コメントや質問がある場合は、PMまたはコメント欄に書いてください。 説明またはコードに誤りがある場合は、お知らせください。



All Articles