Not: Bu yaziyi baya uzun bir süre önce(1 sene önce) java.sun.com sitesindeki bir bu tutoriallı açıklamaya çalış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
Bu tutorial nesnelere nasıl transformation yani(rotate, translate, scale) uygulandığını görebilirsiniz.Aslında translate ve scale gibi dönüşüm operasyonları bu örnekte yok ama mantık Javax.media.j3d dönüşümler ile ilgili spesifikasyonlara ulaşabilirsiniz.
i
NOT: Scene.Compile ne işe yarıyor diye sorarsanız. Mesela siz iki tane TranformGroup tanımladınız aslında bunlar iki matrıs ve çarpılması gerekiyor. Compile işlemi bunları bir defa çarparak tek bir matrise dönüştürüyor aksi takdirde her ekran değişikliğinde tekrar hesaplanması demektir ki bu da verimliliği düşürür.
Kaynak Kod: HelloJava3db.java
Bu tutorial nesnelere nasıl transformation yani(rotate, translate, scale) uygulandığını görebilirsiniz.Aslında translate ve scale gibi dönüşüm operasyonları bu örnekte yok ama mantık Javax.media.j3d dönüşümler ile ilgili spesifikasyonlara ulaşabilirsiniz.
i
Kod:
mport java.applet.Applet; import java.awt.BorderLayout; import java.awt.Frame; import java.awt.event.*; import com.sun.j3d.utils.applet.MainFrame; import com.sun.j3d.utils.universe.*; import com.sun.j3d.utils.geometry.ColorCube; import javax.media.j3d.*; import javax.vecmath.*; public class HelloJava3Da extends Applet { public HelloJava3Da() { setLayout(new BorderLayout()); Canvas3D canvas3D = new Canvas3D(null); add("Center", canvas3D); BranchGroup scene = createSceneGraph(); //Content kısmı compile edilir. scene.compile(); SimpleUniverse simpleU = new SimpleUniverse(canvas3D); simpleU.getViewingPlatform().setNominalViewingTransform(); simpleU.addBranchGraph(scene); } public BranchGroup createSceneGraph() { //SceneGraph() için bir BranchGroup tipinde bir kök nesnesi oluşturulur. BranchGroup objRoot = new BranchGroup(); // iki tane transform3D nesnesi oluşturulur //aslında üzerinde değişiklik yapılmamış [4*4] lük matrixler oluşturur Transform3D rotate = new Transform3D(); Transform3D tempRotate = new Transform3D(); //X ekseninda 45 derece döndür //Aslında yapılan işlem //[1,0,0 ] //[0,cos45,-sin45,0] MATRISINI OLUŞTURMAK //[0,sin45,cos45,0 ] //[0,0,0,1 ] rotate.rotX(Math.PI/4.0d); tempRotate.rotY(Math.PI/5.0d); //sonrada yaptığı iki rotation matrisini birbiriyle çarpıyoruz rotate.mul(tempRotate); //Bir transformGroup nesnesi oluşturulur //ve ne tip bir transformation yapacağı constructor geçirilir. TransformGroup objRotate = new TransformGroup(rotate); //Bu TransformGroup nesnesine küp nesnesi eklenir. objRotate.addChild(new ColorCube(0.4)); // Daha sonrada transformgroup nesnesi kök dizinine eklenir. objRoot.addChild(objRotate); return objRoot; } public static **** main(String[] args) { Frame frame = new MainFrame(new HelloJava3Da(), 256, 256); } }
NOT: Scene.Compile ne işe yarıyor diye sorarsanız. Mesela siz iki tane TranformGroup tanımladınız aslında bunlar iki matrıs ve çarpılması gerekiyor. Compile işlemi bunları bir defa çarparak tek bir matrise dönüştürüyor aksi takdirde her ekran değişikliğinde tekrar hesaplanması demektir ki bu da verimliliği düşürür.
Kaynak Kod: HelloJava3db.java