Grafika Komputer

Membuat Bonekah Salju Pada Open-GL

#include <stdlib.h>
#include <glut.h>

int w=400, h=400, z=0;
int x1=0, y1=0, sudut=0, z1=0, skalaX=0, skalaY=0;

void renderScene(void){
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        //glClearColor(1,1,1,1);
        glLoadIdentity();
        glTranslatef(0,0,z);
        glRotatef(sudut,x1,y1,z1);
        glPushMatrix();
        glTranslatef(0,-5,0);
        glColor3f(1,1,1);
        glutWireSphere(4,200,50);
        glPopMatrix();
        glPushMatrix();
        glTranslatef(0,0,0);
        glColor3f(1,1,1);
        glutWireSphere(3,200,50);
        glPopMatrix();
        glPushMatrix();
        glTranslatef(0,4,0);
        glColor3f(1,1,1);
        glutWireSphere(2,200,50);
        glPopMatrix();
        glPushMatrix();
        glTranslatef(0,4,0);
        glColor3f(1,0,0);
        glutWireCone(1,3,200,50);
        glPopMatrix();
        glPushMatrix();
        glTranslatef(1,4.5,2);
        glColor3f(0,0,0);
        glutWireSphere(0.1,200,50);
        glPopMatrix();
        glPushMatrix();
        glTranslatef(-1,4.5,2);
        glColor3f(0,0,0);
        glutWireSphere(0.1,200,50);
        glPopMatrix();
        glPushMatrix();
        glTranslatef(0,5,0);
        glRotatef(-90,1,0,0);
        glColor3f(0,0,1);
        glutWireCone(2,4,200,50);
        glPopMatrix();
        glutSwapBuffers();
}

void resize(int w1,int h1){
        glViewport(0,0,w1,h1);
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        gluPerspective(45.0,(float) w1/(float) h1, 1.0,300.0);
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
}

void myKeyboard(unsigned char key, int x, int y){
        if (key =='a') z+=5;
        else if (key == 'd') z-=5;
        else if (key == 'x') {
                x1=1;
                y1=0;
                z1=0;
                sudut+=10;
        }
        else if (key == 'y') {
                y1=1;
                x1=0;
                z1=0;
                sudut+=-10;
        }
        else if (key == 'z') {
                y1=0;
                x1=0;
                z1=1;
                sudut+=-10;
       }
}

void mySpecialKeyboard(int key, int x, int y){
       switch(key){                             
              case GLUT_KEY_UP:
              z+=5;
              break;
              case GLUT_KEY_DOWN:
              z-=5;
              break;
       }
}

void init(){
        glClearColor(0,0,0,1);
        glEnable(GL_DEPTH_TEST);
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        gluPerspective(45.0,(GLdouble) w/(GLdouble) h, 1.0,300.0);
        glMatrixMode(GL_MODELVIEW);
}

void timer(int value){
        glutPostRedisplay();
        glutTimerFunc(50,timer,0);
}

void main (int argc, char **argv){
        glutInit(&argc, argv);
        glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGBA);
        glutInitWindowPosition(100,100);
        glutInitWindowSize(w,h);
        glutCreateWindow("3D");
        gluOrtho2D(-w/2,w/2,-h/2,h/2);
        glutDisplayFunc(renderScene);
        glutReshapeFunc(resize);
        glutKeyboardFunc(myKeyboard);
        glutSpecialFunc(mySpecialKeyboard);
        glutTimerFunc(1,timer,0);
        init();
        glutMainLoop();
}

Hasilnya :

Penjelasan Program:
Program diatas berfungsi untuk membuat object menyerupai “Manusi Salju” yang dimana object tersebut terbentuk dari susunan beberapa bangun. Yaitu seperti bangun untuk badan object dengan menggunaka fungsi glutWireSphere dan bangun kerucut untuk hidung dan topi object dengan menggunakan fungsi flutWireCone. Object tersebut dapat bergerak dengan menggunakan fungsi keyboard. Jika menean tombol “a” maka object akan mengezoom, jika ditekan tombol “d” maka tombol akan mengecil, jika ditekan tombol “x” maka object akan memutar seluruh badan manusia salju dari arah atas kebawah, untuk tombol “y” jika ditekan maka akan memutar seluruh badan object kearah samping. Sedangkan untuk tombol “z” jika ditekan maka object akan berputar searah jarum jam.




Komentar