OpenGL/Contoh Program Penuh GLUT Menggunakan OpenGL

       #include <GL/glut.h>

// dalam semua program grafik, ia memerlukan fail utama (header file) untuk perpustakaan utama (core library) OpenGL. Kebanyakan aplikasi juga memerlukan GLU dan kebanyakan sistem memerlukan fail utama untuk sistem tingkap (window system).

void init(void)

{

       glClearColor(0.0,0.0,0.0,0.0); //set warna paparan tetingkap kepada hitam
       glMatrixMode(GL_PROJECTION); //set parameter unjuran
       gluOrtho2D(0.0,200.0,0.0,150.0); 

//Kedua-dua fungsi ini diperlukan untuk mengeset jenis unjuran(projection type) dan penglihatan parameter lain yang diperlukan. Spesifik unjuran ortogon ialah digunakan untuk isi kandungan peta 2-dimensi kawasan segi empat tepat kepada dunia koordinat di skrin, dan nilai x-koordinat didalam segi empat tepat ini dari 0.0 kepada 200.0 dengan nilai y-koordiant dalam jarak dari 0.0 kepada 150.0. Apa-apa projek yang dimaksudkan didalam dunia koordinat segi empat tepat yang ditunjukkan didalam paparan tingkap. Apa-apa diluar jarak koordinat tidak akan dipaparkan. Oleh itu, fungsi GLU gluOrtho2D menerangkan lingkungan rujukan koordinat dalam paparan tingkap menjadi (0.0,0.0) di bawah-kiri selekoh paparan tingkap dan (200.0,150.0) diatas-kanan selekoh tingkap. Disebabkan kita hanya menerangkan tentang objek 2-dimensi, unjuran ortogon tidak mempunyai kesan lebih untuk “paste” gambar kepada paparan tingkap yang diterangkan terdahulu.kita menggunakan dunia-koordinat segi empat tepat dengan aspek nisbah yang sama seperti paparan tingkap. Jadi, tiada pemutarbelitan kepada gambar. Kita akan menitikberatkan bagaimana untuk mengekalkan aspek nisbah yang tidak bergantung spesifik paparan tingkap.

}

void lineSegment(void)

{

      glClear(GL_COLOR_BUFFER_BIT); // mengosongkan paparan tetingkap 

//Untuk mengarahkan paparan warna tingkap, kita perlu memohon fungsi ini. Perbincangan ini ialah OpenGL simbol untuk spesifikkan nilai di dalam “colour buffer” yang perlu di set kepada nilai-nilai yang menunjukkan dalam fungsi glClearColor.

      glColor3f(1.0,1.0,1.0); //Set warna segmen garisan kepada putih

//3f akhiran pada fungsi glColor menunjukkan kespesifikasi 3 komponen warna RGB menggunakan nilai “floating-point(f)”. fungsi ini memerlukan nilai dalam lingkungan dari 0.0 kepada 1.0

       glBegin(GL_LINES);
               glVertex2i(75,100);
               glVertex2i(125,50);
       glEnd( );

//kod ini menyatakan bahagian 2-dimensi garis lurus dengan integer titik pengakhiran “cartesian” (75,100) and (125,50)

       glBegin(GL_LINES);
               glVertex2i(125,100);
               glVertex2i(75,50);
       glEnd( );

//kod ini menyatakan bahagian 2-dimensi garis lurus dengan integer titik pengakhiran “cartesian” (125,100) dan (75,50)

       glBegin(GL_LINES);
               glVertex2i(100,150);
               glVertex2i(25,75);
       glEnd( );

//kod ini menyatakan bahagian 2-dimensi garis lurus dengan integer titik pengakhiran “cartesian” (100,150) and (25,75)

       glBegin(GL_LINES);
               glVertex2i(100,150);
               glVertex2i(175,75);
       glEnd( );

//kod ini menyatakan bahagian 2-dimensi garis lurus dengan integer titik pengakhiran “cartesian” (100,150) and (175,75)

       glBegin(GL_LINES);
               glVertex2i(175,75);
               glVertex2i(100,0);
       glEnd( );

//kod ini menyatakan bahagian 2-dimensi garis lurus dengan integer titik pengakhiran “cartesian” (175,75) and (100,0)

       glBegin(GL_LINES);
               glVertex2i(100,0);
               glVertex2i(25,75);
       glEnd( );

//kod ini menyatakan bahagian 2-dimensi garis lurus dengan integer titik pengakhiran “cartesian” (100,0) and (25,75)

       glBegin(GL_TRIANGLES);
               glColor3f( 1.0f,0.0f,0.0f); //set vertex kepada warna merah
               glVertex3f(100.0f, 150.0f, 0.0f);
               glColor3f( 0.0f,1.0f,0.0f); //set vertex kepada warna hijau
               glVertex3f(75.0f, 100.0f, 0.0f);
               glColor3f( 0.0f,0.0f,1.0f); //set vertex kepada warna biru
               glVertex3f(125.0f, 100.0f, 0.0f);
       glEnd( );

// kod ini menyatakan bahagian 2-dimensi “”segitiga dengan integer titik pengakhiran “cartesian” (100.0, 150.0, 0.0), (75.0, 100.0, 0.0), dan (125.0, 100.0, 0.0).

       glBegin(GL_TRIANGLES);
               glColor3f( 1.0f,0.0f,1.0f); //set vertex kepada warna merah jambu
               glVertex3f(125.0f, 100.0f, 0.0f);
               glColor3f( 1.0f,1.0f,0.0f); //set vertex kepada warna kuning
               glVertex3f(175.0f, 75.0f, 0.0f);
               glColor3f( 0.0f,1.0f,0.0f); //set vertex kepada warna hijau
               glVertex3f(125.0f, 50.0f, 0.0f);
       glEnd( );

// kod ini menyatakan bahagian 2-dimensi “”segitiga dengan integer titik pengakhiran “cartesian” (125.0, 100.0, 0.0), (175.0, 75.0, 0.0), dan (125.0, 50.0, 0.0).

       glBegin(GL_TRIANGLES);
               glColor3f( 0.0f,0.0f,1.0f); //set vertex kepada warna biru
               glVertex3f(75.0f, 50.0f, 0.0f);
               glColor3f( 1.0f,0.0f,0.0f); //set vertex kepada warna merah
               glVertex3f(125.0f, 50.0f, 0.0f);
               glColor3f( 1.0f,1.0f,0.0f); //set vertex kepada warna kuning
               glVertex3f(100.0f, 0.0f, 0.0f);
       glEnd( );

// kod ini menyatakan bahagian 2-dimensi “”segitiga dengan integer titik pengakhiran “cartesian” (75.0, 50.0, 0.0), (125.0, 50.0, 0.0), dan (100.0, 0.0, 0.0).

       glBegin(GL_TRIANGLES);
               glColor3f( 0.0f,1.0f,1.0f); //set vertex kepada warna hijau biru
               glVertex3f(25.0f, 75.0f, 0.0f);
               glColor3f( 1.0f,0.0f,0.0f); //set vertex kepada warna merah
               glVertex3f(75.0f, 50.0f, 0.0f);
               glColor3f( 1.0f,0.0f,1.0f); //set vertex kepada warna merah jambu
               glVertex3f(75.0f, 100.0f, 0.0f);
       glEnd( );

// kod ini menyatakan bahagian 2-dimensi “”segitiga dengan integer titik pengakhiran “cartesian” (25.0, 75.0, 0.0), (75.0, 50.0, 0.0), dan (75.0, 100.0, 0.0).

      glFlush();

//Untuk memproses kesemua rutin OpenGL secepat mungkin yang boleh.

}

void main(int argc, char** argv)

{

      glutInit(&argc, argv);     //initialize GLUT

//Langkah pertama adalah untuk meletakkan awalan(initialize) GLUT. Fungsi permulaan boleh memproses mana-mana ayat perintah alasan (arguments) tetapi tidak memerlukan parameters untuk contoh program pertama.

      glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);  //set display mode

//kita boleh mengubah posisi dan saiz. Kita juga boleh mengeset nombor pilihan lain untuk memaparkan window(display window), contohnya penampan(buffering) dan pilihan jenis warna dengan glutInitDisplayMode fungsi. Alas an (arguments) untuk rutin diarahkan simbolik GLUT malar(constant). Untuk contoh, arahan yang spesifik yang satu-satunya menyegarkan penampan adalah digunakan untuk memaparkan tingkap dan hendak menggunakan jenis warna yang digunakan adalah merah, hijau dan biru (RGB) komponen untuk dipilih nilainya

     glutInitWindowPosition(50,100); //set top left display window position

// Memberi nilai pengawalan tempat untuk dibelah atas kiri corner dipaparan window. Posisi ialah spesifik dalam integer skrin koordinat, yang menjadi titik asalan di atas kiri corner untuk dipaparan tingkap. Sepatutnya di 50 pixels ke kanan kepada pinggir kiri di skrin dan 100 pixels bawah daripada atas pinggiran skrin.

     glutInitWindowSize(400,300); //set display window width and height

//Digunakan untuk mengeset pixel awalan lebar dan tinggi untuk paparan tingkap dengan nilai awalan lebar 400 dan tinggi 300 pixels.

     glutCreateWindow("My First OpenGL program"); //create window display

//Menyatakan bahawa paparan tingkap adalah untuk dicipta pada skrin dengan pemberian sarikata untuk tajuk.

     init(); //Execute initialize procedure

//Untuk melaksanakan pengawalan prosedur. Permulaan untuk “one-time” parameter penetapan

     glutDisplayFunc(lineSegment); //send graphics to display window

//Untuk spesifikkan kandungan tingkap. Untuk ini, kita mencipta gambar menggunakan OpenGL fungsi dan hantar gambar definisi kepada tingkap (window). Contohnya, sepatutnya kita memerlukan OpenGL kod untuk menggambarkan satu garis sekmen dalam prosedur yang dipanggil lineSegment.

     glutMainLoop(); //display everything and wait

//Ini diperlukan untuk menyempurnakan tingkap-pemprosesan operasi dan pelaksanaan penyataan tersebut, kesemua paparan tingkap yang dicipta termasuk kandungan grafik akan diaktifkan.

}