Lighting pada Open GL [Komputer Grafik]

Ilmu Informatika : Lighting pada Open GL [Komputer Grafik]. Pada postingan kali ini kita akan sedikit belajar mengenai lighting atau pencahayaan pada OPEN GL. Pencahayaan merupakan bagian yang sangat vital dalam pembuatan program 3 Dimensi (3D). Efek cahaya sedikit saja memiliki arti tersendiri dalam sebuah 3D. Pencahayaan merupakan esensi dari visualisasi dan merupakan topik yang sangat kompleks. Hingga tahap ini lingkungan diberi pencahayaan default/standar dengan cahaya lingkungan (ambient) yang sama pada setiap titik. Kondisi default/standar dapat dicapai kapan saja dengan mematikan status Lighting menjadi disabled dengan glDisable(GL_LIGHT0).

Dalam pencahayaan, ada dua hal yang menentukan tampilan suatu obyek, yaitu:
1. Sumber cahaya dan pengaruh lingkungan terhadap cahaya
a. Lokasi sumber cahaya
b. Arah pencahayaan dari sumber cahaya (omni, spot)
c. Komponen pengaruh lingkungan terhadap cahaya (ambient, diffuse, specular)

2. Material dari obyek, yang memodelkan bagaimana material bereaksi terhadap sumber cahaya, yaitu:
a. Material reflektan terhadap komponen cahaya ambient
b. Material reflektan terhadap komponen cahaya diffuse
c. Material reflektan terhadap komponen cahaya specular
d. Material sebagai sumber cahaya (emitance)

Komponen ambient adalah cahaya yang arahnya tidak dapat ditentukan karena datang secara merata dari segala arah. Biasanya merupakan cahaya yang dihasilkan dari pemantulan berkali-kali sumber cahaya yang berarah. Poligon dalam openGL selalu diiluminasi secara seragam oleh komponen ambient tanpa memperdulikan orientasi dan posisinya. Komponen diffuse adalah cahaya yang bersumber dari satu arah dan mempengaruhi poligon secara uniform bergantung pada sudut datang terhadap permukaan poligon. Komponen specular adalah cahaya yang memantul dari obyek pada arah tertentu saja, yang bergantung pada derajat inklinasi dari poligon terhadap cahaya dan posisi observer. efek specular sering digunakan untuk memberikan kesan mengkilap (shininess).

Untuk Source codenya adalah sebagai berikut:


#include <GL/glut.h>
#include <stdlib.h>
int specularLightstatus = 1;
int ambientLightStatus = 1; //kalo gagal coba diganti -> bool ambientLightStatus = true;
void init(void);
void display(void);
void keyboard(unsigned char key, int x, int y);
void reshape(int w, int h);
int main(int argc, char** argv)
{
   glutInit(&argc, argv);
   glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
   glutInitWindowSize (500, 500);
   glutInitWindowPosition (100, 100);
   glutCreateWindow ("Lighting");
   init();
   glutDisplayFunc(display);
   glutReshapeFunc(reshape);
   glutKeyboardFunc(keyboard);
   glutMainLoop();
   return 0;
}
/*  Initialize material property, light source, lighting model,
 *  and depth buffer.
 */
void init(void)
{
   GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 };
   GLfloat mat_shininess[] = { 50.0 };
   GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 };
   glClearColor (0.0, 0.0, 0.0, 0.0);
   glShadeModel (GL_SMOOTH);
   glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
   glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);
   glLightfv(GL_LIGHT0, GL_POSITION, light_position);
   glEnable(GL_LIGHTING);
   glEnable(GL_LIGHT0);
   glEnable(GL_DEPTH_TEST);
}
void display(void)
{
   glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
   glutSolidSphere (1.0, 20, 16);
   glFlush ();
}
void reshape (int w, int h)
{
   glViewport (0, 0, (GLsizei) w, (GLsizei) h);
   glMatrixMode (GL_PROJECTION);
   glLoadIdentity();
   if (w <= h)
      glOrtho (-1.5, 1.5, -1.5*(GLfloat)h/(GLfloat)w,
         1.5*(GLfloat)h/(GLfloat)w, -10.0, 10.0);
   else
      glOrtho (-1.5*(GLfloat)w/(GLfloat)h,
         1.5*(GLfloat)w/(GLfloat)h, -1.5, 1.5, -10.0, 10.0);
   glMatrixMode(GL_MODELVIEW);
   glLoadIdentity();
}
void keyboard(unsigned char key, int x, int y)
{
   switch (key) {
      case 27:
         exit(0);
         break;
      case 'O':
      case 'o':
         if(specularLightstatus == 1)
         {
            glDisable(GL_LIGHTING);
            glutPostRedisplay();
            specularLightstatus = 0;
         }
         else
         {
             glEnable(GL_LIGHTING);
             glutPostRedisplay();
             specularLightstatus = 1;
         }
         break;
      case 'p':
      case     'P':
           if(ambientLightStatus == true)
         {
            glDisable(GL_LIGHT0);
            glutPostRedisplay();
            ambientLightStatus = false;
         }
         else
         {
             glEnable(GL_LIGHT0);
             glutPostRedisplay();
             ambientLightStatus = true;
         }
         break;
   }
} 
Demikian artikel mengenai Lighting pada Open GL [Komputer Grafik]. Semoga bermanfaat untuk sobat semua.
Nikmati Jasa & Layanan yang ada di www.isrul.com, diantaranya:
1. Jasa Pembuatan dan Verifikasi Akun Paypal dengan VCC (Valid 2 atau 3 Tahun)
2. Jual Akun Adsense Non Hosted Indonesia (0899-5832-699)
3. Penulis Tamu di Isrul.com

0 Response to "Lighting pada Open GL [Komputer Grafik]"

Post a Comment

Jika anda bertanya, jangan lupa mencentang "Notify Me" di bagian kanan bawah, agar mendapat pemberitahuan jika pertanyaan anda telah kami jawab.
Terimakasih telah menyempatkan waktu berkomentar...