[go: up one dir, main page]

Pergi ke kandungan

OpenGL/Program piramid 3D GLUT

Daripada Wikibuku
   #include<GL/glut.h>

//masukkan header file perpustakaan utama (openGL core Library). Boleh gantikan dengan <GL/gl.h> dan <GL/glu.h>. Boleh letakkan tapi dikhuatiri akan berlaku redundancy dan effect pada program. Setiap data Type bermula dengan huruf besar GL. Function name bermula dengan hurug gl. Contohnya glclearcolor.

   float time = 0;// set masa variable kepada 0
   void init()
   {
  
   glClearColor(0,0,0,0);

//dalam glClearColor mempunyai 4 parameter (merah,hijau,biru,alpha). Jika nilai default didalam parameter diset 0.0 pameran tetingkap(display wondow) berwarna hitam. Jika nilai parameter di set kan (1.0,1.0,1.0,0.0) display window berwarna putih.Contoh warna lain merah asli (1,0,0,0), hijau (0,1,0,0), biru (0,0,1,0), kuning combinasi merah dan hijau (1,1,0,0), oren ialah kuning kehijauan (1,0.5,0,0) Nilai Alpha berguna sebagai 'blending parameter'.Apabila operasi 'blending' diaktifkan , alpha value boleh menentukan warna objek yang bertindih.Nilai alpha 0.0 objek transparen, nilai alpha 1.0 objek legap (opaque).

   glOrtho(-5,5,-5,5,-5,5);

//(NEW) setkan di bahagian pemandangan mana di dalam window display.Animasi pyramid akan dipamerkan pada koordinat (-5,5,-5,5,-5).fungsi glOrtho digunakan untuk memilih koordinat clipping window .glOrtho mencipta satu unjuran selari (parallel projection) yang bersejenjang dengan(perpendicular) view plane (near clipping plane).glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far)

   glEnable(GL_DEPTH_TEST);//untuk menguji kedalaman
   }
   void display()
   {
   glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

//(NEW) setup our buffers.OpenGL symbolic constant yang akan menspesifikasikan nilai bit dalam storan warna (colour buffer).Maksudnya argument ini akan set nilai dalam fungsi glClearColor

   glPushMatrix();//buat satu salinan identity (top) matriks dalam stack yang prtama      kedalam stack yang kedua
   glRotatef(time,0.8,5,0);//menetapkan parameter  untuk pusingan pada mana mana axis melalui titik origin
   glBegin(GL_TRIANGLES);
//permukaan yang akan menghadap kamera
//permukaan yang menghadap kamera berwarna merah
 
   glColor3f(1,0,0);//3f metapkan 3 komponen warna RGB menggunakan float pointer values.nilai mestilah bernilai antra 0.0 dan 1.0 
   glVertex3f(-1,-1,1);//(NEW) menetapkan posisi vertex 
   glVertex3f(0,1,0);//vertex bhg  atas pada koordinat (0,1,0)
   glVertex3f(1,-1,1);//vertex yg terakhir pd koordinat (1,-1,1)
//masih melukis triangle oleh itu glutEnd tidak diperlukan dahulu
//kiri belakang permukaan
//permukaan ini berwarna hijau
   
   glColor3f(0,1,0);
   glVertex3f(-1,-1,1);//Vertex yang paling hampir
   glVertex3f(0,1,0);//vertex yang paling atas
   glVertex3f(0,-1,-1);//vrtex yang paling jauh
//permukaan kanan belakang
//prmukaan ini berwarna biru
   glColor3f(0,0,1);
   glVertex3f(0,-1,-1);//vertex yang paling jauh
   glVertex3f(0,1,0);//vertex yang paling tinggi
   glVertex3f(1,-1,1);//vertex yang paling dekat
//permukaan muka bawah
//permukaan ini berwarna putih
   glColor3f(1,1,1);
   glVertex3f(-1,-1,1);//menetapkan koordinat pada setiap corner
   glVertex3f(0,-1,-1);
   glVertex3f(1,-1,1);
   glEnd();//tamat melukis segitiga
   glPopMatrix();

//buang translation matrix.Mksudnya top matrik didalam stack dipadam dan pindahkan second matrik kpd top matrik.

   glFlush();

//untuk memprosses semua rutin openGL secepat mungkin yang boleh.Kalau takde proses akan lambat berlaku atau tidak berlaku

   glutPostRedisplay();

//fungsi ini penting untk animasi . digunakan utuk refresh kembali skrin.

   }
  void idle()
  {
   time += 0.1;// meningkatkan variable masa
   if(time > 360)
       time = 0;// set semula masa = 0
   }
  void main(int argc, char ** argv)
  {
   glutInit(&argc, argv);// memulakan GLUT
   glutInitWindowSize(800,600);//.Maksudnya set saiz dan kelebaran display window .
   glutInitWindowPosition(10,50);//set lokasi pameran tetingkap (display window) pada koordinat (10,50) (width, height) ..atas    sebelah kiri.
   glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB|GLUT_DEPTH); //set mode warna GLUT_RGB atau GLUT_INDEX.
   glutCreateWindow("Lesson 4");//tajuk untuk pameran tetingkap (window display)
   init();//
   glutDisplayFunc(display);//cipta gmbar untuk dihaantar kepada funsi ini. 
   glutIdleFunc(idle);// Fungsi ini akan memannggil fungsi idle untuk mengemaskini variable.
   glutMainLoop();//aktifkan kandungan grafik dan pameran tetingkap (window display) yang sudah dicipta

}

Oleh Afiqahk