Norfatinaqilah89
12 Oktober 2011 telah menyertai
OpenGL
sunting-
blender
#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. */
}