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();
}