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

Slides:



Advertisements
Benzer bir sunumlar
Yrd. Doç. Dr. Mustafa Akkol
Advertisements

Not Sosyal Bilgiler Öğretmenliği
Geometrik Dönüşümler.
KONU :GÖRÜNTÜNÜN GEOMETRİK MODELLERİNİN KURULMASI
2B Görüntüleme Işın İzleme Kırpma
EĞİM EĞİM-1 :Bir dik üçgende dikey (dik) uzunluğun yatay uzunluğa oranına (bölümüne) eğim denir. Eğim “m” harfi ile gösterilir. [AB] doğrusu X ekseninin.
MATLAB MATLAB İLE GRAFİK.
ADOBE FİREWORKS CS5 PROGRAMA GENEL BAKIŞ.
Power Point’a Resim Nesneleri Ekleme ve Kullanma
OPTİMİZASYON VE AKTARMA İŞLEMİ
5 EKSENLİ ROBOT KOLUNUN YÖRÜNGE PLANLAMASI ve DENEYSEL UYGULAMA
İnönü Üniversitesi Bilgisayar Mühendisliği Bölümü
JEODEZİ I Doç.Dr. Ersoy ARSLAN.
Bezier Eğrileri ve Yüzeyleri
Prof. Dr. Halil İbrahim Karakaş Başkent Üniversitesi
Üç Boyutlu Görüntüleme
MATLAB’İN SAYI YUVARLAMA FONKSİYONLARI
Final Öncesi.
Final Öncesi.
Powerpoint 2003 – Uzantısı .ppt Powerpoint 2010 – Uzantısı .pptx
NESNELER ARASINDAKİ UZAYSAL İLİŞKİLER ÜZERİNE BİR UYGULAMA
Mekanizmalarda Konum Analizi
5 KONUM VEKTÖRÜ M.Feridun Dengizek.
OPENCV İLE STEREO GÖRÜNTÜLERDEN DERİNLİK KESTİRİMİ
4. KARTEZYEN KOORDİNATLAR
Fonksiyonlar.
DERS 2 MATRİSLERDE İŞLEMLER VE TERS MATRİS YÖNTEMİ
Bilgisayar Grafikleri OPENGL
Nesneye Dayalı Programlama
Temel Bilgisayar Bilimleri Dersi (Microsoft Powerpoint)
FONKSİYONLAR.
Grafik İşlemleri.
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. Fonksiyonlar –Programı modüler hale getirir –Yerel değişkenler,
RENKLİ GÖRÜNTÜ İŞLEME Güneş Baltacı.
Diziler Adres Kavramı Nesnelerin Adresleri sizeof Operatörü
BM-103 Programlamaya Giriş Güz 2014 (8. Sunu)
Bölüm 4 İKİ BOYUTTA HAREKET
Resim Sıkıştırma Yonca BAYRAKDAR
2.4. Dönüşümlü Resimler (Rollover) Oluşturma
Temel Bilgisayar Bilimleri Dersi (Microsoft Powerpoint)
Yrd.Doç.Dr. Mustafa Akkol
Yrd. Doç. Dr. Mustafa Akkol
SONLU ELEMANLAR DERS 9.
Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi
WORD WORD UYGULAMA.
Bölüm 2 Bir boyutta hareket. Kinematik Dış etkenlere maruz kalması durumunda bir cismin hareketindeki değişimleri tanımlar Bir boyutta hareketten kasıt,
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
BİLGİSAYAR GRAFİĞİ Ders 5:PROJEKSİYONLAR
Bilgisayar Grafikleri Ders 12: OpenGL_5 Örnekler
Bilgisayar Grafikleri Ders 4: 2B Homojen koordinat
FARE VE KLAVYE ÖĞR. GÖR. A. ÇAĞLAR ERKAN.
Bilgisayar Grafikleri Ders 10: OpenGL_2
Bilgisayar Grafikleri Ders 3: 2B Dönüşümler
Bilgisayar Görmesi Ders 9:Korelasyon ve İki Boyutlu Dönüşümler
KIRPMA (Clipping) Bir grafik veri tabanından bir parçayı çıkarma işlemi olan kırpma bilgisayar grafiğinin temel işlerinden birisidir. Kırpma algoritmaları.
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
BİLGİSAYAR GRAFİĞİ Ders 5:PROJEKSİYONLAR
TEKNİK RESİM Perspektifler.
Bilgisayar Grafikleri Ders 5: 3B Homojen koordinat
ELEKTRONİK TABLOLAMA PROGRAMI: EXCEL
Lineer cebrin temel teoremi-kısım 1
YER FOTOGRAMETRİSİ (2014) SUNU III Doç. Dr. Eminnur Ayhan
YER FOTOGRAMETRİSİ (2014) Doç. Dr. Eminnur Ayhan
Fonksiyonlar ve Diziler
AKIMDA KÜTLENİN KORUNUMU VE SÜREKLİLİK DENKLEMİ
F=hA BATMIŞ YÜZEYLERE GELEN HİDROSTATİK KUVVETLER
C Sharp 9. hafta - dIZILER.
FOTOGRAMETRİ - I Sunu 5 Doç Dr. Eminnur Ayhan
NİŞANTAŞI ÜNİVERSİTESİ
NİŞANTAŞI ÜNİVERSİTESİ
Sunum transkripti:

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

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.

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.

glViewport()

glEnable(GL_POINT_SMOOTH); Anti Aliasing glEnable(GL_POINT_SMOOTH);

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

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

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. OpenGL quizi (şimdilik) 29.11.2013 cuma günü ders saatinde yapılacak.

Ç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.

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ı (callback functions) ortak değişken kullanabilir.

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

Klavye Kullanımı 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.

Fare Kullanımı 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)

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. (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 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);

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

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.

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);

OpenGL Dönüşüm Modeli 𝑇= 𝑀 𝑖𝑧𝑑üşü𝑚 𝑀 𝑘𝑎𝑚𝑒𝑟𝑎 𝑀 𝑚𝑜𝑑𝑒𝑙 𝑇= 𝑀 𝑖𝑧𝑑üşü𝑚 𝑀 𝑘𝑎𝑚𝑒𝑟𝑎 𝑀 𝑚𝑜𝑑𝑒𝑙 glMatrixMode(GL_PROJECTION); glMatrixMode(GL_MODELVIEW); Sahnedeki bütün geometriye uygulanır. Kamera koordinatlarını normalize edilmiş koordinatlara dönüştürme GL_PROJECTION Yerel koordinatları kamera koordinatlarına dönüştürme GL_MODELVIEW

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.

OpenGL Matris İşlemleri “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 Örneğin for (int k=0; k<16; k++) elements16[k] = (float) k; glLoadMatrixf(elements16); kodu ile 1.0 5.0 9.0 13.0 2.0 6.0 10.0 14.0 3.0 7.0 11.0 15.0 4.0 8.0 12.0 16.0 matrisi elde edilir. glMultMatrix(d,f,i)(matris); Mevcut matrisle parametre olarak verilen matrisi sağdan çarpar. ( 𝑀 𝑚𝑒𝑣𝑐𝑢𝑡 × 𝑀 𝑚𝑎𝑡𝑟𝑖𝑠 ) Bu yüzden kodlamada peşpeşe yazılan dönüşüm fonksiyonları için; en son yazılan matris, işleme tabi tutulacak ilk dönüşüm matrisi olacaktır.

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

Nesneleri Seçme