Lighting

Selasa, 04 Desember 2012

Lighting atau pencahayaan adalah tekhnik memberikan efek cahaya pada suatu objek. Dua komponen dasar lighting tidak lain dan tidak bukan adalah cahaya dan material.

Nah, ini ada codingan lighting menggunakan library glut dpt dr pratikum komgraf tempo laluu..mangga dicobaa


 #include <stdlib.h>
#include <GL/glut.h>
/* Initialize z-buffer, projection matrix, light source,
* and lighting model. Do not specify a material property here.
*/
GLfloat angle =0.0;

GLfloat redDiffuseMaterial[]={1.0,0.0,0.0};
GLfloat whiteSpecularMaterial[]={1.0,1.0,1.0};
GLfloat greenEmissiveMaterial[]={0.0,1.0,0.0};
GLfloat whiteSpecularLight[]={1.0,1.0,1.0};
GLfloat blackAmbientLight[]={0.0,0.0,0.0};
GLfloat whiteDiffuseLight[]={1.0,1.0,1.0};
GLfloat blankMaterial[]={0.0,0.0,0.0};
GLfloat mShininess[]={128};

bool diffuse =false;
bool emissive =false;
bool specular =false;

void init (void)
{
     glEnable (GL_DEPTH_TEST);
     glEnable (GL_LIGHTING);
     glEnable (GL_LIGHT0);
     }
   
     void light (void)
     {
          glLightfv(GL_LIGHT0,GL_SPECULAR,whiteSpecularLight);
          glLightfv(GL_LIGHT0,GL_AMBIENT,blackAmbientLight);
          glLightfv(GL_LIGHT0,GL_DIFFUSE,whiteDiffuseLight);
          }
     void display (void)
     {
          glClearColor (0.0,0.0,0.0,1.0);
          glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
          glLoadIdentity();
          light();
          glTranslatef(0,0,-5);
         
          glRotatef(angle,1,1,1);
         
          glutSolidTorus(0.5,1,16,16);//bs dganti dgn bntuk lainnya (ex:glutSolidTeapot)
          glutSwapBuffers();
          angle +=0.01;//mengukur kecepatan rotasi
         
}
void reshape (int w, int h){
     glViewport (0,0,(GLsizei)w,(GLsizei)h);
     glMatrixMode (GL_PROJECTION);
     glLoadIdentity();
     gluPerspective (60,(GLfloat)w / (GLfloat)h , 1.0, 100.0);
     glMatrixMode (GL_MODELVIEW);
     }
   
     void keyboard (unsigned char key, int x, int y){
     if(key=='s')
     {
                 if(specular==false)
                 {
                 specular = true;
                 glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,whiteSpecularLight);
                 glMaterialfv(GL_FRONT_AND_BACK,GL_SHININESS,mShininess);
                 }
     else if( specular==true)
     {
          specular= false;
          glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,blankMaterial);
          glMaterialfv(GL_FRONT_AND_BACK,GL_SHININESS,blankMaterial);
          }
          }
         
          if (key='d')
          {
          if(diffuse == false)
          {
          diffuse=true;
          glMaterialfv(GL_FRONT_AND_BACK,GL_DIFFUSE,redDiffuseMaterial);
          }
          else if (diffuse==true)
          {
               diffuse=false;
               glMaterialfv(GL_FRONT_AND_BACK,GL_DIFFUSE,blankMaterial);
               }
               }
          if(key='e')
               {
          if (emissive==false)
          {
                              emissive=true;
                              glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,greenEmissiveMaterial);
                              }
                              else if (emissive=true)
                              {
                              emissive =false;
                              glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSION,blankMaterial);
                              }
                              }
                              }
     int main(int argc, char **argv){
         glutInit (&argc,argv);
         glutInitDisplayMode (GLUT_DOUBLE | GLUT_DEPTH);
         glutInitWindowSize(500,500);
         glutInitWindowPosition(100,100);
         glutCreateWindow("A basic OpenGL Window");
         init();
         glutDisplayFunc (display);
         glutIdleFunc (display);
         glutKeyboardFunc(keyboard);
         glutReshapeFunc(reshape);
         glutMainLoop();
         return 0;
         }





0 komentar :

Posting Komentar