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;
}
}
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.