16 Nisan 2013 Salı

Opengl Uçan Çaydanlık Animasyonu c++


#include <GL/glut.h>


double x, y, z;           // mevcut çaydanlık pozisyonu (main'de başlatılıyor)

/* Görüntüleme fonksiyonu */
void display () {

    /* Pencereyi temizle */
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    /* Transform martisi türünü belirle */
    glMatrixMode(GL_MODELVIEW);

    /* Görüntüyü çiz */
    glPushMatrix();
    glTranslatef(x,y,z);
    glutWireTeapot(.5);
    glPopMatrix();

    /* OpenGL fonksiyonlarını sınırlı sürede çalışmaya zorlar */
    glFlush();
}
/* Animasyon fonksiyonu */
void animate () {

    /* Durum değişkenlerini güncelle */
    x += .001;
    y += .001;
    z -= .001;

    /* ekranı yenile */
    glutPostRedisplay();
}

void reshape ( int width, int height ) {

    /* viewport transformasyonunu tanımla */
    glViewport(0,0,width,height);

}

/* Ana Fonksiyon */
int main ( int argc, char * argv[] ) {

    /*  GLUT'u ilgili parametreleri kullanarak başlat */
    glutInit(&argc,argv);

    /* setup the size, position, and display mode for new windows */
   /* boyut, pozisyon ve görüntüleme modu için yeni pencereleri ayarla */
    glutInitWindowSize(500,500);
    glutInitWindowPosition(0,0);
    glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH);

    /* Uçan Çaydanlık başlında yeni bir pencere oluştur */
    glutCreateWindow("Uçan Çaydanlık");
    glutDisplayFunc(display);  // görüntüleme fonksiyonu
    glutReshapeFunc(reshape);   // pencerenin boyutu değiştiğinde meydana gelir.
    glutIdleFunc(animate);  /* boş fonksiyon yani herhangi bir olay meydana gelmediğinde oluşur animasyonlarda etkilidir */

    /* depth-buffering */
    glEnable(GL_DEPTH_TEST);

    /* Projeksiyon transformasyonunu tanımla */
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glFrustum(-1.0,1.0,-1.0,1.0,.5,3.0);

    /* görüntüleme transformasyonunu tanımla */
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    gluLookAt(1.0,1.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0);

    /* durum değişkenlerine başlangıç değerlerini ata (çaydanlık pozisyonu) */
    x = 0;
    y = 0;
    z = 0;

    /*  GLUT'u olayları bekletmek için çağırır */
    glutMainLoop();
}