Download as pdf or txt
Download as pdf or txt
You are on page 1of 2

5

HAFTA 13
Şimdi 3B çokgeni klavye ile hareket ettirip üzerinde dönüşümler yapalım:

#include <GL/glut.h> void Ayarlar(void)


{// Kendi OpenGL Ayarlarımız
float xgotur = 0, ygotur = 0, zgotur = 0; glClearColor(0.0, 1.0, 1.0, 1.0); /*penceremizin
int en = 300, boy = 300; arka alan rengidir; aslında ekranın hangi renkle
float derece = 0;//sağa sola döndürürken lazım temizleneceğini belirtir.*/
float xolcek = 1, yolcek = 1, zolcek = 1; glShadeModel(GL_FLAT);
glPolygonMode(GL_FRONT_AND_BACK,
void gotursag(void) GL_FILL);//GL_LINE
{ }
glLoadIdentity();//koordinat sistemimiz
etkilenmesin
xgotur += 0.1; void klavye(int dugme, int x, int y)
} {//yalnız özel işlev tuşlarını kullanabiliriz-->F1,
Insert, ok tuşları gibi
void gotursol(void) switch (dugme)
{ {
glLoadIdentity(); case GLUT_KEY_LEFT:gotursol(); break;
xgotur -= 0.1; case GLUT_KEY_RIGHT:gotursag(); break;
} case GLUT_KEY_UP:goturyuk(); break;
case GLUT_KEY_DOWN:goturas(); break;
void goturyuk(void) case GLUT_KEY_PAGE_UP:goturil(); break;
{ case GLUT_KEY_PAGE_DOWN:goturger(); break;
glLoadIdentity(); }
ygotur += 0.1; glutPostRedisplay();//hareket(işlem) sonrası
} güncelleme için
}
void goturas(void)
{ void klavye(unsigned char dugme, int x, int y)
glLoadIdentity(); {//yalnız karakter tuşlarını kullanabiliriz
ygotur -= 0.1; switch (dugme)
} {
case 'a':yanuzat(); break;
void goturil(void) case's':boyuzat(); break;
{ case'z':cevirsol(); break;
glLoadIdentity(); case'x':cevirsag(); break;
zgotur -= 0.1; }
} glutPostRedisplay();//hareket(işlem) sonrası
güncelleme için
void goturger(void) }
{
glLoadIdentity();
zgotur += 0.1;
}

void yanuzat(void)
{
glLoadIdentity();
xolcek += 0.1;
}

void boyuzat(void)
{
glLoadIdentity();
yolcek += 0.1;
}

void cevirsag(void)
{
glLoadIdentity();
derece += 0.5;
}

void cevirsol(void)
{
glLoadIdentity();
derece -= 0.5;
}

1
void Cokgen(void) void GorunumAyari(int en, int boy)
{ {//GorunumAyari Reshape() diye geçer dökümanlarda
glColor3f(1.0, 0.0, 0.0); glViewport(0, 0, en, boy); //Bir pencere
glTranslatef(xgotur, ygotur, zgotur); oluştururken pencerenin enini boyunu başlangıç noktasını
glRotatef(derece, 0.0, 1.0, 0.0); belirlemekteyiz örneğin (x,y,width,height) bu sistem
glScalef(xolcu, yolcu, zolcu); pencere oluşturmak için kullanılan koordinat sistemidir
glBegin(GL_QUADS); başlangıcı ekranın sol üst köşedir(0,0).
glVertex3f(-0.4, 0.3, 0.1);//önyüz
glVertex3f(0.4, 0.3, 0.1); glMatrixMode(GL_PROJECTION); // projeksiyon
glVertex3f(0.4, -0.3, 0.1); (izdüşüm) matrisi. izdüşüm görünümüne ayarlamak için
glVertex3f(-0.4, -0.3, 0.1); glLoadIdentity();Orjinal Duruma dönülür (Reset)
glEnd(); gluPerspective(90, (float)en / (float)boy, 1.0,
glBegin(GL_QUADS); 200.0); // gluPerspective (theta, aspect, dnear, dfar)
glVertex3f(-0.4, 0.3, -0.1); Bu fonksiyondaki theta perspektifin yaptığı dönüş açısını,
//solyanyüz aspect en/boy oranını, dnear ve dfar ise sırasıyla yakın
glVertex3f(-0.4, 0.3, 0.1); ve uzak perspektif panellerine olan uzaklığı vermektedir.
glVertex3f(-0.4, -0.3, 0.1);
glVertex3f(-0.4, -0.3, -0.1); //0-180 arası olacak.Nesneye ne kadar yakınsak o kadar dar
glEnd(); açı olmalı, ne kadar uzaksak o kadar geniş açı olmalı
glBegin(GL_QUADS); //(float)en/(float)boy --> tam ekran yapıldığında
glVertex3f(-0.4, 0.3, -0.1);//arkayüz bozulmasın diye //1.0 kameranın modele(çokgene) en yakın
glVertex3f(0.4, 0.3, -0.1); olabileceği yer //20.0 kameranın modele(çokgene) en uzak
glVertex3f(0.4, -0.3, -0.1); olabileceği yer
glVertex3f(-0.4, -0.3, -0.1);
glEnd(); glMatrixMode(GL_MODELVIEW); /* Kameranın pozisyonu
glBegin(GL_QUADS); ve cisimlerin 3D geometrisi ile ilgili çizme, görüntüleme,
glVertex3f(0.4, 0.3, -0.1); //sağyanyüz konumlandırma ve yönlendirme işlemlerinden önce
glVertex3f(0.4, 0.3, 0.1); matrislerin hangi işlem için düzenleneceği
glVertex3f(0.4, -0.3, 0.1); belirtilmelidir:
glVertex3f(0.4, -0.3, -0.1); bu örnekte -->model-view matrisi kulanılıyor*/
glEnd(); }
glBegin(GL_QUADS); int main(int argc, char** argv)
glVertex3f(-0.4, 0.3, 0.1);//üstkapak {
glVertex3f(0.4, 0.3, 0.1); glutInit(&argc, argv); // GLUT'u başlat
glVertex3f(0.4, 0.3, -0.1); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);//çift
glVertex3f(-0.4, 0.3, -0.1); tampon
glEnd(); glutInitWindowSize(en, boy);
glBegin(GL_QUADS); glutInitWindowPosition(0, 0);
glVertex3f(0.4, -0.3, 0.1);//altkapak glutCreateWindow("Hareket ettirme");
glVertex3f(-0.4, -0.3, 0.1); Ayarlar();// Kendi OpenGL Ayarlarımız
glVertex3f(-0.4, -0.3, -0.1); glutReshapeFunc(GorunumAyari); Eğer pencere
glVertex3f(0.4, -0.3, -0.1); yeniden boyutlandırılırsa yeni genişlik ve yükseklik
glEnd(); değerleri atanır.
} glutDisplayFunc(CizimFonksiyonu); // kendisine
void CizimFonksiyonu(void) parametre olarak gönderilen Display fonksiyonu çağırır ve
{/* Pencere yeniden boyama fonksiyonu çizimi yapar
oluşturuyoruz. Pencere ilk görüntülendiğinde ve glutSpecialFunc(klavye);//karakter tuşlarını
pencerenin yeniden boyanması gerektiğinde kullanmak için
çağrılır. */ glutKeyboardFunc(klavye);//özel işlev tuşlarını
glClear(GL_COLOR_BUFFER_BIT); kullanmak için
glLoadIdentity(); glutMainLoop();// çizimi döngüye sokar.
gluLookAt(0.0, 0.0, 2.0, 0.0, 0.0, 0.0, return 0;}
0.0, 1.0, 0.0);
//gluLookAt(x0, y0, z0, x1, y1, z1, x2,
y2, z2,);
//x0, y0, z0 kameranın sabitleneceği yer.
//x1, y1, z1 kamera yönlendirme. Yönümüz
orijin.
//x2, y2, z2 kamera tutma. kameramız Y-
ekseninde dik duruyor.
Cokgen();
glutSwapBuffers();/*Çerçeveyi çizdikten
sonra Ön ve arka tamponlar değişir. Burada, biri
gösterilen diğeri gizlenen, çift tampon modunda
pencere kullanıyoruz. Bu durumda OpenGL
komutlarının görüntülenmesi daima gizli tampon
içine yapılır. glutSwapBuffers, çağrıldığında,
tamponları değiştokuş ederek çizileni pencere
içinde görüntüler. Tercih edilmesinin nedeni,
çerçeve içeriğinin satır satır oluşumunu insan
gözünden saklamasıdır*/
}

You might also like