Showing posts with label Java. Show all posts
Showing posts with label Java. Show all posts

Thread

Sunday, July 24, 2016 Add Comment
Thread
Thread merupakan sebuah intruksi yang dapat berjalan sendiri. Thread mempunyai siklus dari awal sampai akhir. Pada umumnya, thread digunakan untuk multitasking, networking, ataupun yang melibatkan proses secara konkuren.

Multithreading adalah suatu kemampuan yang memungkinkan beberapa kumpulan instruksi dapat dijalankan secara bersamaan dalam sebuah program. Untuk membuat thread baru yang terpisah dari thread utama, maka harus membuat class baru yang merupakan turunan dari kelas thread atau mengimplementasikan interface runnable

Contoh program :
Buat kelas dengan nama HalloThread.java
public class HalloThread extends Thread{
	String s;
	
	public HalloThread(String s) {
		// TODO Auto-generated constructor stub
		this.s = s;
	}
	
	@Override
	public void run() {
		// TODO Auto-generated method stub
		for(int i=0;i<10;i++){
			System.out.println(s+" "+i+" : Hallo");
			try {
				sleep(300);
			} catch (Exception e) {
				// TODO: handle exception
			}
		}
	}
}
Buat kelas lagi dengan nama TesHallo.java
public class TesHallo {
	public static void main(String[]args){
		HalloThread h1 = new HalloThread("TH 1");
		HalloThread h2 = new HalloThread("TH 2");
		HalloThread h3 = new HalloThread("TH 3");
		h1.start();
		h2.start();
		h3.start();
	}
}

Output :

TH 1 0 : Hallo
TH 3 0 : Hallo
TH 2 0 : Hallo
TH 3 1 : Hallo
TH 1 1 : Hallo
TH 2 1 : Hallo
TH 2 2 : Hallo
TH 3 2 : Hallo
TH 1 2 : Hallo
TH 3 3 : Hallo
TH 1 3 : Hallo
TH 2 3 : Hallo
TH 2 4 : Hallo
TH 3 4 : Hallo
TH 1 4 : Hallo
TH 2 5 : Hallo
TH 3 5 : Hallo
TH 1 5 : Hallo
TH 2 6 : Hallo
TH 1 6 : Hallo
TH 3 6 : Hallo
TH 2 7 : Hallo
TH 3 7 : Hallo
TH 1 7 : Hallo
TH 3 8 : Hallo
TH 1 8 : Hallo
TH 2 8 : Hallo
TH 2 9 : Hallo
TH 3 9 : Hallo
TH 1 9 : Hallo

Input dan Output File di Java

Sunday, June 19, 2016 1 Comment
File merupakan urutan data yang digunakan untuk melakukan encode informasi digital untuk urusan penyimpanan dan pertukaran data. Di Java, terdapat kelas FileInputStream dan FileOutputStream yang digunakan untuk menangani proses input-output. FileInputStream digunakan untuk membaca data dari file yang merupakan turunan langsung dari class InputStream, sedangkan FileOutputStream untuk menuliskan data ke file merupakan turunan langsung dari class OutputStream.

FileInputStream input = new FileInputStream("path..."); 
FileOutputStream output = new FileOutputStream("path...");

Berikut adalah contoh program sederhana untuk membaca, menulis dan mencopy file.
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;

public class IOFile {
    
    FileOutputStream out = null;
    FileInputStream input = null;
    int data;
    String copy ="";
    
    public void tulisFile(String data){
        try {
            out =  new FileOutputStream("C:/Users/Wim/juno/PraktikumSister/wim_asli.txt");
        } catch (FileNotFoundException e) {
            System.out.println(e.getMessage());
        }
        
        //menulis
        try {
            for (int i = 0; i < data.length(); i++) {
                //konversi data
                out.write((int)data.charAt(i));
            }
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
        //tutup
        try {
            out.close();
        } catch (Exception e) {
        }
    }
    
    public void bacaFile(String namaFile){
        //membuka file
        try {
            input = new FileInputStream("C:/Users/Wim/juno/PraktikumSister/"+namaFile+".txt");
        } catch (FileNotFoundException e) {
            System.out.println("File tidak ditemukan !");
        }
        
        try {
            while ((data = input.read())!= -1) {                
                System.out.print((char)data);
                copy += String.valueOf((char)data);
            }
            System.out.println("");
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
        //tutup
        try {
            out.close();
        } catch (Exception e) {
        }
    }
    
    public void copyFile(){
        try {
            out =  new FileOutputStream("C:/Users/Wim/juno/PraktikumSister/wim_tiruan.txt");
        } catch (FileNotFoundException e) {
            System.out.println(e.getMessage());
        }
        
        //menulis
        try {
            for (int i = 0; i < copy.length(); i++) {
                //konversi data
                out.write((int)copy.charAt(i));
            }
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
        //tutup
        try {
            out.close();
        } catch (Exception e) {
        }
    }
    
    public static void main(String[] args) {
     InputStreamReader in = new InputStreamReader(System.in);
 BufferedReader br = new BufferedReader(in);
  
 IOFile iofile = new IOFile();
       String data = "";
        
        System.out.println("--------------------------------");
        System.out.println("-----I/O File------");
        System.out.println("--------------------------------\n");
        
  try {
   System.out.print("Input data : ");
   data = br.readLine();
   iofile.tulisFile(data);
   System.out.print("Isi file asli : ");
   iofile.bacaFile("wim_asli");
   
   System.out.print("Copy data? (y/t) : ");
   String pilih = br.readLine();
   
   if(pilih.equalsIgnoreCase("y")){
    iofile.copyFile();
    System.out.print("Isi file tiruan : ");
    iofile.bacaFile("wim_tiruan");
   }else{
    System.exit(0);
   }
   
  } catch (Exception e) {
   // TODO: handle exception
  }
    }
}


Output :

Membuat Animasi 3D dengan Java 3D

Saturday, May 21, 2016 Add Comment
Kali ini saya ingin sharing project akhir di mata kuliah grafika komputer. Beberapa waktu lalu di beberapa postingan saya sempat membahas tentang 3D, dan ini mungkin postingan yang terakhir tentang Java3D. Karena sudah memasuki tahap akhir atau final jadi saya share aja project akhir saya, sifatnya open source jadi siapa saja boleh mengutak-atik source codenya.

Ini beberapa screenshot mengenai project akhir tentang grafika komputer. Jadi ceritanya ada orang berjalan, kemudian dari arah berlawanan datang mobil melaju. Mobil tersebut menabrak orang, kemudian orang itu mati lalu terkubur menjadi tanah. Dan pada akhirnya tumbuh menjadi pohon. Cerita dan ilustrasi ini hanyalah rekayasa atau imajinasi saya sendiri heheh…




Source codenya bisa dilihat disini https://gist.github.com/wimsonevel/d324f7786374de5c01b63d6b7cc3e1b1

Semoga bermanfaat.

Membuat Animasi Mobil 3D dengan Java 3D

Thursday, May 19, 2016 Add Comment
Halo guys, kali ini saya mau share project kuliah saya dulu. Masih di grafika komputer, saya membuat kerangka mobil 3D dengan Java 3D dan ini lumayan sulit. Sulitnya itu karena kita harus menggambar manual mulai dari bentuk shape dan pola-polanya. Kalau di Java 3D kita bisa menggunakan Point3f. Dengan Point3f kita bisa membuat kerangka bentuk 3D dengan menyatukan titik-titik atau koordinat x, y, z, maka terbentuklah bidang geometrinya.

Kemudian untuk mengatur animasinya menggunakan kelas Alpha dan PositionInterpolator.

Oke meluncur ke TKP gan.
/**
 *
 * @author Wim Sonevel
 */
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.behaviors.mouse.MouseRotate;
import com.sun.j3d.utils.geometry.GeometryInfo;
import com.sun.j3d.utils.geometry.NormalGenerator;
import com.sun.j3d.utils.geometry.Cylinder;
import com.sun.j3d.utils.geometry.Box;
import com.sun.j3d.utils.universe.*;
import java.awt.*;
import javax.media.j3d.*;
import javax.swing.*;
import javax.vecmath.*;
public class Mobil3D extends JApplet{

    TransformGroup mobil, badan, tban1, tban2, roda1, roda2, roda3, roda4;
    TransformGroup rot;
    TransformGroup kaca;

    Transform3D trans = new Transform3D();
    Vector3f vector = new Vector3f();

    Box box;
    Cylinder silinder;
    
    public Mobil3D(){
        setLayout(new BorderLayout());
        GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
        Canvas3D canvas = new Canvas3D(config);
        add("Center",canvas);

        BranchGroup scene = createSceneGraph();
        scene.compile();

        SimpleUniverse simU = new SimpleUniverse(canvas);
        simU.getViewingPlatform().setNominalViewingTransform();
        simU.addBranchGraph(scene);
    }

    Appearance apr(float r, float g, float b){
        Color3f red = new Color3f(r,g,b);
        Color3f black = new Color3f(0.0f,0.0f,0.0f);
        Color3f white = new Color3f(1.0f,1.0f,1.0f);
        //mix warna
        Material material = new Material(red, black, red, white, 100);
        Appearance appearance = new Appearance();
        appearance.setMaterial(material);
        return appearance;
    }

    Transform3D transform(float x, float y, float z) {
        vector.set(x, y, z);
        trans.set(vector);
        return trans;
    }

    TransformGroup putarz (double d1, double d2){
        Transform3D rotate = new Transform3D();
        Transform3D temprotate = new Transform3D();
        rotate.rotZ(Math.PI/d1);
        temprotate.rotX(Math.PI/d2);
        rotate.mul(temprotate);
        TransformGroup objRotate = new TransformGroup(rotate);
        return objRotate;
    }
    
    void mobil(){
        mobil = new TransformGroup();
        mobil.setTransform(transform(0.0f, 0.0f, 0.0f));

        badan = new TransformGroup();
        
        Point3f [] pointMobil = {
            new Point3f(-2.8f, -0.2f, 0.0f),//0
            new Point3f(-0.8f, -0.2f, 0.0f),//1
            new Point3f(-2.4f, 0.8f, 0.0f),//2
            new Point3f(-1.2f, 1.0f, 0.0f),//3
            new Point3f(-0.5f, 0.5f, 0.0f),//4
            new Point3f(-0.7f, 2.0f, 0.0f),//5
            new Point3f(1.0f, 2.0f, 0.0f),//6
            new Point3f(0.2f, 0.5f, 0.0f),//7
            new Point3f(0.5f, -0.2f, 0.0f),//8
            new Point3f(2.3f, -0.2f, 0.0f),//9
            new Point3f(2.6f, 0.5f, 0.0f),//10
            new Point3f(3.4f, 2.0f, 0.0f),//11
            new Point3f(3.2f, 0.5f, 0.0f),//12
            new Point3f(3.9f, 1.0f, 0.0f),//13
            new Point3f(3.9f, -0.2f, 0.0f),//14
            new Point3f(3.5f, -0.2f, 0.0f),//15

            new Point3f(-2.8f, -0.2f, -2.0f),//16
            new Point3f(-0.8f, -0.2f, -2.0f),//17
            new Point3f(-2.4f, 0.8f, -2.0f),//18
            new Point3f(-1.2f, 1.0f, -2.0f),//19
            new Point3f(-0.5f, 0.5f, -2.0f),//20
            new Point3f(-0.7f, 2.0f, -2.0f),//21
            new Point3f(1.0f, 2.0f, -2.0f),//22
            new Point3f(0.2f, 0.5f, -2.0f),//23
            new Point3f(0.5f, -0.2f, -2.0f),//24
            new Point3f(2.3f, -0.2f, -2.0f),//25
            new Point3f(2.6f, 0.5f, -2.0f),//26
            new Point3f(3.4f, 2.0f, -2.0f),//27
            new Point3f(3.2f, 0.5f, -2.0f),//28
            new Point3f(3.9f, 1.0f, -2.0f),//29
            new Point3f(3.9f, -0.2f, -2.0f),//30
            new Point3f(3.5f, -0.2f, -2.0f),//31

            new Point3f(-0.8f, -0.2f, -1.5f),//32
            new Point3f(-0.8f, -0.2f, -0.5f),//33
            new Point3f(0.5f, -0.2f, -0.5f),//34
            new Point3f(0.5f, -0.2f, -1.5f),//35

            new Point3f(2.3f, -0.2f, -1.5f),//36
            new Point3f(2.3f, -0.2f, -0.5f),//37
            new Point3f(3.5f, -0.2f, -0.5f),//38
            new Point3f(3.5f, -0.2f, -1.5f)//39
        };

        int coordinate[] = {
            1, 2, 0,
            3, 2, 1,
            4, 3, 1,
            5, 3, 4,
            6, 5, 4,
            7, 6, 4,
            8, 6, 7,
            9, 6, 8,
            10, 6, 9,
            11, 6, 10,
            12, 11, 10,
            13, 11, 12,
            14, 13, 12,
            15, 14, 12,
            16, 18, 17,
            17, 18, 19,
            17, 19, 20,
            20, 19, 21,
            20, 21, 22,
            20, 22, 23,
            23, 22, 24,
            24, 22, 25,
            25, 22, 26,
            26, 22, 27,
            26, 27, 28,
            28, 27, 29,
            28, 29, 30,
            28, 30, 31,
            //atas
            0, 2, 16,
            2, 18, 16,
            2, 3, 18,
            3, 19, 18,
            3, 5, 19,
            5, 21, 19,
            5, 6, 21,
            6, 22, 21,
            6, 11, 22,
            11, 27, 22,
            11, 13, 27,
            13, 29, 27,
            13, 14, 29,
            14, 30, 29,
            //bawah
            16, 1, 0,
            16, 17, 1,
            31, 14, 15,
            31, 30, 14,
            24, 9, 8,
            24, 25, 9,
            //roda
            34, 33, 35,
            33, 32, 35,
            38, 37, 39,
            37, 36, 39
        };

        GeometryInfo gi = new GeometryInfo(GeometryInfo.TRIANGLE_ARRAY);
        gi.setCoordinates(pointMobil);
        gi.setCoordinateIndices(coordinate);
        NormalGenerator ng = new NormalGenerator();
        ng.generateNormals(gi);
        GeometryArray te = gi.getGeometryArray();

        Shape3D car = new Shape3D(te, apr(1.0f, 0.0f, 0.0f));
        badan.addChild(car);
        mobil.addChild(badan);

        tban1 = new TransformGroup();
        tban1.setTransform(transform(-0.15f, 0.0f, -1.0f));
        silinder = new Cylinder(0.1f, 2.25f, apr(1.0f, 1.0f, 1.0f));
        rot = putarz(1.0f, 2.0f);
        rot.addChild(silinder);
        tban1.addChild(rot);
        mobil.addChild(tban1);

        tban2 = new TransformGroup();
        tban2.setTransform(transform(2.9f, 0.0f, -1.0f));
        silinder = new Cylinder(0.1f, 2.25f, apr(1.0f, 1.0f, 1.0f));
        rot = putarz(1.0f, 2.0f);
        rot.addChild(silinder);
        tban2.addChild(rot);
        mobil.addChild(tban2);

        roda1 = new TransformGroup();
        roda1.setTransform(transform(-0.15f, 0.0f, -0.1f));
        silinder = new Cylinder(0.5f, 0.5f, apr(1.0f, 1.0f, 1.0f));
        rot = putarz(1.0f, 2.0f);
        rot.addChild(silinder);
        roda1.addChild(rot);
        mobil.addChild(roda1);
        
        roda2 = new TransformGroup();
        roda2.setTransform(transform(2.9f, 0.0f, -0.1f));
        silinder = new Cylinder(0.5f, 0.5f, apr(1.0f, 1.0f, 1.0f));
        rot = putarz(1.0f, 2.0f);
        rot.addChild(silinder);
        roda2.addChild(rot);
        mobil.addChild(roda2);

        roda3 = new TransformGroup();
        roda3.setTransform(transform(2.9f, 0.0f, -1.9f));
        silinder = new Cylinder(0.5f, 0.5f, apr(1.0f, 1.0f, 1.0f));
        rot = putarz(1.0f, 2.0f);
        rot.addChild(silinder);
        roda3.addChild(rot);
        mobil.addChild(roda3);

        roda4 = new TransformGroup();
        roda4.setTransform(transform(-0.15f, 0.0f, -1.9f));
        silinder = new Cylinder(0.5f, 0.5f, apr(1.0f, 1.0f, 1.0f));
        rot = putarz(1.0f, 2.0f);
        rot.addChild(silinder);
        roda4.addChild(rot);
        mobil.addChild(roda4);

        //kaca
        kaca = new TransformGroup();
        kaca.setTransform(transform(0.0f, 0.0f, 0.0f));

        Point3f[]pointkaca = {
            new Point3f(-1.25f, 0.95f, -0.1f),//0
            new Point3f(-0.75f, 1.9f, -0.1f),//1
            new Point3f(-0.75f, 1.9f, -1.9f),//2
            new Point3f(-1.25f, 0.95f, -1.9f),//3

            new Point3f(-1.15f, 0.95f, 0.05f),//4
            new Point3f(-0.7f, 1.85f, 0.05f),//5
            new Point3f(-0.7f, 0.95f, 0.05f),//6

            new Point3f(-1.15f, 0.95f, -2.05f),//7
            new Point3f(-0.7f, 1.85f, -2.05f),//8
            new Point3f(-0.7f, 0.95f, -2.05f),//9

            new Point3f(-0.5f, 0.95f, 0.05f),//10
            new Point3f(1.3f, 0.95f, 0.05f),//11
            new Point3f(1.3f, 1.85f, 0.05f),//12
            new Point3f(-0.5f, 1.85f, 0.05f),//13

            new Point3f(1.5f, 0.95f, 0.05f),//14
            new Point3f(3.3f, 0.95f, 0.05f),//15
            new Point3f(3.3f, 1.85f, 0.05f),//16
            new Point3f(1.5f, 1.85f, 0.05f),//17

            new Point3f(-0.5f, 0.95f, -2.05f),//18
            new Point3f(1.3f, 0.95f, -2.05f),//19
            new Point3f(1.3f, 1.85f, -2.05f),//20
            new Point3f(-0.5f, 1.85f, -2.05f),//21

            new Point3f(1.5f, 0.95f, -2.05f),//22
            new Point3f(3.3f, 0.95f, -2.05f),//23
            new Point3f(3.3f, 1.85f, -2.05f),//24
            new Point3f(1.5f, 1.85f, -2.05f),//25

            new Point3f(3.95f, 0.95f, -0.1f),//26
            new Point3f(3.45f, 1.9f, -0.1f),//27
            new Point3f(3.45f, 1.9f, -1.9f),//28
            new Point3f(3.95f, 0.95f, -1.9f),//29
        };

        int coor [] = {
            1, 2, 0,
            2, 3, 0,
            6, 5, 4,
            7, 8, 9,

            11, 12, 10,
            12, 13, 10,

            15, 16, 14,
            16, 17, 14,

            18, 20, 19,
            18, 21, 20,

            22, 24, 23,
            22, 25, 24,

            26, 28, 27,
            26, 29, 28
        };
        
        GeometryInfo gi2 = new GeometryInfo(GeometryInfo.TRIANGLE_ARRAY);
        gi2.setCoordinates(pointkaca);
        gi2.setCoordinateIndices(coor);
        NormalGenerator ng2 = new NormalGenerator();
        ng.generateNormals(gi2);
        GeometryArray te2 = gi2.getGeometryArray();

        Shape3D mirror = new Shape3D(te2, apr(0.0f, 1.0f, 1.0f));
        kaca.addChild(mirror);
        mobil.addChild(kaca);

        Transform3D mobilFlightAxis = new Transform3D();
        mobilFlightAxis.rotX(Math.PI/1);

        Alpha mobilAlpha = new Alpha(10,Alpha.INCREASING_ENABLE+Alpha.DECREASING_ENABLE,
                                      0,0,3000,30,
                                      0,3000,30,0);

        //The movement for the flight.
        PositionInterpolator posIPmobil = new PositionInterpolator(mobilAlpha,
                                                   mobil,mobilFlightAxis,
                                                   5.0f,0.0f);
        BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0),Double.MAX_VALUE);
        posIPmobil.setSchedulingBounds(bounds);

        mobil.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
        mobil.addChild(posIPmobil);
    
    }
    public BranchGroup createSceneGraph() {
        BranchGroup root = new BranchGroup();
        TransformGroup objScale = new TransformGroup();
        //membuat transformasi
        Transform3D scaleTrans = new Transform3D();
        scaleTrans.set(1/6.0f);
        objScale.setTransform(scaleTrans);
        root.addChild(objScale);

        //objek transformasi
        TransformGroup objTrans = new TransformGroup();
        objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
        objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
        objScale.addChild(objTrans);
        mobil();

        objTrans.addChild(mobil);

        BoundingSphere bounds = new BoundingSphere(new Point3d(), 100);
        Background bg = new Background(new Color3f(1.0f, 1.0f, 1.0f));
        bg.setApplicationBounds(bounds);
        objTrans.addChild(bg);

        //mengatur mouse
        MouseRotate mr = new MouseRotate();
        mr.setTransformGroup(objTrans);
        mr.setSchedulingBounds(bounds);
        mr.setFactor(0.007);
        objTrans.addChild(mr);

        //mengatur terang
        Color3f ambientColor = new Color3f(0.1f, 0.1f, 0.1f);
        //penyebaran
        AmbientLight ambientLightNode = new AmbientLight(ambientColor);
        ambientLightNode.setInfluencingBounds(bounds);
        root.addChild(ambientLightNode);
        Color3f light1Color = new Color3f(1.0f, 1.0f, 1.0f);
        Vector3f light1Direction = new Vector3f(0.0f, -12.0f, -12.0f);
//        Vector3f light1Direction = new Vector3f(-0.2f, 0.0f, -0.8f);
        DirectionalLight light1 = new DirectionalLight(light1Color, light1Direction);
        light1.setInfluencingBounds(bounds);
        root.addChild(light1);

        return root;
    }
    public static void main(String[] args) {
        Frame frame = new MainFrame(new Mobil3D(), 500,400);
        frame.setTitle("Mobil 3D");
        frame.setLocationRelativeTo(null);
    }
}

Outputnya :


Sekian dan semoga bermanfaat

Membuat Human 3D dengan Java 3D

Wednesday, May 18, 2016 Add Comment
Halo guys, kali ini saya mau share project kuliah saya dulu waktu semester tiga. Saya kepikiran daripada dibekam terus dilaptop mending di share aja, siapa tau berguna hehe. Disini saya membuat bentuk/kerangka human 3 dimensi. Bentuknya masih kasar banget, belum ada modelling, texture dan lainnya. Cuma berbentuk polosan saja, yakni sejumlah objek – objek yang digabungkan sehingga menyerupai bentuk human tiga dimensi.

Oke langsung ke TKP gan.
/**
 *
 * @author Wim Sonevel
 */
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.behaviors.mouse.MouseRotate;
import com.sun.j3d.utils.geometry.Cylinder;
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.utils.geometry.Sphere;
import java.awt.*;
import javax.media.j3d.*;
import javax.swing.*;
import javax.vecmath.*;
public class Human3D extends JApplet{

    TransformGroup body;
    TransformGroup tgBola;
    TransformGroup tgBadan;
    TransformGroup tgBahu;
    TransformGroup tgLengan;
    TransformGroup tgTangan;
    TransformGroup tgKaki;

    Sphere bola;
    Cylinder silinder;

    Transform3D trans = new Transform3D();
    Vector3f vector = new Vector3f();

    public Human3D(){
        setLayout(new BorderLayout());
        GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
        Canvas3D canvas = new Canvas3D(config);
        add("Center",canvas);

        BranchGroup scene = createSceneGraph();
        scene.compile();

        SimpleUniverse simU = new SimpleUniverse(canvas);
        simU.getViewingPlatform().setNominalViewingTransform();
        simU.addBranchGraph(scene);
    }

    Appearance apr(float r, float g, float b){
        Color3f red = new Color3f(r,g,b);
        Color3f black = new Color3f(0.0f,0.0f,0.0f);
        Color3f white = new Color3f(1.0f,1.0f,1.0f);
        //mix warna
        Material material = new Material(red, black, red, white, 100);
        Appearance appearance = new Appearance();
        appearance.setMaterial(material);
        return appearance;
    }

    Transform3D transform(float x, float y, float z) {
        vector.set(x, y, z);
        trans.set(vector);
        return trans;
    }

    void draw(){
     
        body = new TransformGroup();
        body.setTransform(transform(0.0f, 0.0f, 0.0f));

        tgBola = new TransformGroup();
        tgBola.setTransform(transform(0.0f, 3.0f, 0.0f));
        bola = new Sphere(1.0f, apr(1.0f, 0.0f, 0.0f));
        tgBola.addChild(bola);
        body.addChild(tgBola);

        tgBadan = new TransformGroup();
        tgBadan.setTransform(transform(0.0f, 0.2f, 0.0f));
        silinder = new Cylinder(1.5f, 3.5f, apr(1.0f, 0.0f, 0.0f));
        tgBadan.addChild(silinder);
        body.addChild(tgBadan);

        tgBahu = new TransformGroup();
        tgBahu.setTransform(transform(-1.95f, 1.5f, 0.0f));
        bola = new Sphere(0.45f, apr(1.0f, 0.0f, 0.0f));
        tgBahu.addChild(bola);
        body.addChild(tgBahu);

        tgBahu = new TransformGroup();
        tgBahu.setTransform(transform(1.95f, 1.5f, 0.0f));
        bola = new Sphere(0.45f, apr(1.0f, 0.0f, 0.0f));
        tgBahu.addChild(bola);
        body.addChild(tgBahu);

        tgLengan = new TransformGroup();
        tgLengan.setTransform(transform(-1.95f, 0.1f, 0.0f));
        silinder = new Cylinder(0.4f, 2.5f, apr(1.0f, 0.0f, 0.0f));
        tgLengan.addChild(silinder);
        body.addChild(tgLengan);

        tgLengan = new TransformGroup();
        tgLengan.setTransform(transform(1.95f, 0.1f, 0.0f));
        silinder = new Cylinder(0.4f, 2.5f, apr(1.0f, 0.0f, 0.0f));
        tgLengan.addChild(silinder);
        body.addChild(tgLengan);

        tgTangan = new TransformGroup();
        tgTangan.setTransform(transform(1.95f, -1.2f, 0.0f));
        bola = new Sphere(0.4f, apr(1.0f, 0.0f, 0.0f));
        tgTangan.addChild(bola);
        body.addChild(tgTangan);

        tgTangan = new TransformGroup();
        tgTangan.setTransform(transform(-1.95f, -1.2f, 0.0f));
        bola = new Sphere(0.4f, apr(1.0f, 0.0f, 0.0f));
        tgTangan.addChild(bola);
        body.addChild(tgTangan);

        tgKaki = new TransformGroup();
        tgKaki.setTransform(transform(0.7f, -3.0f, 0.0f));
        silinder = new Cylinder(0.5f, 3.0f, apr(1.0f, 0.0f, 0.0f));
        tgKaki.addChild(silinder);
        body.addChild(tgKaki);

        tgKaki = new TransformGroup();
        tgKaki.setTransform(transform(-0.7f, -3.0f, 0.0f));
        silinder = new Cylinder(0.5f, 3.0f, apr(1.0f, 0.0f, 0.0f));
        tgKaki.addChild(silinder);
        body.addChild(tgKaki);
    }
    BranchGroup createSceneGraph(){
        BranchGroup root = new BranchGroup();

        TransformGroup objScale = new TransformGroup();
        //membuat transformasi
        Transform3D scaleTrans = new Transform3D();
        scaleTrans.set(1/6.0f);
        objScale.setTransform(scaleTrans);
        root.addChild(objScale);

        //objek transformasi
        TransformGroup objTrans = new TransformGroup();
        objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
        objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
        objScale.addChild(objTrans);

        draw();
        objTrans.addChild(body);

        BoundingSphere bounds = new BoundingSphere(new Point3d(), 100);
        Background bg = new Background(new Color3f(1.0f, 1.0f, 1.0f));
        bg.setApplicationBounds(bounds);
        objTrans.addChild(bg);

        //mengatur mouse
        MouseRotate mr = new MouseRotate();
        mr.setTransformGroup(objTrans);
        mr.setSchedulingBounds(bounds);
        mr.setFactor(0.007);
        objTrans.addChild(mr);

        //mengatur terang
        Color3f ambientColor = new Color3f(0.1f, 0.1f, 0.1f);
        //penyebaran
        AmbientLight ambientLightNode = new AmbientLight(ambientColor);
        ambientLightNode.setInfluencingBounds(bounds);
        root.addChild(ambientLightNode);
        Color3f light1Color = new Color3f(1.0f, 1.0f, 1.0f);
        Vector3f light1Direction = new Vector3f(-0.2f, 0.0f, -0.8f);
        DirectionalLight light1 = new DirectionalLight(light1Color, light1Direction);
        light1.setInfluencingBounds(bounds);
        root.addChild(light1);

        return root;
    }
    public static void main(String[] args) {
        Frame frame = new MainFrame(new Human3D(), 500,400);
        frame.setTitle("Human 3D");
        frame.setLocationRelativeTo(null);
    }
}


Outputnya :


Sekian dan semoga bermanfaat