Not: Bu yazıyı baya uzun bir süre önce(2 sene önce) java.sun.com sitesindeki bir dökümandan kendime göre yorumlamıştım. Java3D o günden bugüne baya yenilikler gerçekleşti. Ama dökümanın genel anlamını kaybetmedigi düşünerek yayınlıyorum. Tabiki çevirideki eksikliklerden ve anlam bozukluklarından dolayı affola
Java3D' nin sağlayamadığı bazı özellikler
Java3D Çarpışmalar, sensörler, geometri sıkıştırma, 4D uzaysal müzik ( ve çoklu görünüm içermiyor
javax.media.j3d package içerisinde bir çok class(Core java3D) virtual universe oluşturuyor. com.sun.j3d.utils ise core Java3D nin sağladığı low level üzerine çok güçlü eklemeler getiriyor.
a) Content Loader(İçerik yükleyici lwo,lws,obj vs...)
b) Scene Graph Constructions aids (Görüntü Ağacını Oluşturmak için yardımcı sınıf)
c) Geometri Sınıfları
d) Convenience utilities
Sanırsam belli başlı utility classları ileride core Java3D paketinin içine taşınacak mesela NURBS gibi.
java.awt renderleme yapacağımız ekranı oluşturabilmek için javax.vectmath (data structures) points,vectors,matris ve matematiksel objeleri saklamamız için classları içerir.
Neden bu scene graph yapısı derseniz. Sizin ekranda tanımlayacağınız her türlü Objeyi (geometry,ses,ışık,********,orientation,görünüm) tutan ve bu nesnelere ulaşıp değiştirmenizi sağlayan temel sınıf.
OpenGL' den farkı ise biz sahnedeki cisimlerimizi devamlı olarak erişim yapabilmemiz için kendi veri yapımızı oluşturmamız ve orada saklamamız gerekiyor ama Java3D 'de zaten bu yapı hazır ve grafik için spesifikleştirilmiş, yapmamız gereken sadece ekle, değiştir ve çıkar gibi işlemler. İkinci önemli fark ise renderleme işleminda hangi nesnenin önce renderleneceğine kendisi karar veriyor sizin herhangi bir etkiniz yok, ama optimisasyon icin tekrar tekrar kullanılacak matris çarpımlarını, çarpıp diğer bir matriste saklayarak onu kullanıyor.
Scene Graph Java3D classının instance kullanılarak oluşturulur.Scene graph yapısı ağaç şeklinde ve nodelar arasında(parent-child relationsip/reference relationship) ilişkileri içerir.
SceneGraph 2 tane önemli Branch(dal) graph' a sahip birincisi
- Viewing(kamera pozisyonu ve yönü)
- Contents(geometri,görünüm,davranış,konum,müzik,ışık)
Bir java3D uygulaması yazmanız için gerekli olan adımlar
1. Canvas3D nesnesi yaratılır
2. VirtualUniverse nesnesi yaratılır
3. Locale nesnesi oluşturularak VirtualUniverse nesnesine eklenir
4. view branch graph oluşturulur
a. View nesnesi yaratılır
b. ViewPlatform nesnesi yaratılır
c. PhysicalBody nesnesi yaratılır
d. PhysicalEnvironment nesnesi yaratılır
e. ViewPlatform, PhysicalBody, PhysicalEnvironment, ve Canvas3D nesneleri View nesnesi eklenir
5. Content branch graph(s) oluşturulur
6. Branch graph(s) Compile edilir
7. Subgraphs Locale eklenir.
Eğer SimpleUniverse oluşturursak kullanırsak işin viewing kısmıyla hiç uğraşmadan viewing sabitlenir şimdilik tüm örneklerde bu kullanılmış. Buda uyulması gereken adımları kısaltıyor.
1. Canvas3D nesnesi yarat
2. SimpleUniverse nesnesini yarat
3. Birinci adımda yarattığımız Canvas3D nesnesini SimpleUniverse nesnesine referans olarak geçir
4. SimpleUniverse nesnesini düzenle
5. Content branch oluştur
6. Content branch graph Compile et
7. Content branch graph SimpleUniverse2in Locale'ine ekle