20 Nisan 2014 Pazar

Kamera Analojisi

Kamera Analojisi


Geometrik nesnelerin çizimini örgendik şimdi bu nesnelerin 3 boyutlu alanda kamera açısı ve bulunacagı yerleri belirlemeyi ögrenicegiz.Örnegin aşşagıdaki resimdede görüldügü gibi her model farklı bir konumdadır bazıları masanın üzerinde bazıları yerde birde kameranın bakış açısı var , Daha önceki makalelerde bu iş biraz ressamlıga benzediginden bahsetmiştim .


Resmin yansıtılması 3 temel kurala dayalıdır.


1. Dönüşüm, Matriks çarpımları ile modelleme, denetleme, ve planlama işlemlerini içerir.Bu gibi işlemler
rotasyon, dönüşüm, ölçeklendirme, yansıtma, ortografik planlama ve perspektif planlamayı içerir. Genellikle,
tabloyu çizmek için bir çok dönüşümün birleşimi kullanılabilir.

2.Kırpma,Pencere oluşturuldugunda pencerenin dışında kalan nesneler ( yada nesnelerin parçaları) kesilmek zorundadır. Bu işleme Üç boyutlu düzlemde kırpma adı verilir.

3.Görüş alanı dönüşümü
Bu kurallar yazılarım içersinde incelenecektir.
3 Boyutlu duzlemde çizim yapabilmek için kamera tekniklerini iyi bilmemiz gerekmektedir bunun için kamera nın nasıl çalıştıgını anlamalıyız.
Kamera Analojisi

Openglde kamera kullanımı genel olarak fotoraf makinası kullanmaya benzer .
Bu kullanım 4 temel kurala dayalıdır.







1.Tripodunuzu kurun ve kameranızı tabloya ye
rleştirin (görüş dönüşümü).









2.İstenen kompozisyonda fotograflanması istenen tabloyu düzenleyin (modelleme dönüşümü).








3.Kamera lensini seçin yada odağı ayarlayın (gösterim dönüşümü).








4.Son fotografın ne kadar büyüklükte olmasını istediğinize karar verin—örneğin, onu büyütebilmek isteyebilirsiniz (görüş alanı dönüşümü).
Bu işlemlerin birde Bilgisayar tabanlı gerçekleştire biliriz.
1.Tripodunuzu kurun ve kameranızı tabloya yerleştirin (görüş dönüşümü).
1.Görüş dönüşümü

2.İstenen kompozisyonda fotograflanması istenen tabloyu düzenleyin (modelleme dönüşümü).
3.Kamera lensini seçin yada odağı ayarlayın (gösterim dönüşümü).
4.Son fotografın ne kadar büyüklükte olmasını istediğinize karar verin—örneğin, onu büyütebilmek isteyebilirsiniz (görüş alanı dönüşümü).
Bu işlemleri uyguladıktan sonra resim çekebilir veya tablonuzu çize bilirsiniz.

Bu şekilde kamera olaylarının temeleri belirlenmektedir.Şuna dikkat edilmelidirki görüş dönüşümleri model dönüşümlerinden önce gelmelidir,ancak izdüşüm ve görüş alanı dönüşümleri çizim oluşmadan önce belirlene bilir.Bu işlemlerin genel oluşum tablosu şu şekildedir.













Örnek Kup
#include<GL/glut.h>



void init(void)

{

glClearColor(0.0, 0.0, 0.0, 0.0);

glShadeModel(GL_FLAT);

}



void display(void)

{

glClear(GL_COLOR_BUFFER_BIT);

glColor3f(1.0, 1.0, 1.0);





glLoadIdentity(); /* Matrixler temizleniyor */

gluLookAt(0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); /* Görüş dönüşümü */

glScalef(1.0, 2.0, 1.0); /* model dönüşümü */

glutWireCube(1.0);

glFlush();

}



void reshape(int w, int h)

{

glViewport(0, 0, (GLsizei) w, (GLsizei) h);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

glFrustum(-1.0, 1.0, -1.0, 1.0, 1.5, 20.0);

glMatrixMode(GL_MODELVIEW);

}



int main(int argc, char** argv)

{

glutInit(&argc, argv);

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);

glutInitWindowSize(500, 500);

glutInitWindowPosition(100, 100);

glutCreateWindow("OpenGLTurk");

init();

glutDisplayFunc(display);

glutReshapeFunc(reshape);

glutMainLoop();

return 0;

}
Görüş dönüşümü(viewing transformation)
Kup programında görüş dönüşümü yerleştirilmeden önce glLoadIdentity()ile kimlik matrix i oluşturulmaktadır,glLoadIdentity ,dönüşüm komutlarınının güncel matris ile belirlenen matris tarafından çoğaltıldığından gereklidir.Eğer kimlik(glLoadIdentity) matrisi yükleyerek güncel matrisi temizlemezseniz, önceki dönüşüm matrislerini yeni temin edilenlerden biri ile birleşir bu gibi durumlarda birleştirmeleri uygulamak istemiye bilirsiniz matrisi temizlemeye ihtiyacınız olur.
Kimlik matrixi oluşturulduktan sonra görüş dönüşümü gluLookAt ile belirlenmiştir.gluLookAt Fonksiyonu kameranın yada görüş pozinyonunu nereye yerleştirildiğini, ne amaçlandığını ve hangi yönde olduğunu gösterir. Burada kullanılan argümanlar kamerayı (0, 0, 5) e yerleştirir, (0, 0, 0) a doğru kamera lensini tutar, ve üst vektörü (0, 1, 0) olarak belirler. Üst vektör kamera için bir tek yönlenmeyi tanımlar.
Modelleme Dönüştürümü(The Modeling Transformation)
Modelleme dönüştürümünü modeli yerleştirmek ve yönlendirmek için kullanırsınız. Örneğin, modeli döndürmek, çevirmek, yada ölçeklendirmek -- yada bu işlemlerin bazı birleşimlerini uygulayabilirsiniz. küp programında glScalef() kullanılan modelleme dönüştürücüsüdür. Bu komut için üç eksen boyunca ölçeklendirmenin nasıl belirlenmesi gerektiği gösterilmiştir. Eğer tüm argümanlar 1.0 ise, bu komutun etkisi yoktur. Küp y- ekseninde iki kat daha büyük çizilmiştir. Bunun nedeni y eksenine 2.0 degeri verilmesidir.
glScalef(1.0, 2.0, 1.0);
küpün orjinal degerleri (3.0, 3.0, 3.0) dır, glScalef fonksiyonu ile (3.0, 6.0, 3.0)’a eşitlenmiştir. Bu modelleme dönüştürümünün etkisi kübü dönüştürmektir bu yüzden o küp değildir aslında dikdörtgen kutudur.Bunu glScalef fonksiyonunu etkisiz hale getirerekte anlaya bilirsiniz.

Hiç yorum yok:

Yorum Gönder