İnönü Üniversitesi Bilgisayar Mühendisliği

Slides:



Advertisements
Benzer bir sunumlar
Yazılım Geliştirme ve Java
Advertisements

Bölüm 12 ÜST DÜZEY KONULAR Dinamik Bellek Ayırma Önişlemci
Nesnelerin Özellikleri. - Üye nesneler - friend belirtesi - Nesnelerin operatörlere yüklenmesi - this yerel (lokal) değişkeni - inline tanımlı üye fonksiyonlar.
İŞLETİM SİSTEMİ KATMANLARI (Çekirdek, Kabuk ve diğer temel kavramlar)
Oyun Programlama (Grafiklere Giriş)
OpenGL Programlamaya Giriş
Power Point’a Resim Nesneleri Ekleme ve Kullanma
BT301 İŞLETİM SİSTEMİ KONU: WİNDOWS 7, WİNDOWS 8
SINIFLAR Yılmaz Kılıçaslan.
NESNEYE YÖNELİK PROGRAMLAMA SINIFLAR
© 2011 Adobe Systems Incorporated. Cep Telefonu Değeri Belirlemek için Mobil Uygulama Sabri Dündar / Volkan Altuntaş Celal Bayar Üniversitesi.
Bölüm 2 C Dilinin Temelleri
C Programlama Diline Giriş
Bezier Eğrileri ve Yüzeyleri
İşletİM SİSTEMİ NEDİR? İşletim sistemi bilgisayar donanımlarının birbirleri ile uyumlu bir biçimde çalışmasını sağlayan bir yazılımdır. İşletim sistemi;
İNTERNET TARAYICILARINDA YENİ NESİL GRAFİK TEKNOLOJİLERİ
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 4: Diziler
Bölüm 10 Yapılar ve Birleşimler
Bölüm 2 C Dilinin Temelleri Genel Kavramlar
SINIFLAR GİRİŞ Yılmaz Kılıçaslan.
Nesneye Dayalı Programlama
İŞLETİM SİSTEMLERİ EYLÜL 2012.
Temel Grafik Kavramları
Nesneye Dayalı Programlama
MPI İle Paralel Programlama Tunahan Altıntop
MART 2013 İŞLETİM SİSTEMLERİ.
Bilgisayar Programlama
Bilgisayar Grafikleri OPENGL
Nesneye Dayalı Programlama
C ile Programlamaya Giriş
FONKSİYONLAR.
İŞLETİM SİSTEMLERİ Öğr. Gör. S.Serkan TAN.
C#.NET 5.0 C# .NET 5.0 Eğitimleri Volkan KANAT.
2B Görüntüleme ve “Rasterization”
Diziler Adres Kavramı Nesnelerin Adresleri sizeof Operatörü
Bilgisayar Programlama
EYLÜL 2014 İŞLETİM SİSTEMLERİ Bilgisayar Uygulamaları.
Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
OPENCV İLE OTOMATİK ARABA PLAKA TANINMASI
Bilgisayar Programlama. Tek bir değişken tanımlamak için aşağıdaki gibi bir yazım yeterlidir. int i; Hatırlanacağı gibi bu tarz bir tanımlamada.
İKMAP İnternet 1 Ders Notu
YAZILIM.
Mobil Uygulama Geliştirme
Bilgisayar Grafikleri Ders 9: OpenGL_1
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
Temel Bilgi Teknolojilerinin Kullanımı Öğr.Gör. Abdullah ŞENER.
Veri yapıları Hafta3 Dizi Yapıları.
İŞLETİM SİSTEMİ İşletim Sistemi Nedir İşletim Sisteminin Görevleri
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
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ı.
Bölüm 2 C Dilinin Temelleri Genel Kavramlar Yazım ve Noktalama Kuralları C Kütüphaneleri C Dilindeki Sözcükler Değer Sabitleri Veri Tipleri Değişkenler.
İbrahim Olgaç PROGRAMLAMA DİLLERİ SUNUMU C#
EĞITIMDE BILGISAYAR KULLANıMı BILGISAYARLARıN TÜRLERI, YAPıSı, IŞLEYIŞI VE ÖĞELERI.
Mobil Uygulamalar ve Android’e Giriş Ders 1. Uygulama Kavramı  Kullanıcıların ihtiyaçları doğrultusunda istedikleri işlemleri yapmalarına imkan veren.
Bilgisayar Grafikleri İnönü Üniversitesi Bilgisayar Mühendisliği Bölümü.
C Programlama Dili Bilgisayar Mühendisliği.
BİLGİSAYARDA DONANIM ve YAZILIM
SEMBOLLER.
Neler Öğreneceksiniz ? Windows ve temel bileşenleri,
PROGRAMLAMA TEMELLERİ
C Programlama Diline Giriş
Bölüm 2 C Dilinin Temelleri
YAPISAL PROGRAMLAMA Hafta-6
YAPISAL PROGRAMLAMA Hafta-7
WİNDOWS SÜRÜMLERİ ARASINDAKİ FARKLILIKLAR
Bölüm 2 C Dilinin Temelleri
C ile Programlamaya Giriş
Sunum transkripti:

İnönü Üniversitesi Bilgisayar Mühendisliği OpenGL’ e Giriş İnönü Üniversitesi Bilgisayar Mühendisliği

OpenGL Open Graphics Library, bilgisayar grafikleri görüntülenmesinde (rendering) kullanılan düşük seviyeli bir uygulama programlama arayüzüdür. Kendisi ile temel geometrik ve görüntü bileşenleri kullanarak yüksek kaliteli görüntüler oluşturulabilmektedir. Pek çok grafik uygulamasının temelinde vardır. «Açık standart» olarak tanımlanmıştır. Bu sayede işletim sisteminden ve pencere sisteminden bağımsızdır.

OpenGL Açık kaynak kodlu değildir, zira bir kaynak kodu yoktur. Değişik yazılım ve donanım üreticilerinin GL tanımlamalarına uygun geliştirdikleri ürünler vardır. OpenGL’ in eski sürümleri genelde yazılım üzerinden rendering yapmaktadır. OpenGL 4.x ise donanımı kullanmaya göre tasarlanmıştır. Nvidia ve AMD, OpenGL tanımlamalarına göre ekran kartı sürücüleri geliştirmektedir.

OpenGL İlk olarak Silicon Graphics tarafından geliştirilmiştir. OpenGL 1.0: Ocak 1992 OpenGL 2.0: 7 Eylül 2004 OpenGL 3.0: 11 Ağustos 2008 OpenGL 4.0: 3 Ağustos 2009 OpenGL 4.3: 6 Ağustos 2012 OpenGL 4.4: 22 Temmuz 2013 SIGGRAPH 2006’ da Silicon Graphics’ in yerine Khronos Group konsorsiyumunun OpenGL ve onun standartlarını yöneteceği açıklanmıştır. Bu tarihten itibaren OpenGL Khronos Group tarafından geliştirilmektedir. Daha detaylı bilgi için: http://www.openglbook.com/the-book/preface-what-is-opengl/ (İngilizce)

OpenGL’ in Yapabildikleri Rendering Temel bileşen çizimi Nokta Doğru parçası Üçgen Aydınlatma Köşe noktaları manipülasyonları Shading Texture mapping ve gölgeler (yeni sürümlerinde)

OpenGL’ in Yapamadıkları Arayüz yönetimi Menüler, düğmeler, onay kutuları vs. Pencere yönetimi Pencere boyutunu değiştirme, pencere – işletim sistemi ilişkileri Görüntünün ekranın neresine çizdirileceğinin kararı Eğri ve eğri yüzeylerin çizimi Çokgen yaklaşımları ile benzetilebilmektedir. Animasyonlar ve zamanlamaları Dosya G/Ç Resim dosya türleri işleme

Durum Makinesi Yaklaşımı OpenGL’ in işleyişi bir durum makinesine (state machine) benzetilebilir. OpenGL fonksiyonlarını 2 gruba ayırabiliriz. Temel Bileşen (Primitive) Oluşturanlar: Temel bileşen görünür ise çıktı oluşturabilir Köşelerin nasıl işlendiği ve temel bileşenin görünümü durum tarafından kontrol edilir. Durum Değiştirenler: Dönüşüm fonksiyonları Nitelik fonksiyonları

OpenGL ES Gömülü sistemler ve taşınabilir aygıtlar (cep telefonları, tabletler vb.) için geliştirilmiştir. OpenGL 3.1 üzerinden geliştirilmiştir. «Shader» tabanlıdır.

WebGL OpenGL ES 2.0’ ın Javascript üzerinde geliştirilmiş halidir. Günümüz web tarayıcıları üzerinde çalışabilmektedir. Bazı örnekler: http://www.khronos.org/webgl/wiki/Demo_Repository

OpenGL’ in Gelişim Süreci

İlk Evreler OpenGL 1.0, Silicon Graphics tarafından Ocak 1992’ de piyasaya sürüldü. İş akışı tamamen «sabit fonksiyon» mantığına dayanıyordu. Bu iş akışında Eylül 2004’ te çıkan 2.0 sürümüne kadar çeşitli değişiklikler olduysa da sabit fonksiyon özelliği korunmuştur.

OpenGL 1.0 Pipeline Primitive Setup and Rasterization Fragment Coloring and Texturing Harmanlama Vertex Data Pixel Data Vertex Transform and Lighting Texture Store

Programlanabilir Aşamalar OpenGL 2.0 ile programlanabilir shader özelliği eklendi. Vertex (köşe) shading ile sabit fonksiyon dönüşüm ve aydınlatma aşaması güçlendirildi. Fragment (parça) shading ile parça renklendirme aşaması güçlendirildi. Lakin hala sabit fonksiyon iş akışı (fixed function pipeline) mantığı geçerliliğini korumaktaydı. Primitive Setup and Rasterization Fragment Coloring and Texturing Blending Vertex Data Pixel Data Vertex Transform and Lighting Texture Store

Büyük Çapta Değişiklikler OpenGL 3.1 ve sonrasında önceki OpenGL sürümlerinde belirtilen pek çok tanımlama terkedilmiştir. İş akışında sabit fonksiyon mantığı çıkarılarak, GPU kullanımı ve shader programlama etkin hale getirilmiştir. Primitive Setup and Rasterization Fragment Shader Blending Vertex Data Pixel Data Vertex Shader Texture Store Geometry Shader

Şimdiki OpenGL İş Akışı

Güncel OpenGL Programlama Mantığı Shader programları oluşturulur. (GLSL ile) Tampon nesneleri oluşturulur ve içine veriler yüklenir. Shader değişkenleri ile veri konumları «bağlanır» Görüntüleme yapılır.

Uygulama Çerçevesi İhtiyaçları Yapısı itibariyle OpenGL uygulamaları üzerinde görüntülenme (rendering) için bir yere ihtiyaç duyarlar. Genellikle bir penceredir. Ekranın tamamını da kaplayabilir. (fullscreen) Uygulamanın işletim sistemine özgü temel pencere sistemi ile iletişimde olması gerekir. Pencereler üzerinden görüntüleme için çeşitli arayüzler bulunmaktadır. freeGLUT, GLFW, Qt, wxWidgets, Irrlicht, SDL, Win32 API, X11, Cocoa Bu arayüzlerin bir kısmı işletim sisteminden bağımsızdır.

İşleri Basitleştirme İşletim sistemleri kütüphane fonksiyonlarına farklı davranmaktadır. Derleyici bağlantıları ve çalışma zamanı kütüphaneleri (runtime libraries) değişik fonksiyonlar içerebilmektedir. Buna ek olarak OpenGL’ in değişik sürümleri değişik fonkisyon türleri ve gruplarını içermektedir. Bu durum da fonksiyona erişimde hantallığa ve pencere sistemine bağımlılığa yol açmaktadır. Bunun önüne geçmek için GLEW (OpenGL Extension Wrangler Library) vb. kütüphaneler bulunmaktadır.

Geometrik Nesnelerin Gösterimi Geometrik nesneler, köşeleri üzerinden gösterilmektedir. Bir köşe, genel niteliklerin bir bütünüdür. Konum koordinatları Renkler Texture koordinatları Uzayda o noktayla alakalı herhangi bir başka veri Konum bilgisi 4 boyutlu homojen koordinatlar şeklindedir. OpenGL 2.x ile OpenGL 3.x (ve sonrası) arasında veri yapısı farklılıkları bulunmaktadır. Köşe verileri, köşe arabellek nesnelerinde (Vertex Buffer Object) kayıtlıdır. VBO’ lar ise köşe dizi nesnelerinde (Vertex Array Object)kayıtlıdır.

Örnek: Çokgen Çizdirme OpenGL 2.x OpenGL 3.x ve sonrası glBegin(GL_TRIANGLES); glVertex2f(0.0, 0.0); glVertex2f(0.5, 1.0); glVertex2f(1.0, 0.0); glEnd(); glFlush(); float points[3][2]={{0.0,0.0},{0.5, 1.0},{1.0,0.0}}; loc=glGetAttribLocation(program, “vPosition”); glEnableVertexAttribArray(loc); glVertexAttribPointer(loc,2,GL_FLOAT,GL_FALSE,0,points); glGenBuffers(1,&buffer); glBindBuffer(GL_ARRAY_BUFFER,buffer); glBufferData(GL_ARRAY_BUFFER,sizeof(points), points,GL_STATIC_DRAW);

Görüntüleme Tarzları Alıkonan mod (Retained mode): Görüntülenecek modellerin grafik kütüphanesi tarafından bellekte tutulması yaklaşımıdır. Uygulama sahneyi oluşturma komutlarını grafik API’ ye gönderir. Grafik API değişiklikler halinde görüntüyü yeniden çizdirmekten sorumludur. Windows Presentation Foundation (WPF) bu modda çalışır. Anlık mod (Immediate mode): Görüntülenecek modellerin uygulama tarafından bellekte tutulması yaklaşımıdır. Uygulama görüntüleme ile alakalı bütün süreçlerden sorumludur. Uygulama açısından daha fazla esneklik ve kontrol sağlar. Retained Mode Immediate Mode

Temel Grafik Programı Yapısı Görüntüleme için gereken kütüphaneler Animasyon, G/Ç, pencere kontrolü için tanımlanan fonksiyonlar Görüntünün oluşmasını sağlayan aygıt (device) Bu görüntünün sürekliliğini sağlayan (sonsuz) döngü #include <iostream> //#include <windows.h> #include <GL/glut.h> void myKeyHandler( unsigned char key, int x, int y) { if (key == 27) {exit(1);} printf("\n key pressed is %c at (%d, %d)", key , x, y); } void display() { glClearColor(0.0f, 0.0f, 0.0f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_QUADS); glColor3f(1.0f, 0.0f, 0.0f); // Red glVertex2f(-0.5f, -0.5f); glVertex2f( 0.5f, 0.5f); glVertex2f(-0.5f, 0.5f); glEnd(); glFlush(); int main(int argc, char** argv) { glutInit(&argc, argv); glutCreateWindow("OpenGL Setup Test"); glutInitWindowSize(320, 320); glutInitWindowPosition(50, 50); glutKeyboardFunc(myKeyHandler); glutDisplayFunc(display); glutMainLoop(); return 0;

Visual Studio ile OpenGL kullanımı freeGLUT, GLFW vb. araçların statik/dinamik kütüphanelerinin yerlerinin Visual Studio projesinde belirtilmesi gerekmektedir.