2 - realtime programlamaya giriş = windows yazılımına opengl entegrasyonu

2 - realtime programlamaya giriş = windows yazılımına opengl entegrasyonu

chrome_nickel

[url]http://www.kadirilkimen.com/depot/oyun_gelistirme_dersler/temel_opengl.rar[/url]

buradaki kodlarımızda, basit windows programımıza en temel opengl sistemini entegre ettik. dosyadaki kodlarda adım adım hangi kodu neden eklediğimizi açıklamaya çalıştım. ama kısaca burda da açıklayacağım.

ilk olarak kendimize bizim istediğimiz özellikleri taşıyan bir pixel formatı tanımlıyoruz.

sonra, grafik donanımımıza bizim ana penceremizin görüntüsünün windows´a, yani işlemci ve ram´e gönderilmeden direkt ekran kartından monitöre gönderileceğini tanımlıyoruz
( HDC = device context )

sonraki adımda windows´a ana penceremizi görüntülerken bizim belirlediğimiz pixel / görüntü özelliklerini baz almasını emrediyoruz. ( pixelformat )

sonra, ekran kartına HDC ile tanıtılan ana penceremizin içine ekran kartının opengl render sonucunu çizmesini istiyoruz.
( HRC = rendering context )

sonrasında, sahnemize bakacağımız açıyı belirliyoruz.
opengl´nin temel ayarlarını yapıp
perspektif derinliğini belirleyen ayarlarımızı yapıp
program penceresini görünebilir yaparak ( ShowWindow ) opengl´yi de başlatmış oluyoruz.

böylece, HDC ve HRC ile tanımladığıklarımıza dayanarak,
ekran kartı ona sunduğumuz 3d nesneleri, belirlediğimiz bakış açısından render yapıp, HDC ile tanıpladığımız ana penceremize aktarmasını sağlıyoruz.

ama biz sadece buna hazır hale getiriyoruz. bu ayarlardan sonra, biz opengl´ye bir 3d sahne vermedikçe, veya render işlemini tekrar yap demedikçe bize hiç bir şey göstermeyecektir.

programımızın sürekli çalışmasını sağlayan while döngümüz içerisindeki yeni kodlarımız, bu sürekli render işine yarıyor.

swapBuffers : ekran kartının render yaptığı bir görüntü varsa, bunu ön belleğe, ön bellekte bir görüntü varsa bunu ekrana aktarmaya yarıyor. böylece, yeni bir render olmadan eskisini görmeyeceğimizden, ekranda sürekli bir görüntü oluşacak.

glClear : opengl´yi başlatırken tanımladığımız arka plan rengini, her render işleminden önce bu fonksiyonu kullanarak render sonucunun tutulduğu tampon belleği temizliyoruz.
glLoadIdentity : opengl´nin ayarları değiştirilmişse, en son yapılan ayarları yüklüyoruz

benim programa dahil ettiğim SahneCiz fonksiyonu : bu fonksiyonun içeriğini main.cpp dosyasında en altta tanımladım. şimdilik ordaki kodların üzerine eğilmeyelim. sonra bakıcaz. orda basitce ekrana bir grid mekanizması çizdiriyoruz.
bu kodlar her while döngüsünde tekrarlandığından, sahnede program akışı içinde bir değişiklik olsa, anında render sonucu değişicek ve biz akıcı olarak anında penceremizde görebilicez.

2006-08-25 02:46:03