Professional Documents
Culture Documents
BG PDF 15 1
BG PDF 15 1
HAFTA 13
Şimdi 3B çokgeni klavye ile hareket ettirip üzerinde dönüşümler yapalım:
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*/
}