Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

OpenGL 2.x II İnönü Üniversitesi. glMatrixMode (GL_PROJECTION); glLoadIdentity(); gluOrtho2D (xmin, xmax, ymin, ymax); veya glOrtho(xmin, xmax, ymin,

Benzer bir sunumlar


... konulu sunumlar: "OpenGL 2.x II İnönü Üniversitesi. glMatrixMode (GL_PROJECTION); glLoadIdentity(); gluOrtho2D (xmin, xmax, ymin, ymax); veya glOrtho(xmin, xmax, ymin,"— Sunum transkripti:

1 OpenGL 2.x II İnönü Üniversitesi

2 glMatrixMode (GL_PROJECTION); glLoadIdentity(); gluOrtho2D (xmin, xmax, ymin, ymax); veya glOrtho(xmin, xmax, ymin, ymax, near, far);  Bu koordinat noktaları içerisindeki nesneler görüntülenir. 2B Görüntüleme

3  glViewport(x, y, width, height);  Görüntüleme penceresinin sol alt köşesine göre yazılan ekran koordinatlarının tam sayı değerlerini parametre olarak alır.  Eğer bu fonksiyon çağrılmazsa, görüntüleme penceresinin tamamı kullanılır.  Birden fazla glViewport çağrısı ile bir pencere içinde birden fazla görüntüleme alanı oluşturulabilir.  glViewportArray fonksiyonu da aynı işi görmektedir. glViewport()

4

5 Anti Aliasing glEnable(GL_POINT_SMOOTH);

6 Anti Aliasing glEnable(GL_LINE_SMOOTH); glLineWidth(1.5); Doğrunun bir dikdörtgen yaklaşımı ile çizdirilmesini sağlar.

7 glPolygonMode(GLenum face, GLenum mode);  face: GL_FRONT, GL_BACK  mode: GL_POINT, GL_LINE, GL_FILL Temel Bileşen Detayları glPolygonMode(GL_FRONT, GL_FILL); glRectf(0, 0, 200, 100); glPolygonMode(GL_FRONT, GL_LINE); glRectf(0, 0, 200, 100);

8  Dersle alakalı sorularınız için Z-12’ ye gelebilirsiniz.  Vize sınavı salı günü saat 11:00’ de yapılacak.  OpenGL quizi (şimdilik) cuma günü ders saatinde yapılacak. Duyuru

9  Ön Arabellek: O anda görüntülenenlerin yer aldığı arabellek  Arka Arabellek: Görüntülenme talimatı verilen fakat henüz görüntülenmeyen nesnelerin yer aldığı ara bellek glutSwapBuffers(); ile bu iki arabellek güncellenerek akıcı görüntü oluşturulur. Çift Arabellek

10  Olay Türleri  Pencere: Boyut değiştirme, taşıma vb.  Fare: Bir ya da daha fazla düğmeye tıklama  Hareket: Fare hareketini takip etme  Klavye: Bir tuşa basma, basılı tutma, bırakma vb.  Boşta: Herhangi bir olayın olmama durumunda ne yapılacağını belirleme (canlandırma vb.)  Değişkenler genel alanda (global) tanımlanır, bu sayede kontrol fonksiyonları (callback functions) ortak değişken kullanabilir. freeGLUT ile Olay Yönetimi

11 float t; /*global */ void farekontrol() { //tıklama vb. olaylarla t değeri değiştirilir. } void goruntu() { // t ile alakalı bir şeyler çizdirilir. } Değişken Kullanım Örneği

12 glutKeyboardFunc(mykey); void mykey(unsigned char key, int x, int y)  Basılan tuşun ASCII değerini ve fare konumunu yan etki olarak döner.  F1-F12, CTRL, ALT vb. özel tuşlar için glutSpecialFunc() şeklinde ayrı bir «özel tuş» fonksiyonu tanımlamak gerekir. Klavye Kullanımı

13 glutMouseFunc(mymouse) void mymouse(GLint button, GLint state, GLint x, GLint y)  Yan etki olarak  Hangi düğmenin olayı tetiklediği ( GLUT_LEFT_BUTTON, GLUT_MIDDLE_BUTTON, GLUT_RIGHT_BUTTON )  O düğmenin durumunu ( GLUT_UP, GLUT_DOWN )  Penceredeki konumu verilerini döner.  Orijini görüntüleme alanının sol üstünü kabul ederek konumu belirlediğinden OpenGL koordinatlarına uyumlu hale getirmek için y değerinin tersini almak gerekir. (yükseklikten y değerini çıkararak) Fare Kullanımı

14  2B grafiği görüntülemek için bitmap ve vektör tabanlı kayıt yapıları mevcuttur.  Bitmap yapıda, belli bir boyuttaki resim her pikseline bir renk değeri atanarak gösterilir. Bu gösterim büyük boyutlu resimlerde çok yer kaplar, ayrıca büyütme işlemi sırasında kalite kaybı yaşanır. (GIF, BMP gibi)  Vektör yapıda ise doğru ve eğriler, denklemler ile ifade edilir. Bu şekilde oluşturulan resimler, kendilerini ifade eden denklemde bir değişiklik olmayacağından büyütme/küçültme ile kalite kaybına uğramazlar. (Adobe Illustrator, SVG vb.)  640x480 boyutlarında milyon sayıda renk içerebilen bir resmin 307,200 pikseli vardır. Sıkıştırılmamış halde böyle bir resim 1.22 MB yer kaplar.  3B grafiği bitmap dosyalardan oluşturmak ise devasa bellek alanı gerektirmektedir.  Bu sebeple 3B grafiğin gösteriminde vektör tabanlı yapılar kullanılmaktadır. 3B Görüntüleme

15  Ortografik İzdüşüm: Bkz. 2B Görüntüleme  Perspektif İzdüşüm: Görüntü hacmini oluşturmak için gereken kamera parametreleri ve yapısı şu fonksiyonlarla belirlenir. gluPerspective(fovangle, aspect, dnear, dfar); glFrustum(xwmin, xwmax, ywmin, ywmax, dnear, dfar); gluLookAt(x0,y0,z0,xref,yref,zref,vx,vy,vz); 3B Görüntüleme

16  gluLookAt fonksiyonun ilk parametresi kamera konumunun, ikinci parametresi bakış vektörünün, üçüncü parametresi üst vektörün bileşenlerini tanımlar.  gluLookAt fonksiyonu çağrılmazsa kamera parametreleri şu şekilde tanımlanır.  Kamera konumu: (0, 0, 0)  Bakış vektörü: (0,0,-1)  Üst vektörü: (0, 1, 0)  gluPerspective fonksiyonunun ilk parametresi görüş açısını, ikinci parametre kırpma pencerelerinin en boy oranını, üçüncü ve dördüncü parametreler yakın düzlem ve uzak düzlemin mesafelerini belirtir. Burada dikkat edilmesi gereken üçüncü parametrenin dördüncüden küçük bir değere sahip olmasıdır. (dnear < dfar) OpenGL bu parametrelerin negatifini alarak görüntü koordinat sisteminin z ekseninde konumlandırır.  gluPerspective simetrik bir görüntüleme hacmi belirtir. Perspektif İzdüşüm Parametreleri

17  glFrustum fonksiyonunun ilk iki parametresi kırpma pencerelerinin en düşük ve en yüksek x değerlerini, 3. ve 4. parametresi kırpma pencerelerinin en düşük ve en yüksek y değerlerini, son iki parametresi de yakın ve uzak düzlemin mesafeleridir.  Görüntü düzleminin normali z, bakış yönü ise –z yönündedir.  Eğer xwmin, -xwmax’ a veya ywmin, -ywmax’a eşit değilse eğik perspektif izdüşüm elde edilir. Eşitse simetrik bir görüntüleme hacmi elde edilir. Perspektif İzdüşüm Parametreleri

18  İhtiyaç halinde mevcut 6 kırpma düzlemine ek kırpma düzlemleri de tanımlanabilir.  glClipPlane(id, A, B, C, D);  Kırpmayı aktif etmek için: glEnable(id);  Kırpmayı iptal etmek için: glDisable(id);  Burada id, GL_CLIP_PLANE0, GL_CLIP_PLANE1 ile ifade edilen bir değişken; A, B, C, D ise Ax+By+Cz+D=0 düzlem denklemindeki katsayılardır. Buna göre koordinatları ile bu denklemde sıfırdan küçük değerler veren tüm nesneler kırpılır. Ek Kırpma Düzlemleri

19  Taşıma: glTranslate(d, f, i)(tx, ty, tz);  tx, ty, tz: x, y ve z eksenindeki taşıma miktarlarıdır.  2B görünümde tz’yi 0 yapmak yeterlidir.  Döndürme: glRotate(d, f, i)(theta, vx, vy, vz);  theta: Derece cinsinden açı değeri  vx,vy,vz: Orijinden geçen dönme ekseninin bileşenleri  Ölçekleme: glScale(d, f, i)(sx, sy, sz);  Yansıma için eksi değerler kullanılır.  Örnek glTranslatei (25,32,6); glRotatef(45.0,1,0,-2.0,1.0); glScaled(4.25,4.25,4.25); Geometrik Dönüşümler

20 OpenGL Dönüşüm Modeli Kamera koordinatlarını normalize edilmiş koordinatlara dönüştürme GL_PROJECTION Yerel koordinatları kamera koordinatlarına dönüştürme GL_MODELVIEW

21  GL_MODELVIEW: Kameranın (gözün) konumunu belirleyen matristir.  Kamera uzayının orijin bilgilerini  Bakış yönü vektörünü  Kamera yönelim (orientation) bilgisini içerir.  GL_PROJECTION: İzdüşüm özelliklerini belirleyen matristir.  Alan derinlik (depth of view) bilgisini  Görüş alanı (field of view) bilgisini içerir. OpenGL Dönüşüm Modeli

22  “Modelview” modundayken bir dönüşüm fonksiyonunun çağrılması, o anki matrisle çarpılacak bir matris oluşturur.  O anki matrisin içeriği doğrudan da değiştirilebilir.  glLoadIdentity(); - Birim matrisi yükler.  glLoadMatrix(d,f,i)(matris); - İstenen 4x4 matrisi yükler. 16 elemanlı matrisi sütunları sırayla yazılan bir dizi (array) olarak alır. OpenGL Matris İşlemleri

23

24  OpenGL 2.x’ de bütün matris modları için bir matris yığıt (matrix stack) yapısı bulunmaktadır.  OpenGL dönüşüm fonksiyonları çağrıldığında, bu yığıtın en üstündeki 4x4 matris işleme tabi tutulmaktadır.  En üstteki matrise aynı zamanda mevcut matris de denmektedir.  Eğer çok sayıda dönüşüm serileri oluşturulacak ve sonucu kaydedilecekse OpenGL matris yığıtı kullanılabilir.  Başlangıçta bu yığıtta sadece birim matris vardır. OpenGL Matris Yığıtı

25  Yığıtta kaç matris olduğunu bulmak için glGetIntegerv(GL_MODELVIEW_STACK_DEPTH,numMats)  Mevcut matrisi kopyalayıp ikinci yığıt konumuna kaydetmek için glPushMatrix() kullanılır.  En üstteki matrisi yok edip, yerine onun bir altındaki matrisi mevcut matris yapmak için glPopMatrix() kullanılır. OpenGL Matris Yığıtı

26 Nesneleri Seçme


"OpenGL 2.x II İnönü Üniversitesi. glMatrixMode (GL_PROJECTION); glLoadIdentity(); gluOrtho2D (xmin, xmax, ymin, ymax); veya glOrtho(xmin, xmax, ymin," indir ppt

Benzer bir sunumlar


Google Reklamları