Di dalam grafika komputer, 3D merupakan bentuk grafik yang menggunakan representasi data geometri tiga dimensi. Sebagaimana definisi grafika komputer, grafik 3D ini tersimpan di dalam komputer untuk keperluan
kalkulasi dan rendering gambar 2D. Berbeda dengan dukungan grafik 2D yang sudah built-in, dukungan Java terhadap grafik 3D diletakkan ke dalam API terpisah, yakni Java3D. Java3D merupakan API 3D berbasis scene graph di platform Java, di mana scene graph merupakan sebuah pohon yang berisi hierarki data scene. Di dalam API Java3D didefinisikan sejumlah kelas dan interface yang menyediakan beragam operasi grafik 3D.
Konsep scene graph merupakan inti dari Java3D. Sebuah scene graph merupakan grafik yang merepresentasikan geometri, material, dan pencahayaan.
Scene graph dimulai dari root dengan sebuah VirtualUniverse dan mencakup transformasi serta geometri untuk mendefinisikan objek di dunia maya. Secara garis besar, ada tiga tahap fundamental yang diperlukan untuk menghasilkan objek 3D.
• Menciptakan objek Canvas3D
• Menciptakan sebuah scene graph
• Menghubungkan objek Canvas3D ke objek BranchGroup yang menunjuk root dari scene graph.
Ini adalah contoh penggunaan java dalam objek 3D [KUBUS] sehingga mampu melakukan rotasi melalui
gerakan kursor ke arah objek.
Scene graph dimulai dari root dengan sebuah VirtualUniverse dan mencakup transformasi serta geometri untuk mendefinisikan objek di dunia maya. Secara garis besar, ada tiga tahap fundamental yang diperlukan untuk menghasilkan objek 3D.
• Menciptakan objek Canvas3D
• Menciptakan sebuah scene graph
• Menghubungkan objek Canvas3D ke objek BranchGroup yang menunjuk root dari scene graph.
Ini adalah contoh penggunaan java dalam objek 3D [KUBUS] sehingga mampu melakukan rotasi melalui
gerakan kursor ke arah objek.
Dibawah ini Kode Programnya
———listening program——–
———listening program——–
/*
*
* @uthor nanang triwahyudi
* @mail: nanank123@gmail.com
*
*/
import java.awt.*;
import javax.swing.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.behaviors.mouse.*;
import com.sun.j3d.utils.universe.SimpleUniverse;
import com.sun.j3d.utils.geometry.ColorCube;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import javax.media.j3d.Canvas3D;
import javax.swing.JFrame;
import java.awt.*;
import javax.swing.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.behaviors.mouse.*;
import com.sun.j3d.utils.universe.SimpleUniverse;
import com.sun.j3d.utils.geometry.ColorCube;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import javax.media.j3d.Canvas3D;
import javax.swing.JFrame;
public class RotasiMouse extends JFrame {
public RotasiMouse() {
super(“Demo Rotasi Kubus”);
Canvas3D canvas3D = createCanvas3D();
BranchGroup scene = createSceneGraph();
connect(canvas3D, scene);
}
public RotasiMouse() {
super(“Demo Rotasi Kubus”);
Canvas3D canvas3D = createCanvas3D();
BranchGroup scene = createSceneGraph();
connect(canvas3D, scene);
}
// 1. Menciptakan kanvas 3D
private Canvas3D createCanvas3D() {
setSize(300, 300);
getContentPane().setLayout(new BorderLayout());
GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
Canvas3D canvas3D = new Canvas3D(config);
setSize(300, 300);
getContentPane().add(canvas3D);
return canvas3D;
}
// Menciptakan scene graph
private BranchGroup createSceneGraph() {
// Menciptakan transformasi group
Transform3D transform = new Transform3D();
transform.set(new Vector3d(0.0, 0.0, -50.0));
TransformGroup tg = new TransformGroup(transform);
private Canvas3D createCanvas3D() {
setSize(300, 300);
getContentPane().setLayout(new BorderLayout());
GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
Canvas3D canvas3D = new Canvas3D(config);
setSize(300, 300);
getContentPane().add(canvas3D);
return canvas3D;
}
// Menciptakan scene graph
private BranchGroup createSceneGraph() {
// Menciptakan transformasi group
Transform3D transform = new Transform3D();
transform.set(new Vector3d(0.0, 0.0, -50.0));
TransformGroup tg = new TransformGroup(transform);
// Transformasi sumbu X
Transform3D rotXTransform = new Transform3D();
rotXTransform.rotX(Math.toRadians(20.0));
Transform3D rotXTransform = new Transform3D();
rotXTransform.rotX(Math.toRadians(20.0));
// Transformasi sumbu Y
Transform3D rotYTransform = new Transform3D();
rotYTransform.rotY(Math.toRadians(20.0));
Transform3D rotYTransform = new Transform3D();
rotYTransform.rotY(Math.toRadians(20.0));
// Kombinasi rotasi ke dalam transformasi
Transform3D rtf = new Transform3D(rotXTransform);
rtf.mul(rotYTransform);
TransformGroup rg = new TransformGroup(rtf);
tg.addChild(rg);
ColorCube cube = new ColorCube(7.0f);
BranchGroup objRoot = new BranchGroup();
rg.addChild(cube);
Transform3D rtf = new Transform3D(rotXTransform);
rtf.mul(rotYTransform);
TransformGroup rg = new TransformGroup(rtf);
tg.addChild(rg);
ColorCube cube = new ColorCube(7.0f);
BranchGroup objRoot = new BranchGroup();
rg.addChild(cube);
// Menciptakan handler/behavior mouse rotate
rg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
rg.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
MouseRotate mr = new MouseRotate(rg);
mr.setSchedulingBounds(new BoundingSphere(
new Point3d(0, 0, 0), Double.MAX_VALUE));
rg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
rg.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
MouseRotate mr = new MouseRotate(rg);
mr.setSchedulingBounds(new BoundingSphere(
new Point3d(0, 0, 0), Double.MAX_VALUE));
objRoot.addChild(mr);
objRoot.addChild(tg);
objRoot.compile();
return objRoot;
}
// Mengaitkan kanvas dan branch group
private void connect(Canvas3D canvas3D, BranchGroup scene){
SimpleUniverse simpleU = new SimpleUniverse(canvas3D);
simpleU.getViewingPlatform().
setNominalViewingTransform();
simpleU.addBranchGraph(scene);
}
public static void main(String[] args) {
new RotasiMouse().setVisible(true);
}
}
———akhir script———
objRoot.addChild(tg);
objRoot.compile();
return objRoot;
}
// Mengaitkan kanvas dan branch group
private void connect(Canvas3D canvas3D, BranchGroup scene){
SimpleUniverse simpleU = new SimpleUniverse(canvas3D);
simpleU.getViewingPlatform().
setNominalViewingTransform();
simpleU.addBranchGraph(scene);
}
public static void main(String[] args) {
new RotasiMouse().setVisible(true);
}
}
———akhir script———
Berikut ini code program rotasi kubus diatas: [simpan dengan namaRotasiMouse.java]