LAB. İŞLEM SIRASI:

 

 

1)      Kurulum Testi ve Hazır Örnek Çalıştırılması : Bilgisayar Grafikleri Ders Notları (http://yzgrafik.ege.edu.tr/~ugur/11_12_Spring/CG/EkDers/OpenGL_01.rar) içerisinden DERS_05_OPENGL_2006_v2.pdf sayfa 24’teki örneği kopyalayıp çalıştırınız.

 

2)      Aşağıdaki kodu kopyalayıp (veya yazıp) çalıştırınız :

 

#include "stdafx.h"

#include <GL/glut.h>

#include <math.h>

 

GLsizei w=400,h=400;

float x=1, y=1;

int aci=0;

 

void init(void)

{

  glClearColor(0.0,0.0,1.0,0.0); // Ekran Temizleme Rengi Mavi

 

  glMatrixMode(GL_PROJECTION);

  gluOrtho2D(0.0,GLdouble(w),0.0,GLdouble(h));

}

 

 

void tankCiz(float wt, float ht) // veya Scalef

{

double M_PI = 3.1415;

double angle;

      glBegin (GL_POLYGON);

          glColor3f(0.0,1.0,0.0);

          for (int j=0; j<8; j++) {

              angle = (2*M_PI)*j/8+M_PI/8.0;

              glVertex2f (wt*cos(angle), ht*sin(angle));

            }

    glEnd();

}

 

 

void display()

{

  glClear(GL_COLOR_BUFFER_BIT);

  glMatrixMode(GL_MODELVIEW);

  glLoadIdentity();

 

 

      glTranslatef(x*5+80.0,20.0,0.0);

      tankCiz(80,20);

      glTranslatef(0.0,25.0,0.0);

      tankCiz(25,10);

      glTranslatef(20,0.0,0.0);

      glRotatef(aci,0.0,0.0,1.0);

 

      glBegin (GL_POLYGON);

      glColor3f(1.0,1.0,0.0);

      glVertex2f (0,-3);

      glVertex2f (0,3);

      glVertex2f (50,3);

      glVertex2f (50,-3);

    glEnd();

 

      glutSwapBuffers();

}

 

void reshape(GLint newWidth, GLint newHeight)

{

  glViewport(0,0,newWidth,newHeight);

  glMatrixMode(GL_PROJECTION);

  glLoadIdentity();

  gluOrtho2D(0.0,GLdouble(newWidth),0.0,GLdouble(newHeight));

  w = newWidth; h = newHeight;

  glutPostRedisplay();

}

 

 

void klavye2(GLint key, int xM, int yM) //

{

  switch(key)

  {

  case GLUT_KEY_LEFT : x--; break;

  case GLUT_KEY_RIGHT: x++; break;

  case GLUT_KEY_UP   : aci++; break;

  case GLUT_KEY_DOWN : aci--; break;

  }

  glutPostRedisplay();

}

 

void main(int argc, char *argv[])

{

  glutInit(&argc,argv);

  glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); //

  glutInitWindowPosition(100,100);

  glutInitWindowSize(w,h);

  glutCreateWindow("Labirent"); //

 

  init();

  glutDisplayFunc(display);

  glutReshapeFunc(reshape);

  glutSpecialFunc(klavye2);

 

  glutMainLoop();

}

 

3)      Timer ile Tankı otomatik hareket ettiren kodu yazınız. İleri geri gitmesini ve namlusunun açısını da otomatik değiştiriniz.

[Timer kullanmak için DERS_07_OPENGL_PACMAN_GAME.PDF dosyasındaki speed fonksiyonundan yararlanınız]

 

 

ALIŞTIRMALAR

 

 

1)      OpenGL kullanarak Ağaç ve ev oluşturan esnek fonksiyonlar yazınız. Değişik dönüşümlerden geçirerek aşağıdaki resmi oluşturunuz. 

 

 

2)      Üç Boyutlu Küp, Çaydanlık, Dörtyüzlü, Simit gibi hazır şekilleri oluşturarak, üzerlerinde etkileşimli olarak döndürme, taşıma ve ölçeklendirme yapabilecek biçimde tuşlar tanımlayınız. Şekiller üzerinde formüller geliştirerek animasyonlar yaptırınız.

 

3)      Geçmiş senelerin lab. örneklerini deneyiniz.