Yapay zekadan makale özeti
- Kısa
- Ayrıntılı
- Bu video, bir eğitmen tarafından sunulan OpenGL programlama dili hakkında kapsamlı bir eğitim dersidir.
- Video, OpenGL'in tarihçesi ve temel kavramlarıyla başlayıp, matris dönüşümleri (model view matrisi, projeksiyon matrisi), kamera tipleri (perspektif, ortogonal, izometrik), projeksiyon türleri ve temel çizim komutlarını adım adım anlatmaktadır. Daha sonra poligon oluşturma teknikleri, anti-aliasing yöntemleri, poligon modları ve animasyon konularına geçilmektedir.
- Eğitim içeriğinde Tao kütüphanesi kullanımı, OpenGL fonksiyonlarının C dilinde nasıl çağrıldığı, glBegin ve glEnd komutları ile nokta, çizgi, üçgen ve dörtgen çizimi, poligon modları (flat, smooth) ve normal vektörler hakkında detaylı bilgiler verilmektedir. Ayrıca double buffer mekanizması ve hiyerarşik yapılar gibi ileri seviye konular da ele alınmaktadır.
- 00:02OpenGL'e Giriş
- OpenGL, platformlar arası bir uygulama programlama arabirimi (API) endüstri standardıdır.
- OpenGL'in özellikleri 1992 yılında tamamlanmış ve ilk uygulamaları 1993 yılında ortaya çıkmıştır.
- OpenGL, daha önce Silicon Graphics tarafından tasarlanmış ve desteklenmiş olan Iris adlı özel yapıya büyük ölçüde uyumluydu.
- 00:52OpenGL'in Tarihçesi
- Silicon Graphics, açık kaynaklı standart oluşturmak için çeşitli grafik donanımları şirketleri ile işbirliği yaptı ve yeni bir kütüphane oluşturdu.
- OpenGL'in evrimi, 1992 yılında Silicon Graphics tarafından oluşturulan OpenGL Mimarlık Değerlendirme Kurulu tarafından kontrol edilmektedir.
- ARRB'nin yardımcıları Silicon Graphics, Intel, Microsoft, IBM gibi şirketleri içeriyordu.
- 02:23OpenGL Sürüm Geçmişi
- 2008'de OpenGL 3 yeni içerik oluşturup yeni bir mekanizmayla geldi ve eski programlara desteğini kaldırdı.
- 2009'da OpenGL 3.1 çıkartıldı, shading language 1.4 sürümü çıktı ve fonksiyonların çoğu OpenGL 3.0 ile uyumsuz oldu.
- 2010'da OpenGL 3.3 çıktı, shading language sürümü OpenGL ile aynı hale getirildi ve şu anda OpenGL 4.59 sürümü kullanılmaktadır.
- 03:59OpenGL'in Çalışma Prensibi
- OpenGL sonsuz bir döngü içerisinde faaliyet gösterir ve klavye-fare olaylarını dinlemeye başlar.
- OpenGL sahneye sürekli noktalar, renkli çizgiler, dokulu üçgenler eklemeyi, animasyon yapmayı hedefler.
- OpenGL bir durum makinesi olarak adlandırılır çünkü programın yapılandırılmasının pek çok yolu var ve geçerli konfigürasyon OpenGL'in son durumlarında saklanır.
- 05:47Grafik Pipeline
- OpenGL'de grafik pipeline, birden çok modülün peş peşe çalıştırılmasıdır.
- Örneğin, bir araç tanımlandıktan sonra transform ile konumu değiştirilir, sonra kameradaki görüntüsü project edilir.
- Bu işlemler frame'ler arasında devam eder ve her frame için ayrı işlemler yapılır.
- 07:23OpenGL Arayüzü ve Sistemler
- OpenGL arayüzünde farklı sistemleri destekler vardır; X/Windows, Apple'ın Unix'in kullandığı sistemken, MSOS Windows sistemi için başka kütüphaneler kullanılır.
- C++ ve konsol uygulamaları geliştirirken GL kütüphanesi yardımcı olurken, C ile yazmaya başlandığında GL ve GLU kütüphaneleri kullanılır.
- OpenGL'de programlanabilir noktalar (shader noktaları) bulunmakta ve bu noktalardan özel programlar atanabilir.
- 08:53OpenGL'in Avantajları
- OpenGL bir yazılım ve bazı ayrıntıları gizler, kullanıcının grafiğin nasıl monitöre geldiğini endişelenmesine gerek kalmaz.
- Kullanıcı bir çizginin donanım bağımlı olarak nasıl piksellere dönüştürülüp ekranda nasıl çizildiği hakkında endişelenmesine gerek yoktur.
- OpenGL'in tasarım hedefleri yüksek performanslı, donanımca hızlandırılmış grafik uygulamaları geliştirme ortamı API olmasıydı.
- 10:53OpenGL ve DirectX Karşılaştırması
- OpenGL'nin temel kurulumu ekran kartını kurduğunuz zaman kendiliğinden geliyor ve sadece görüntüyü ekrana getirmeye çalışıyor.
- OpenGL üst düzey animasyon, modelleme, ses gibi özellikler sunmaz, ancak faydalı görüntüleme efektleri ve yüksek performans sağlar.
- OpenGL açık kaynaklı olması sayesinde Microsoft'a karşılık platform bağımsız, her platformda çalışabilir bir şey geliştirmeye çalışmıştır.
- 12:35OpenGL'de Matrisler
- OpenGL'de matrisler önemli bir rol oynar; projeksiyon matrisi (PR) kamera tipini belirler.
- Model view matrisi (MW) üç boyutlu sahnenin şu anki halini belirler ve 4x4 kare matrislerdir.
- PR matrisi MW matrisi içerisinde 16 tane değer tutar ve modelin köşe noktalarını içerir.
- 14:54Model View Matrisi ve Dönüşümler
- Modelin köşe koordinatları doldurulduktan sonra model view matrisi doldurulur ve kamera bakış açısı değiştirildiğinde bu matris işlenir.
- Döndürme işlemi için mevcut model matrisi bir R matrisi ile çarpılır, boyutlandırma için S matrisi kullanılır ve taşıma için T matrisi kullanılır.
- Sandalye sahneye yerleştirilirken, modelin noktaları tanımlanır, transformlarla model view matrisi oluşturulur ve projeksiyon mantısı ile kamera özellikleri ile çarpılarak ekrana yerleştirilir.
- 18:02OpenGL Koordinat Sistemi ve Matrisler
- OpenGL koordinat sistemi sağlık kuralına göre uyumludur ve kamera sahneye doğru bakan Z ekseni yönünde bakmaktadır.
- Dönüşüm matrisi sahnedeki tüm noktaları hareket ettirir ve model view matrisi bu işi yapar.
- OpenGL matrislerini bir stack bellekte tutmak zorundadır, push matrix ile matrisler stack'e atılır ve pop matrix komutları ile geri dönülebilir.
- 20:10Dönüşüm Komutları
- Öteleme komutu ile obje X, Y, Z koordinatlarına kadar hareket ettirilebilir.
- Döndürme komutu ile obje saat yönünün tersine döndürülür ve hangi eksende döndürüleceği belirlenir.
- Scale komutu ile obje büyütülür veya küçültülür, sabit bir oranla küçültmek için X, Y, Z değerleri tamamıyla aynı olmalıdır.
- 22:01Paylaşılan Dönüşümler ve Örnekler
- Model dönüşümleri birçok noktada diğer modellerle paylaştırılabiliyor, örneğin aracın tamamı belli bir dönüş yapacak, sonra tekerlekleri farklı açıya getirilecek.
- Tekerleklerin yönü hafifçe farklı yöne döndürülecekse belli bir noktada push matrix istenir ve belli noktalarda pop matrix komutu kullanılır.
- X, Y, Z eksenindeki dönüşler farklı etkiler verir: X eksenindeki dönüşler yana doğru düşüş, Y eksenindeki dönüşler sandalyenin yönünün değiştirilmesi, Z eksenindeki dönüşler sandalyenin arkaya doğru düşüşü gibi etkiler verir.
- 26:14OpenGL Fonksiyonları ve Parametreler
- OpenGL fonksiyonları C# Tao kütüphanesinde GL nesnesinin GL isimli başlayan metotlarıyla çağrılır.
- Fonksiyon isimleri parametrelerin türüne göre değişir: F ile biterse float noktalı sayı alıyor, I ile biterse tam sayı, B ile biterse byte, U ile biterse işaretsiz sekiz bitlik tam sayı alıyor.
- OpenGL'in fonksiyon yazım stili büyük harflerle yazılmış, değişkenler genelde sabitleri ifade eder ve sabit değerleri birleştirmek için aralarına bir or işareti konulur.
- 29:41OpenGL Temel Kullanımı
- OpenGL'de basit kullanım için pencere açıp projeksiyon parametrelerini ayarlamak, görüş açısını ve aydınlatmayı ayarlamak gerekir.
- Render döngüsünde kamera pozisyonu değişebilir veya değişmeyebilir, modelin görüntülenmesi kısmına geçilir.
- En basit örnek olarak dünya koordinatları içerisinde bir üçgen çizilebilir.
- 31:05Projeksiyon Türleri
- Tipik olarak perspektif projeksiyon kullanılır, uzak nesneler yakın nesnelere göre daha küçük görünür.
- Ekranın merkezinde ufuk çizgisi oluşturulur ve bu görüş alanının içerisinde kalanlar çizilir.
- Mühendislik çizimlerinde paralel projeksiyon veya izometrik projeksiyon kullanılır.
- 31:45Perspektif Projeksiyonu
- Perspektif projeksiyonu için öncelikle glMatrices modu glProjection'a alan bir komut gönderilir.
- GlLoadIdentity ile birim matris sıfırlanır ve glPerspective fonksiyonu çağrılır.
- Perspektif açısı, en-boy oranı, yakın ve uzak kesme düzlemleri parametreleri verilir.
- 32:56Aydınlatma ve Kamera Konumlandırma
- Aydınlatma ayarlamak için poligon veya köşelerin birbirinden farklı olması için mevcut renkleri değiştirmek en basit seçenektir.
- Üçgenin tamamını tek renkle doldurmak için glColor ile geçerli rengi verilir.
- Kamera konumlandırmak için model view matrisine geçilir ve glLoad fonksiyonu ile kameranın konumu yerleştirilir.
- 34:06Kamera Parametreleri
- Kamera parametrelerinde e (x, y, z) değerleri kameranın dünya koordinatlarında nerede durduğunu belirtir.
- Look (x, y, z) parametreleri kameranın nereye baktığını tam bakış noktasını belirtir.
- Up vektörü kamerayı nasıl tuttuğumuzu belirtir, genellikle 1 (y ekseninde düz) gönderilir.
- 36:12Çizim Komutları
- OpenGL'de bir dizi vermek için glBegin komutu, bitirmek için glEnd komutu kullanılır.
- GlBegin'in içerisine glPolygons verildiğinde üç nokta verilerek basit bir üçgen oluşturulabilir.
- GlPolygons'in içerisindeki tip bilgisi çizgi, çokgen, üçgen, dörtgen gibi olabilir.
- 37:07Çizim Türleri
- GlPoints ile noktalar oluşturulabilir, glLines ile iki nokta arasında çizgi çizilebilir.
- GlLinesStrip bir noktadan başlayıp nokta verdikçe çizmeye devam eder, glLinesLoop son nokta ile başlangıç noktasını birleştirir.
- GlTriangles ile üçgenler çizilebilir, glTrianglesStrip döşeme yapar gibi üçgenler oluşturur, glTrianglesFan merkez noktası etrafında yelpaze gibi görüntüler açar.
- 40:08Poligon Özellikleri
- Poligonlarda kenarlar birbirine kesmemesi gerekir, kesiyorsa basit bir çokgen değildir.
- Temel çokgenlerde içbükeylik dışbükeylik söz konusudur, nesne dışbükey ise içine veya kenarına konulan herhangi iki nokta arasına çizilen çizgi hiçbir şekilde nesnenin kenarına değmez.
- Poligonlarda sadece uç noktaları, sadece çizgiler ve tamamen içi dolu olarak da çizilebilir.
- 42:01Poligon Modları
- Poligonlarda ön ve arkası vardır, ön ve arkası ayrı ayrı tanımlanabilir.
- GlFront ve GlBack modları ile sadece ön yüz veya arka yüz çizilebilir.
- GlFillMode ile kenarları çizsin mi içini boyasın mı belirlenir, GlLineFillMode ile sadece kenarları çizilir.
- 43:25Normal Vektörler
- Normal vektör yüzeyin normali ne tarafa doğru bakıyorsa ön yüzü odur.
- GlEnable ve glNormalize komutları ile normallerin birim vektör olmasını garantileyebilirsiniz.
- Flat modda üçgenler sırıtır çünkü yüzeyin normaline göre çizilip üçgenin tamamı tek bir renkle doldurulur.
- 45:18Smooth Model
- Yumuşak geçişli bir model için üçgenlerin her noktasında ayrı normal tanımlanabilir.
- Smooth model seçildiğinde üçgenlerin birbirleri arasındaki geçiş düzeltilir.
- Normal vektörler genellikle model ile birlikte tanımlı bir dosya içerisinde gelir.
- 47:01Poligon Oluşturma ve Düzenleme
- Poligonlarda oluşan çatlaklar düzeltilemez, bunun için anti-aliasing yöntemi kullanılabilir.
- Poligon oluştururken T birleşimlerinden kaçınılmalı, çünkü bu poligonun düzgün çizilmemesine neden olur.
- En iyi çokgen üçgendir çünkü üçgen uzayda bükülemeyen bir nesne olarak düşünülür, dörtgen ise dört kenarı bükülebiliyor.
- 48:21Poligon Sayısı ve Performans
- Poligon sayısını minimum tutmak gerekir, çok fazla poligon verildiğinde frame per second (fps) düşer.
- 15 fps'e düştüğünde rahatsız edici bir görüntü oluşur, 60 fps idealdir ve akıcı bir animasyon yapılabilir.
- Tutarsız poligonlar tanımlandığında kullanıcı bunu mutlaka fark edecektir.
- 49:05Çokgen Çizim Yöntemleri
- GL_POLYGON komutu ile çokgen oluşturulduğunda, kenarları çizip içini boyayacak ve kenarla renkleri aynı olacak.
- Quad-strip yaparken ortak noktaları ortaya getirerek farklı bir dizilim yapılması gerekir, aksi halde yanlış çizim yapılacaktır.
- Quad-strip ile tasarruf sağlanır, örneğin 12 nokta yerine 8 nokta ile 3 dörtgen çizilebilir.
- 52:08Fan Çizimi ve Double Buffer
- Fan, ilk verilen noktayı ortak nokta olarak kabul edip yelpaze şeklinde üçgenler açar.
- Fan uzay mekânın uç noktasında, minarenin tepesinde veya kalem ucunda yapılabilir.
- Double buffer mekanizması, bir görüntü ekranda görüntülenirken arka planda bir sonraki frame işlenmesini sağlayarak animasyonlarda akıcılık sağlar.
- 53:39OpenGL Örneği ve Matris Kullanımı
- OpenGL programında push matrix, model view matrisini istek bölgesine atıp bozarak hiyerarşik yapılar oluşturmayı sağlar.
- Omuzdan dirseğe kadar olan kısım translate ve rotate ile hareket ettirilir, sonra eski pozisyonuna alınır.
- Dirsekten bileğe kadar olan kısım da benzer şekilde hareket ettirilir ve ölçeklendirilerek çizilir.
- 57:56Matris Kullanımının Önemi
- Push ve pop matrisler, hiyerarşik yapılar oluşturmak için gerekli olur.
- Örneğin bir helikopterin pervanesini döndürürken push mantığı bol miktarda kullanılır.
- Bu derste OpenGL'e giriş örneği verilmiş ve bu fonksiyonların bol bol kullanılacağı belirtilmiştir.