Bilgisayar Grafikleri Ders 9: OpenGL_1

Slides:



Advertisements
Benzer bir sunumlar
.NET FRAMEWORK -MASAÜSTÜ VE SUNUCU YAZILIMLARI
Advertisements

KONU :GÖRÜNTÜNÜN GEOMETRİK MODELLERİNİN KURULMASI
İŞLETİM SİSTEMİ KATMANLARI (Çekirdek, Kabuk ve diğer temel kavramlar)
Oyun Programlama (Grafiklere Giriş)
Neler Öğreneceksiniz ? Windows ve temel bileşenleri,
RESİM FOTOĞRAF İŞLEME YAZILIMLARI.
BİLGİSAYAR KULLANIMI VE SAĞLIK
BİLGİSAYAR KULLANIMI VE SAĞLIK
İŞLETİM SİSTEMİ İşletim Sistemi Nedir İşletim Sisteminin Görevleri
İnönü Üniversitesi Bilgisayar Mühendisliği
C Programlama Diline Giriş
Bezier Eğrileri ve Yüzeyleri
BTP 108 BİLGİSAYAR AĞ SİSTEMLERİ AĞ KAVRAMI Birden çok bilgisayarın birbirine bağlı olarak kullanılmasıyla oluşturulan çalışma biçimine bilgisayar ağı.
Nesneye Dayalı Programlama
İŞLETİM SİSTEMLERİ EYLÜL 2012.
Nesneye Dayalı Programlama
MPI İle Paralel Programlama Tunahan Altıntop
MART 2013 İŞLETİM SİSTEMLERİ.
İşletim Sistemleri Tanım: Kullanıcı ile bilgisayar donanımı arasında bağlantıyı sağlayan özel bir yazılımdır.
Bilgisayar Programlama
Bilgisayar Grafikleri OPENGL
C++ Temelleri C++ genel amaçlı, nesne tabanlı, yüksek seviye programlama dilidir.
Nesneye Dayalı Programlama
C ile Programlamaya Giriş
FAYDALI BİLGİSAYAR PROGRAMLARI
İŞLETİM SİSTEMLERİ Öğr. Gör. S.Serkan TAN.
WİNDOWS SÜRÜMLERİ ARASINDAKİ FARKLILIKLAR
İŞLETİM SİSTEMİ.
EYLÜL 2014 İŞLETİM SİSTEMLERİ Bilgisayar Uygulamaları.
Nesneye Dayalı Programlama
BM-103 Programlamaya Giriş Güz 2014 (4. Sunu)
İŞLETİM SİSTEMİ İşletim Sistemi Nedir İşletim Sisteminin Görevleri
BİLGİSAYAR YAZILIMI.
Denetim Masası Ms. Windows 8.1
DONANIM VE YAZILIM.
BİLGİSAYAR DONANIMI Hazırlayan: Emre ŞENTÜRK ( )
İŞLETİM SİSTEMLERİ – I : WINDOWS XP
Az kullanılan ögeler menüden kaldırılabilir. Kısayollar yaratılabilir.
Bilgisayara bilgilerimizi saklayabiliriz.
Mobil Uygulama Geliştirme
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Bilgisayar Grafikleri Ders 12: OpenGL_5 Örnekler
SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
Bilgisayar Grafikleri Ders 10: OpenGL_2
Hafta2 Bilgisayar Donanımı Dersi
Temel Bilgi Teknolojilerinin Kullanımı Öğr.Gör. Abdullah ŞENER.
İŞLETİM SİSTEMİ İşletim Sistemi Nedir İşletim Sisteminin Görevleri
BMS-301 Kabuk Programlama Güz 2015 (5. Sunu) (Yrd. Doç. Dr. Deniz Dal)
İŞLETİM SİSTEMİ İşletim Sistemi Nedir İşletim Sisteminin Görevleri
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
BM-308 Paralel Programlamaya Giriş Bahar 2016 (1. Sunu) (Yrd. Doç. Dr. Deniz Dal)
Genel Kavramlar Bölüm - 1. YAZILIM Bilgisayara işlemler yaptırabilmek ve karar verdirtebilmek için yazılan kalıplara denir. Yazılım, genel olarak donanım.
Barış Ceviz Yazılım Geliştiricisi Yazılım, Yazılımcı, Yazılım Dilleri.
FAT VE NTFS DOSYA YAPISI
Programlama Laboratuarı-I DERS - 3 Program Geliştirme Derleyici ve DevC++ Derleyicisi.
Akademik Uygulamalar ve Linux Fatih Mehmet AVCU İnönü Üniversitesi Enformatik Bölümü
Programlamaya Giriş-I Bölüm-1. Algoritma Algoritma günlük yaşamımızda yaptığımız işler sırasında sıklıkla kullandığımız bir yöntemdir. Algoritma, bir.
SUNUCU İŞLETİM SİSTEMLERİ
Fonksiyonlar ve Diziler
C Programlama Dili Bilgisayar Mühendisliği.
BİLGİSAYARDA DONANIM ve YAZILIM
Neler Öğreneceksiniz ? Windows ve temel bileşenleri,
PROGRAMLAMA TEMELLERİ
C Programlama Diline Giriş
ACTIVE DIRECTORY.
BİLİŞİM TEKNOLOJİLERİ
WİNDOWS SÜRÜMLERİ ARASINDAKİ FARKLILIKLAR
C ile Programlamaya Giriş
İOS PLATFORMUNDA MOBİL TRAFİK CEZA BİLDİRİM UYGULAMASI
BLM113 Bilgisayar Bilimlerine Giriş
Sunum transkripti:

Bilgisayar Grafikleri Ders 9: OpenGL_1 Doç. Dr. Cemil Öz Bilgisayar Grafikleri Ders 9: OpenGL_1 SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

OpenGL Nedir? OpenGL ya da tam adıyla Open Graphics Library (Açık Grafik Kütüphanesi), gelişmiş donanım desteğini kullanarak, hem iki hem de üç boyutlu grafikleri ekrana çizmek için kullanılan ücretsiz bir grafik arabirimidir. Bir programlama dili değildir. OpenGL grafik donanımı için tanımlanmış bir yazılım dır. Aynen Windows API larını bir dosyaya veya internete erişmek icin kullandığınız gibi OpenGL API da mesela bir oyun programı yazmak için aynı şekilde bir programlama dili tarafından kullanılır. OpenGL fonksiyon cağrılarına cevap veren bir yazılım kütüphanesi ya da bir donanım sürücüdür.

OpenGL Nedir? 300 den fazla komut ve fonksiyon bulunmaktadır. Bu komutlar nokta , çizgi , çokgen gibi temel grafik öğelerini 3 boyutta çizmeye yaramaktadır. Işıklandırma ve gölgeleme , doku kaplama , karıştırma (blending), yansıma.

OpenGL Nedir? OpenGL kitaplığı da ekrana grafik çizmeyi standartlawaştırmıştır. OpenGL sayesinde grafik kartının modeli veya işlemcinin mimarisi gibi donanımsal etkenlerden bağımsız programlama yapılır. Ayrıca aynı zamanda işletim sisteminden de bağımsız programlama yapılır. Kolay kullanım ve bu "taşınabilirlik" özellikleri yüzünden OpenGL popüler bir araç olmuştur. OpenGL içerisinde pencere yönetimi , kullanıcı girişleri veya dosya girdi/çıktı işlemlerine dair herhangi bir fonksiyon bulunmaz. Her programlama ortamı bunlar için kendi yordamlarına sahiptir ve bu ortam çizim işlemlerini OpenGL ye devretmekle yükümlüdür.

OpenGL Öncesi SGI (Silicon Graphics Inc.) firması OpenGL den önce IrisGL isimli API’yi üretti. Matris işlemlerini çok hızlı bir şekilde yapabilen bu API, yeteri kadar taşınabilir değildi. Farklı bilgisayarlarda ve işletim sistemlerinde sorun çıkardı. SGI, standart bir grafik uygulama geliştirme arabiriminin yokluğunu, 3D pazarının büyümesi için bir engel olarak gördü. Bunun üzerine bir standart geliştirdi ve 1992 yılında bir sonraki sürümünü olan OpenGL 1.0 ile bu sorunu ortadan kaldırdı.

OpenGL Lisans OpenGL’in fiyatı ne kadar? OpenGL bugün dünyada birçok yazılımcı tarafından kullanılmakta ve yazılımcılar bu API için hiçbir ücret ödememektedir. Peki, ama SGI - Khronos bu üründen nasıl para kazanmaktadır? Ekran kartı üreticileri eğer OpenGL destekli bir ekran kartı üretecek ise (bugün bütün ekran kartları destekliyor) SGI’ya bir telif ödemek zorundadır. Bu telif kapsamında SGI bu üreticilere gerekli sürücüleri sağlamakta ve ekran kartının performans testlerini yapmaktadır.

Neden OpenGL? Kitaplıktır Taşınabilirdir (donanım-bağımsız) Open Graphics Library, 2 veya 3 boyutlu grafik çizdirmek için kullanılan bir API’dir, bir başka deyişle kitaplıktır. Bu kitaplık yazılım geliştiricilere grafik donanımını yönetme şansı verir. Taşınabilirdir (donanım-bağımsız) İşletim sisteminden ve işletim sisteminin çalıştığı platformdan bağımsızdır. Grafik kartının modeli veya işlemcinin mimarisi gibi donanımsal etkenlerden bağımsız programlama yapılır.

Neden OpenGL? İşletim sisteminden bağımsızdır OpenGL çalışma anı kitaplığı (run-time library) Windows 95/98/NT/2000/XP, Linux, Unix, Mac OS, OS/2, OPENStep ve BeOS işletim sistemlerinde vardır. Windows ailesinde standart olarak gelir. Pencere yöneticisinden bağımsızdır OpenGL kullanılarak yazılmış programlar, Win32, MacOS ve X-Window pencere yöneticilerinde sorunsuz çalışırlar.

Neden OpenGL? Birçok programlama dilinde kullanılabilir Ada, C, C++, C# (SharpGL adı verilen sınıflar sayesinde), Fortran, Python, Perl ve Java programlama dilleri kullanılarak OpenGL kitaplığından faydalanılabilir. Yüksek seviye komutlar içermez OpenGL'de yalnızca en temel nesneler (nokta, çizgi, çokgen) bulunur. Bunlarla kompleks modeller (molekül, uçak, ev, araba vb.) oluşturulur.

GLUT Nedir? GLUT : OpenGL Utility Toolkit OpenGL Araç Kiti İşletim sistemine aktarılmış bir kitaplıktır. Amacı OpenGL uygulamaları için pencere yöneticisinden bağımsız bir arabirim eksiğini gidermektir (taşınabilirlik) Örn : pencereler oluşturmak, klavye ve fareden veri almak vb.

OpenGL platformdan bağımsız olduğu için bazı işlemler bu kitaplık ile yapılamaz. Örneğin kullanıcıdan veri almak, bir pencere çizdirmek gibi işler hep kullanılan pencere yöneticisi ve işletim sistemine bağlıdir. Bu yüzden bir an için OpenGL'in bu durumlarda platforma bağımlı olduğunu düşünebiliriz. Çünkü penceresini her pencere yöneticisinde farklı çizdirecek bir canlandırma programı yazmak demek her bilgisayarda çalışacak ayrı pencere açma kodu yazmak demektir. Bu ise OpenGL'in doğasına aykırıdır. Neyse ki OpenGL Araç Kiti (GLUT - OpenGL Utility Toolkit) var da yazılım geliştiricileri bir platforma bağlılıktan tamamen kurtarıyor.

GLUT, birçok işletim sistemine aktarılmış bir kitaplıktır GLUT, birçok işletim sistemine aktarılmış bir kitaplıktır. Amacı OpenGL programlarının pencerelerini oluşturmak, klavye ve fareden veri almak gibi ihtiyaçlarını karşılamaktır. GLUT olmadan da OpenGL programlama yapılabilir, örneğin Linux'ta kullanılan X-Window sistemin kendi işlevleri kullanılarak pencere çizdirilebilir fakat bu kod sadece X-Window'da çalışır. Kod Windows'a götürülüp derlendiğinde çalışmaz, çünkü Windows'da X-Window işlevleri yoktur

OpenGL nasıl çalışır?

Yazılım bazında rol alan OpenGL mimarisi yukarıdaki yapıya sahiptir Yazılım bazında rol alan OpenGL mimarisi yukarıdaki yapıya sahiptir.Tipik bir program birçok çağrıda bulunur.Bunlardan bir kısmı programcı , bir kısmı işletim sistemi ve bir kısmı da programlama dilinin kendi kütüphaneleri tarafından yapılmaktadır.Windows uygulamaları , çıktıları ekranda göstermek için Grafik Cihaz arayüzü denilen bir Windows API kullanırlar.Bu GCA(İngilizce de GDI) , pencereye yazılar yazmak , çizgiler çizmek için kullanılır.Genellikle grafik kart üreticileri GCA nın çıktı üretmek için etkileştikleri bir grafik sürücüsünü de kart ile birlikte verirler.İşte oyun oynarken bazılarınızda , grafik kartlarının problem çıkarmasının sebeplerinden biri de GCA ile kullandığınız sürücünün uyuşmaması üzerine ortaya çıkar.OpenGL nin yazılım tanımlaması ki bunu ileride siz yapacaksınız , grafik isteklerini bir uygulamadan alarak , 3 boyutlu grafiklerin renkli bir görüntüsünü oluşturur.Bu görüntünün oluşturulmasından sonra onu GCA ya vererek monitöre yansıtılmasını sağlar.Windows dışındaki işletim sistemlerinde de benzer durumlar söz konusudur ancak onlarda GCA nın yerini o işletim sistemine özgü grafik servisi almaktadır.

OpenGL Boru hattı Boru hattı (Pipeline) iki veya daha fazla değişik aşma gerektiren işlemler için kullanılan bir tarif biçimidir. Aşağıdaki şekilde bir OpenGL işletimi için kullanılan boru hattı gösterilmektedir. Bir uygulama OpenGL fonksiyon çağrıları yaparken istekler bir komut tamponuna konur. Bu tampon komutlarla, grafik bilgileri, doku bilgileri ve buna benzer bilgiler ile dolar. Tampon temizlenince programcı veya grafik sürücüsünün mimarisine bağlı olarak komutlar bir sonraki aşamaya geçerler.

OpenGL nasıl çalışır?

OpenGL 1.0 1992 (OpenGL1.0) Silicon Graphics Eski ekran kartları ile çalışmaz, mutlaka 3D özelliği olan bir kart gerekir. DirectX ise çok eski kartlarla da çalışmasına rağmen program hangi versiyonda yazıldı ise kullanıcı da directX'in o versiyonunu bilgisayarına yüklemek zorundadır.

Grafik bilgileri ilk başta uygun forma dönüştürülüp ışıklandırılır Grafik bilgileri ilk başta uygun forma dönüştürülüp ışıklandırılır. Bu işlem matematiksel olarak yoğun işlemlerin kullanıldığı ve grafik bilgilerinin kullanılarak objenin yeri ve durumu bilgilerinin alınıp görüntüde tekrar çizilme işlemidir. Işıklandırma ise objeye her yönden verilen ışık ile objenin nasıl görüneceğinin belirlendiği kısımdır.

Önceki aşama tamamlandığında bilgi inşaa bölümüne yüklenir Önceki aşama tamamlandığında bilgi inşaa bölümüne yüklenir. Geometrik,renk ve doku bilgilerini alınması ve renkli görüntünün oluşması bu aşamada gerçekleştirilir.

Bundan sonra işlenen görüntü görüntü tamponuna(frame buffer) gönderilir. Görüntü tamponu aslen ekran kartının hafızasıdır. İşte yine birçoğunuzun 3D oyunlar oynarken karşılaştığı frame(görüntü karesi) tabiri bu anlama gelmektedir. Görüntü kartının hafıza büyüklüğü ne kadar faal görüntü karesini tutabilecegi , işlemci gücü ise bunları ne kadar hızlı işleyebileceği anlamına gelmektedir.Kısaca daha güçlü görüntü kartı daha akışkan ve ayrıntılı görüntü almanız demektir.

Donanım hızlandırması Interaktif 3 boyutlu grafik uygulamalari en hizli islemcilerde bile oldukça zaman harcayan bir işlemdir.Bu sebeple grafik kartı üreticileri kartlarını, üzerinde grafik hızlandırıcılar bulundurmaya başlamıştır.Bu kartlar üzerlerinde 3 boyutlu grafik üretmek için özelleştirilmiş işlemciler taşirlar.Genel amaçli CPU ların tersine bu işlemciler 3D işlemlerini önemli ölçüde hızlandıracak şekilde tasarlanmıslardır.Eger bahsettiğimiz OpenGL ithalat kütüphanelerini programınıza bağlarsanız programlarınız bilgisayarınızda bulunan 3D kartının üzerinde Windows tarafından kullanılan sürücüyü otomatik olarak kullanmaya baslayacaktır(Cogunlukla).İste bu kütüphaneleri ekleme sebebimiz budur.

OpenGL veri tipleri Bir platformdan digerine rahatca gecis yapabilmek icin OpenGL kendi özgün veri tiplerini tanımlamaktadır.Bu veri tiplerinin isterseniz gerçek C veri tiplerine dönüştürebilirsiniz.Fakat varolan derleyicilerin her birinin C deki veri tipleri icin kendi belirlediği kurallar ve hafıza kısıtlamaları bulunmaktadır. OpnGL veri tiplerini kullanarak bu kısıtlamaların önüne geçmeniz mümkündür.

Tüm veri tipleri OpenGL yi belirtmek icin GL ile başlamaktadir Tüm veri tipleri OpenGL yi belirtmek icin GL ile başlamaktadir.Bazılarında işaretsiz tipi belirtmek icin u kullanilmaktadir.Bir boyutu veya renk derinligi gibi kavramlari belirtmek icin kullanilan degiskenlerde genellikle size adi verilen ozel taki kullanilmaktadir.Mesela GLsizei bir tamsayi tarafindan belritilen boyut parametresini tanimlar.Clamp takisi renk butunlugunu tanimlamak icin kullanilir ve rengin siddetini belirtir.boolean true ve false degerlerini tutmak icin(mesela isigin varligi ve yoklugu) num enumerated adi verilen ve veri kümesi tutan ve son olarak bitfield ikilik bit alanlarini tutmaya yarayan degiskenlerdir. Bu baglamda isaretci ve dizi kavramlari farkli tutulmamaktadir.Benzer sekilde 10 luk bir GLshort dizisi GLshort shorts[10]; seklinde ve 10 luk bir GLdouble veri tipi isaretcileri dizisi GLdouble *doubles[10]; seklinde tanimlanmaktadir.

OpenGL 3.0 Khronos Grubu, OpenGL API'de, “Long Peaks” kod adlı üçüncü sürümünü yayınladı. (11.08.2008) Yeni sürüm eski donanımları desteklemekle birlikte birçok yeni özellik de barındırıyor. OpenGL ve OpenCL birlikteliği.

OpenGL 3.0  yenilikler Kolay programlamayı sağlamak için vertex dizi durumlarını kapsayacak Vertex Array Nesneleri Gelişmiş performans için alt-dizileri düzenlemeyi de sağlayan tam Vertex Buffer Nesneleri erişimi Pek çok buffer seçeneğinin kullanımını sağlayacak tam framebuffer nesne fonksiyonları OpenGL uygulamalarında ekranın gama düzeltme seçeneğine bağlı kalmaksızın düzgün renk oluşturulmasını sağlamak için sRGB framebuffer'ına kaplama ve blend etme.

OpenGL 3.0  yenilikler OpenGL 3.0  eksiler Görsel ve sayısal işlemlerde, duyarlılık ve dinamik range'i artırmak için 32-Bit kayar nokta doku ve kaplama buffer'ları. Vertex dönüştürme sonucu oluşan geometrik veriyi yakalamak için dönüşüm geri beslemesi. OpenGL 3.0  eksiler DirectX 11 ile karşılaştırıldığında 3.0 sürümü ihtiyaçları karşılayamıyor Toplulukla hiçbir bilgi paylaşımı yok

OpenGL - Windows opengl32.dll  windows sistem klasörü içinde glu32.dll  windows sistem klasörü içinde glut32.dll  windows sistem klasörü içinde opengl32.lib  kütüphane dizini içinde (lib) glu32.lib  kütüphane dizini içinde (lib) glut32.lib  kütüphane dizini içinde (lib) gl.h  include dizini içinde glu.h  include dizini içinde glut.h  include \GL dizini içinde

Fonksiyonlar

Fonksiyonlar Void gluPerspective (Gldouble angle, Gldouble aspect, Gldouble zNear, Gldouble zFar) : Görüntümüze perspektiflik (uzaklık arttıkça cisimlerin küçülmesi) kazandırır. Void glTranslatef (TYPE x, TYPE y, TYPE z) : Oluşturulan nesnenin başlangıç koordinatlarını belirler Void glBegin (GLenum mode) : Geometrik primitifi tanımlayan köşe noktaları (vertex) listesinin başlangıcını belirler. Void glColorf (TYPE r, TYPE g, TYPE b) : Mevcut köşenin rengini belirler. Void glEnd (void) : Köşe listesinin (vertex list) sonunu belirler.

Fonksiyonlar Void glClearColor (Glfloat red, Glfloat green, Glfloat blue, Glfloat alpha) : RGB modunda, kırmızı, yeşil, mavi renk bileşenlerini kullanarak mevcut artalan rengini belirler. [0,1] aralığında değer alırlar. Void glClearDepth (Glfloat depth) : Derinlik tamponundaki başlangıç değerlerinin ne olacağı belirlenir. Void glClear (Glbitfield mask) : Belirtilen tamponları sıfırlar. Void glRotatef (TYPE angle, TYPE x, TYPE y, TYPE z) : Orjin ve (x,y,z) noktalarından geçen eksen etrafında, angle parametresinin tanımladığı açı kadar saat ibresi yönünde döndürülür.

Fonksiyonlar (glut) void glutInit(int argc, char **argv) : GLUT kütüphanesini kullanmaya başlamadan önce ilk olarak glutInit isimli yordam çağırılmalıdır void glutInitWindowSize(int w, int h) : pencere büyüklüğünü belirler void glutInitDisplayMode(unsigned int mode) : pencere görüntüleme şeklini belirler int glutCreateWindow(char *t) : pencere oluşturma void glutDisplayFunc(void (*func)(void)) : pencereye bir şeyler çizilme zamanı geldiği sırada GLUT sistemi tarafından otomatik olarak çağırılmasını sağlama ve fonksiyon ismini GLUT sistemine kaydetme