OpenGL sunting

 #include <GL/glut.h> /*baris untuk masukkan header file. Fail kepala untuk Glut32 */
 #include <stdio.h> /*Fail kepala untuk asas(standard) input/output */     
 #include <math.h> /*Fail kepala untuk pengiraan */ 

GLfloat light0_ambient[] = 
{0.2, 0.2, 0.2, 1.0}; /* Mengenalpasti ciri-ciri ambient bagi light0*/


GLfloat light0_diffuse[] =
{0.0, 0.0, 0.0, 1.0}; /* Mengenalpasti ciri-ciri sebaran cahaya bagi light0*/


GLfloat light1_diffuse[] =
{1.0, 0.0, 0.0, 1.0}; /* Mengenalpasti ciri-ciri sebaran cahaya berwarna merah bagi light1*/


GLfloat light1_position[] =
{1.0, 1.0, 1.0, 0.0}; /* Menentukan kedudukan bagi light1 yang berada pada kedudukan 1.0,1.0,1.0,0.0 pada tetingkap*/


GLfloat light2_diffuse[] =
{0.0, 1.0, 0.0, 1.0}; /* Mengenalpasti ciri-ciri sebaran cahaya berwarna hijau bagi light2 */


GLfloat light2_position[] =
{-1.0, -1.0, 1.0, 0.0}; /* Mengenalpasti kedudukan bagi light2 yang berada pada kedudukan -1.0, -1.0, 1.0, 0.0 pada tetingkap*/
float s = 0.0;


GLfloat angle1 = 0.0, angle2 = 0.0;

void 
output(GLfloat x, GLfloat y, char *text) /* meangisytihar method output dengan parameter x,y,dan text */
{
char *p; /* mengisytihar pembolehubah *p berjenis char */


glPushMatrix(); /* melaksanakan tindanan matriks satu demi satu dan menyalin matriks yang sedang digunakan */

glTranslatef(x, y, 0); /* darab matriks semasa oleh matriks yang diisytiharkan/diterjemahkan pada x, y, dan 0 */
for (p = text; *p; p++)

glutStrokeCharacter(GLUT_STROKE_ROMAN, *p); /* menghasilkan huruf yang dinakan sebagai font stroke yang berbentuk roman */

glPopMatrix(); /* pop stack matriks semasa, menggantikan matriks semasa dengan salah satu di bawahnya pada kumpulan matriks */
}

void 
display(void)
{
static GLfloat amb[] =
{0.4, 0.4, 0.4, 0.0}; /* menetapkan warna kelabu */

static GLfloat dif[] =
{1.0, 1.0, 1.0, 0.0}; /* menetapkan warna putih */


glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
/* menetapkan kawasan bitplane tetingkap kepada nilai-nilai yang dipilih sebelum ini */

/* Menunjukkan buffer yang semasa untuk menulis warna | Menunjukkan kedalaman buffer */

glEnable(GL_LIGHT1); /* membenarkan kegunaan kebolehupayaan bagi GL_LIGHT1 */

glDisable(GL_LIGHT2); /* tidak membenarkan kegunaan kebolehupayaan bagi GL_LIGHT2 */
amb[3] = dif[3] = cos(s) / 2.0 + 0.5;

glMaterialfv(GL_FRONT, GL_AMBIENT, amb); /* menetapkan nilai-nilai untuk parameter yang digunakan iaitu amb */

glMaterialfv(GL_FRONT, GL_DIFFUSE, dif); /* menetapkan nilai-nilai untuk parameter yang digunakan iaitu dif */

glPushMatrix(); /* melaksanakan tindanan matriks satu demi satu dan menyalin matriks yang sedang digunakan */

glTranslatef(-0.3, -0.3, 0.0); /* darab matriks semasa oleh matriks yang diisytiharkan/diterjemahkan pada -0.3, -0.3, 0.0 */

glRotatef(angle1, 1.0, 5.0, 0.0); /* menghasilkan putaran darjah sudut di seluruh vektor pada darjah 1.0, 5.0, 0.0 pada angle1 */

glCallList(1); /* melaksanakan senarai paparan, arahan yang disimpan di dalam senarai paparan dilaksanakan */

glPopMatrix(); /* pop stack matriks semasa, menggantikan matriks semasa dengan salah satu di bawahnya pada kumpulan matriks */

glClear(GL_DEPTH_BUFFER_BIT);
/* menetapkan kawasan bitplane tetingkap kepada nilai-nilai yang dipilih sebelum ini */
/* Menunjukkan kedalaman buffer */

glEnable(GL_LIGHT2); /* membenarkan kegunaan kebolehupayaan bagi GL_LIGHT1 */

glDisable(GL_LIGHT1); /* tidak membenarkan kegunaan kebolehupayaan bagi GL_LIGHT2 */

amb[3] = dif[3] = 0.5 - cos(s * .95) / 2.0; /* operasi pengiraan untuk menetapkan amb & dif */

glMaterialfv(GL_FRONT, GL_AMBIENT, amb); /* menetapkan nilai-nilai untuk parameter yang digunakan iaitu amb */

glMaterialfv(GL_FRONT, GL_DIFFUSE, dif); /* menetapkan nilai-nilai untuk parameter yang digunakan iaitu dif */

glPushMatrix(); /* melaksanakan tindanan matriks satu demi satu dan menyalin matriks yang sedang digunakan */

glTranslatef(0.3, 0.3, 0.0); /* darab matriks semasa oleh matriks yang diisytiharkan/diterjemahkan pada 0.3, 0.3, 0.0 */

glRotatef(angle2, 1.0, 0.0, 5.0); /* menghasilkan putaran darjah sudut di seluruh vektor pada darjah 1.0, 0.0, 5.0 pada angle2 */

glCallList(1); /* melaksanakan senarai paparan, arahan yang disimpan di dalam senarai paparan dilaksanakan */

glPopMatrix(); /* pop stack matriks semasa, menggantikan matriks semasa dengan salah satu di bawahnya pada kumpulan matriks */

glPushAttrib(GL_ENABLE_BIT);
/* mengambil satu pernyataan,  dan membolehkan beberapa pembolehubah disimpan dalam satu kawasan/ruang bagi sesuatu atribut */
/* Membolehkan bit yang boleh ditakrif oleh pengguna */

glDisable(GL_DEPTH_TEST); /* tidak membenarkan perbandingan mendalam dan mengemaskini kedalaman buffer */

glDisable(GL_LIGHTING); /* tidak membenarkan menggunakan parameter pencahayaan semasa mengira warna atau indeks */

glMatrixMode(GL_PROJECTION); 
/* menetapkan mod matriks semasa dengan nilai diaplikasi dengan operasi matriks kepada susunan matrik unjuran */

glPushMatrix(); /* melaksanakan tindanan matriks satu demi satu dan menyalin matriks yang sedang digunakan */

glLoadIdentity(); /* menggantikan matriks dengan matriks identiti */

gluOrtho2D(0, 1500, 0, 1500); /* darab matriks semasa dengan matriks orthographics 2 dimensi pada nilai 0,1500,0,1500 */
glMatrixMode(GL_MODELVIEW); 
/* menetapkan mod matriks semasa dengan nilai diaplikasi dengan operasi matriks kepada susunan paparan model */

glPushMatrix(); /* melaksanakan tindanan matriks satu demi satu dan menyalin matriks yang sedang digunakan */

glLoadIdentity(); /* menggantikan matriks dengan matriks identiti */

glRotatef(4, 0.0, 0.0, 1.0); /* Putaran perkataan pada tetingkap */

output(200, 225, "This is antialiased."); /* Perkataan yang dipaparkan pada tetingkap */

glDisable(GL_LINE_SMOOTH); /* tidak dibenarkan melukis garis dengan penapisan yang betul */

glDisable(GL_BLEND); /* tidak dibenarkan menggabungkan nilai-nilai warna masuk RGBA dengan nilai-nilai dalam warna buffer */

output(160, 100, "This text is not."); /* Perkataan yang dipaparkan pada tetingkap */
glPopMatrix(); 

/* membuang matriks semasa, menggantikan matriks semasa dengan salah satu di bawahnya pada kumpulan matriks */
glMatrixMode(GL_PROJECTION);

/* menetapkan mod matriks semasa dengan nilai diaplikasi dengan operasi matriks kepada susunan matrik unjuran */
glPopMatrix(); 

/* membuang susunan matriks semasa, menggantikan matriks semasa dengan salah satu di bawahnya pada kumpulan matriks */
glPopAttrib(); /* membuang susunan pelayan atribut */
glMatrixMode(GL_MODELVIEW);

/* menetapkan mod matriks semasa dengan nilai diaplikasi dengan operasi matriks kepada susunan paparan model */

glutSwapBuffers(); /* menukar buffer semasa bagi tetingkap seasa jika terdapat dua buffer */
}

void 
idle(void)
{
angle1 = (GLfloat) fmod(angle1 + 0.8, 360.0);
angle2 = (GLfloat) fmod(angle2 + 1.1, 360.0);
s += 0.05;
glutPostRedisplay(); /* menandakan tetingkap semasa sebagai ia perlu di paparkan semula */
}

void 
visible(int vis)
{
if (vis == GLUT_VISIBLE)
glutIdleFunc(idle);
else
glutIdleFunc(NULL); /* menetapkan ketidakbolehgunaan untuk fungsi */
}

int 
main(int argc, char **argv)
{
glutInit(&argc, argv);/*initialize glut*/
/*menetapkan mod paparan (penampan tunggal, RGB (bukan indeks warna, gunakan penampan kedalaman*/
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);

glutCreateWindow("blender"); /* menghasilkan tetingkap */
/ / memanggil glut(DisplayFunc dan lulus ia paparan - fungsi yang dinyatakan di atas
/ / digunakan bila-bila masa membanjiri menentukan tetingkap yang perlu redisplayed

glutDisplayFunc(display); /* memaparkan method 'display' */
glutVisibilityFunc(visible);

glNewList(1, GL_COMPILE);  /* membuat atau menggantikan senarai paparan dan arahan dikompil(compile) */

glutSolidIcosahedron(); /* memilih icosahedron(20 bahagian solid biasa) yang solid secara teratur */

glEndList(); /* membuat atau menggantikan senarai paparan */

glEnable(GL_LIGHTING); /* membenarkan kegunaan kebolehupayaan bagi pencahayaan */

glEnable(GL_LIGHT0); /* membenarkan kegunaan kebolehupayaan bagi GL_LIGHT0 */

glLightfv(GL_LIGHT0, GL_AMBIENT, light0_ambient); /* menetapkan parameter sumber pencahayaan ambient pada light0 */

glLightfv(GL_LIGHT0, GL_DIFFUSE, light0_diffuse); /* menetapkan parameter sumber pencahayaan diffuse pada light0 */

glLightfv(GL_LIGHT1, GL_DIFFUSE, light1_diffuse); /* menetapkan parameter sumber pencahayaan diffuse pada light1 */

glLightfv(GL_LIGHT1, GL_POSITION, light1_position); /* menetapkan parameter posisi sumber pencahayaan  pada light1 */

glLightfv(GL_LIGHT2, GL_DIFFUSE, light2_diffuse); /* menetapkan parameter sumber pencahayaan diffuse pada light2 */

glLightfv(GL_LIGHT2, GL_POSITION, light2_position); /* menetapkan parameter posisi sumber pencahayaan  pada light2 */

glEnable(GL_DEPTH_TEST); /* membenarkan perbandingan mendalam dan mengemaskini kedalaman buffer */

glEnable(GL_CULL_FACE); /* membenarkan pemotongan poligon berdasarkan putaran dalam koordinat tetingkap */ 

glEnable(GL_BLEND); /* membenarkan menggabungkan nilai-nilai warna masuk RGBA dengan nilai-nilai dalam warna buffer */

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); /* menetapkan piksel aritmetik */

glEnable(GL_LINE_SMOOTH); /* membenarkan melukis garis dengan penapisan yang betul */

glLineWidth(2.0); /* melukis panjang garisan pada koordinat 2.0 */

glMatrixMode(GL_PROJECTION); 
/* menetapkan mod matriks semasa dengan nilai diaplikasi dengan operasi matriks kepada susunan matrik unjuran */
gluPerspective( /* darjah paparan objek pada tetingkap */ 40.0,

/* nisbah aspek objek */ 1.0
    /* Z near */ 1.0, /* Z far */ 10.0);
glMatrixMode(GL_MODELVIEW);
/* menetapkan mod matriks semasa dengan nilai diaplikasi dengan operasi matriks kepada susunan paparan model */
gluLookAt(0.0, 0.0, 5.0,  /* pandangan pada sudut (0,0,5) */

0.0, 0.0, 0.0,      /* tengah pada sudut (0,0,0) */

0.0, 1.0, 0.0);      /* menaik pada arah Y yang positif */

glTranslatef(0.0, 0.6, -1.0); /* darab matriks semasa oleh matriks yang diisytiharkan/diterjemahkan pada 0.0, 0.6, -1.0 */

glutMainLoop();
return 0;             /* ANSI C memerlukan main untuk return int. */
}