OpenGL/Program piramid 3D GLUT
#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