mavzermete 1
mavzermete
Fethi Polat 1
Fethi Polat
noisiv 1
noisiv
Manwe Work 1
Manwe Work
Scarlet 1
Scarlet
Hikaye Ekle

3D Nedir? (atqkan98)

  • Konuyu başlatan Konuyu başlatan atqkan98
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 2
  • Görüntüleme Görüntüleme 367

HERAKLES Otomatik Avlı kalıcı sunucu. 19 Haziran'da açılıyor. Atius & Wizard güvencesiyle hemen kayıt ol, ön kayıt ödülleri aktif. HEMEN TIKLA!

Eminim herkes şu oyunlar nasıl yapılıyor yada şu film efektleri nasıl yapılıyor diye sormuştur. Bu yazıdan sonra 3D grafiklerin ne olduğunu kabaca öğrenmiş olacaksınız. Yazılarımızın diğer serilerinde ise 3D grafik çizimleri ile ilgili değişik uygulamalar yapacağız. 3D uygulamaları için Donanım olarak yeterli bir makineye sahip olmamız gerekir. Eskiden bu büyük bir sorundu ama artık standart ev makinelerinin ekran kartları yeterince güçlü ve temel 3D uygulamalarını zorlanmadan çalıştırabilmekteler. Yazılım olarak ise her 3D uygulaması ya işletim sistemi tabanlı ( DirectX gibi ) ya da software tabanlı kaynaklara ihtiyaç duymaktadır. Herhangi bir 3D oyununuz Directx kullanarak da çalışabilirken bazen DirectX tek başına yeterli olmayabilir.

3D uygulamarı için OpenGL standardı gelmiştir. Burada Open free, açık anlamında GL ise Graphics Library anlamındadır.OpenGL kütüphaneleri SGI tarafından C/C++ dili kullanılarak yapılmıştır. Ancak OpenGL düşük seviyeli fonksiyonları içermektedir. SGI OpenGL kütüphanelerinin üzerine ayrıca Open Inventor adını verdiğimiz kütüphaneleri geliştirmiştir. Open Inventor ile C++ Object Oriented gücü ile yazılımlarımızı çok daha hızlı ve güzel geliştirebiliriz. Yazılarımızda Open Inventor toolkit' ini kullanacağız. Oyun ya da ileri grafik uygulamaları ya Open Inventor ya da Open Inventor tarzında daha gelişmiş grafik kütüphaneleri kullanmaktadır. Bu standart artık neredeyse heryerde kabul edilmiştir. Başka dilde geliştirilen kütüphaneler bile OpenGL veya Inventor kütüphanelerini temel almaktadır.

Size şaşırtıcı gelebilir ama 3D graphics işinde matematik neredeyse geliştirdiğiniz projenin %50 sinden fazla zamanını alır. Bundan dolayı sağlam matematik temeli olmayan insanların 3D graphics de başarılı olmaları pek mümkün değildir. İleri yazılarımızda size simülasyonların temelini oluşturan matematiği ve bunların koda nasıl aktarılacağını göstereceğim. Başlamadan önce indirmeniz gerekenler :

(linkinden SoQt 1 , Coin 1 ,Simage-1 indirin )



Bunları kurduktan sonra makineniz OpenGL ile neredeyse her türlü hayalinizi yapabileceğiniz duruma gelecektir. Ayrıca uygulamalarınızda yanınızdan ayıramayacağınız help dosyasını da buradan indirebilirsiniz tıklayın.

ÇİZİM DEĞİL NESNE

Görüntüleme sınıfları : QT ve XT
QT ve XT Sınıfları görüntüleme için gerekli kütüphaneleri ve fonksiyonları barındıran en önemli sınıflardandır. Inventorun burada bize sağladığı en büyük yararlardan birisi de low level sınıflar ile herhangi bir şekilde bizi muhatap kılmamasıdır. Herşey kullanıcıya kolaylık sağlayan arayüzler ile halledilmektedir. Şimdi XT veya QT kütüphanelerinin fonksiyonlarını nasıl kullanabiliriz onları bir tanıtalım.Aşağıda gördüğünüz kod SGI grafik uygulamalarında yer alan en temel örnektir! Ekran açmaktan başka hiçbirşey yapmaz. Dilerseniz header' ları ve içeride kullandığımız fonksiyonları inceleyelim.

Inventor/SoQt.h headerimiz 3D uygulamaları için gerekebilecek temel sınıfları ve fonksiyonları barındıran en önemli class' tır.Aklınıza gelebilecek her türlü işlem için SoQt header' ı içindeki fonksiyonlara ve tanımlara başvurulacaktır. Detaylarında kaybolmayın, 3D uygulamaları için C++ gurusu olmanız gerekmiyor!

Window ve Viewer :

// Herhangi bir yerde bulabileceginiz en basit SGI uygulaması
// Ana kütüpaneler için SoQt headerini ekliyoruz
#include <Inventor/Qt/SoQt.h>
// Viewer için Qt nun Viewerini kullanıyoruz
// Plane viewer,full viewer,fly viewer gibi birçok değişik viewer daha vardır.
// Biz görüntüleri
#include <Inventor/Qt/viewers/SoQtExaminerViewer.h>
main(int , char **argv)
{
// SoQt kütüphanelerini çağırıyoruz aşağıda ki 2 satır window açabilmek için gerekli fonksiyonları harekete geçirmektedir

Widget myWindow = SoQt::init(argv[0]);
if (myWindow == NULL) exit(1);
// SoQt kütüphanelerinin altında görüntüleme için gerekli fonksiyonu çağırıyoruz
// Aşağıda ki satır ile nesnelerimizi görebilecegimiz myViewer nesnesi oluşturuluyor
SoQtExaminerViewer *myViewer = new SoQtExaminerViewer(myWindow);
// Aşağıda ki satırda penceremize ad veriyoruz
// myViewer nesnesinin setTitle özelliğini değiştirerek
myViewer->setTitle("Pencereme ad verelim");
// myViewer nesnesini show fonksiyonunu çalıştırıyoruz.
// Ancak bu fonksiyonun çağırılması ekranda görüntülüme başladığı anlamında değildir
// SoQt kütüphaneleri aracılığı ile "window" oluşturulması gerekmektedir
myViewer->show();
// Aşağıda ki SoQt (yukarıda ki show fonksiyonu ile karıştırmayın) show fonksiyonunu kullanarak
// ExaminerViewerin gösterilebileceği bir window oluşturuyor
SoQt::show(myWindow);
// Görüntünün devamlı bir şekilde yenilenmesi için mainloop fonksiyonunu da çağırdıktan sonra
// Penceremizi elde ederiz
SoQt::mainLoop();
}



Nesneleri oluşturuyoruz !!

Buraya kadar herşey kolaydı sadece bir window açtık ve examinerviewer dediğimiz görüntüleme aracını oluşturduk. Şimdi dünyamızı oluşturmak için neler yapmamız gerekiyor onlardan bahsedeceğim. Yukarı da bahsettiğim gibi grafik programlama da çizim diye bir şey yoktur herşey nesnedir. (ne demek istediğimi ileriki yazılarda daha iyi anlayacaksınız.)

3D dünyamızda herşeyi nesnelerle tanımlamaktayız. Nesnelerimizin renk, pozisyon, malzeme,... gibi aklınıza gelebilecek çeşitli özellikleri vardır. İşleri daha basitleştirmek için ve aynı dili konuşmak için ise OpenGL notasyonu geliştirilmiştir bu sayede hem kod geliştirici hem de işin teorik kısmını geliştirenler birbirleri ile daha iyi anlaşabilirler. İçi boş veya sadece düz çizgi olan bir daire üst nesneleri tanımlarken birbirine dönük oklu daireler ise pozisyonları tanımlamaktadır. Bundan sonraki yazılarımızda bunlara daha da aşina olacaksınız. Bu bir standart olarak kabul edilmiş ve böyle uygulanmaktadır. Aşağıda ki uygulamamızda su molekülünü modelliyoruz. Inventor su moleküllerine low-level bir uygulama olarak değil (şu noktayı çiz renk matrisini şöyle doldur...) bir kimyacı gibi bakmaktadır (elimde 2 küçük 1 tane büyük küre var renkleri şu, uzayda pozisyonları ...).Elbette işin detayında low-level olarak yapılmaktadır bütün işlemler. Nesneleri örnek kodumuzu yazarken daha detaylı inceleyeceğiz
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst