1 / 26

OpenGL 2.x II

OpenGL 2.x II. İnönü Üniversitesi. 2B Görüntüleme. glMatrixMode (GL_PROJECTION); glLoadIdentity (); gluOrtho2D ( xmin , xmax , ymin , ymax ); v eya glOrtho ( xmin , xmax , ymin , ymax , near , far); Bu koordinat noktaları içerisindeki nesneler görüntülenir. glViewport ().

ace
Download Presentation

OpenGL 2.x II

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 2B Görüntüleme 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.

  3. glViewport() • 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.

  4. glViewport()

  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. Temel Bileşen Detayları glPolygonMode(GL_FRONT, GL_FILL); glRectf(0, 0, 200, 100); glPolygonMode(GL_FRONT, GL_LINE); glRectf(0, 0, 200, 100); • glPolygonMode(GLenumface, GLenummode); • face: GL_FRONT, GL_BACK • mode: GL_POINT, GL_LINE, GL_FILL

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

  9. Çift Arabellek Ö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.

  10. freeGLUT ile Olay Yönetimi • 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ı (callbackfunctions) ortak değişken kullanabilir.

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

  12. Klavye Kullanımı glutKeyboardFunc(mykey); void mykey(unsigned char key, intx, 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.

  13. Fare Kullanımı glutMouseFunc(mymouse) voidmymouse(GLintbutton, GLintstate, 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)

  14. 3B Görüntüleme • 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. (AdobeIllustrator, 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.

  15. 3B Görüntüleme • 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);

  16. Perspektif İzdüşüm Parametreleri • gluLookAtfonksiyonun 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) • gluPerspectivefonksiyonunun 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. • gluPerspectivesimetrik bir görüntüleme hacmi belirtir.

  17. Perspektif İzdüşüm Parametreleri glFrustumfonksiyonunun 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.

  18. Ek Kırpma Düzlemleri İ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.

  19. Geometrik Dönüşümler • 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);

  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 glMatrixMode(GL_PROJECTION); glMatrixMode(GL_MODELVIEW); Sahnedeki bütün geometriye uygulanır.

  21. OpenGL Dönüşüm Modeli • 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.

  22. OpenGL Matris İşlemleri • “Modelview” modundaykenbirdönüşümfonksiyonununçağrılması, o ankimatrisleçarpılacakbirmatrisoluşturur. • O ankimatrisiniçeriğidoğrudan da değiştirilebilir. • glLoadIdentity(); - Birimmatrisiyükler. • glLoadMatrix(d,f,i)(matris); - İstenen 4x4 matrisiyükler. 16 elemanlımatrisisütunlarısıraylayazılanbirdizi (array) olarakalır.

  23. OpenGL Matris İşlemleri Örneğin for (int k=0; k<16; k++) elements16[k] = (float) k; glLoadMatrixf(elements16); kodu ile matrisi elde edilir. glMultMatrix(d,f,i)(matris); Mevcutmatrisleparametreolarakverilenmatrisisağdançarpar. () Bu yüzdenkodlamadapeşpeşeyazılandönüşümfonksiyonlarıiçin; en son yazılanmatris, işlemetabitutulacak ilk dönüşümmatrisiolacaktır.

  24. OpenGL Matris Yığıtı OpenGL 2.x’ de bütün matris modlarıiçin bir matris yığıt (matrixstack) 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.

  25. OpenGL Matris Yığıtı 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.

  26. Nesneleri Seçme

More Related