(JEE)Bermain dengan JavaFX Membuat Kubus 3D

Beberapa hari lalu saya sudah menjelaskan di postingan sebelumnya, apa itu javaFX, karena kalau kita tidak mengerti sebuah konsep, kita akan terjebak di sebuah gudang dan ruang hampa, jadi sebelum teman-teman memahami postingan ini, sebaiknya langsung ke postingan sebelumnya.

javaFX sangat banyak digunakan di sebuah basic pemograman 3D, karena dengan konsep javaFX insya allah teman-teman akan lebih dimudahkan untuk membuat suatu gambar dalam bentuk 3D, karena perkembangan ini lebih ke dunia games, coba aja agan bayangkan di dunia game yang menarik adalah game 3D, nah disinilah konsep itu, bermain-main dengan 3D yang pastinya teman teman harus paham konsep 2D dan sebagainya, kalau di dunia 2D hanya ada garis X dan Y, tetapi kalau di dunia 3D itu ada 3 titik, yaitu X,Y dan Z.

Scrip ini saya dapatkan di sebuah IDE java(Netbeans), tetapi di scrip ini saya sudah jelaskan apa maksud dari scrip itu, saya hanya mencari kemudahan dalam belajar, jadi jika agan merasa kebingungan langsung aja pesan email atau comment, karena kebanyakan teman teman yang mengeluarkan pertanyaan saya sarankan ke email, karena kalau langsung commant saya agak lama untuk membalas.

 /*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package delta3d;

import javafx.animation.Animation;
import javafx.animation.KeyFrame;
import javafx.animation.KeyValue;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.scene.DepthTest;
import javafx.scene.Group;
import javafx.scene.Node;
import javafx.scene.PerspectiveCamera;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.RectangleBuilder;
import javafx.scene.transform.Rotate;
import javafx.scene.transform.Translate;
import javafx.stage.Stage;
import javafx.util.Duration;


/**
 *
 * @author Victor
 */
public class Delta3D extends Application {
   private Timeline animation;

    private void init(Stage primaryStage) {
        Group root = new Group();
        root.setDepthTest(DepthTest.ENABLE);
        primaryStage.setResizable(false);
        primaryStage.setScene(new Scene(root, 1024, 200, true)); // 700 Panjang dan 150 lebar dari form
        primaryStage.getScene().setCamera(new PerspectiveCamera());
        root.getTransforms().addAll(
            new Translate(700 / 2, 200 / 2), // letak objek dengan form
            new Rotate(360, Rotate.Y_AXIS) // letak objek dengan objek lain
        );
        root.getChildren().add(create3dContent());
    }

    public Node create3dContent() {
        Delta c = new Delta(90,Color.AQUA,1);//warna yang akan di gunakan dan ukuran objeck
        c.rx.setAngle(60);//pengambilan kamera yang akan di tampilkan
        c.ry.setAngle(60);
        Delta c2 = new Delta(50,Color.GREEN,1);
        c2.setTranslateX(200);//jarak x dengan objek sebelahnya
        c2.rx.setAngle(60);
        c2.ry.setAngle(60);
        Delta c3 = new Delta(50,Color.ORANGE,1);
        c3.setTranslateX(-200);
        c3.rx.setAngle(60);
        c3.ry.setAngle(60);
        
        Delta c4 = new Delta(110,Color.AZURE,1);
        c4.setTranslateX(400);
        c4.rx.setAngle(60);
        c4.ry.setAngle(60);

        animation = new Timeline();
        animation.getKeyFrames().addAll(
                new KeyFrame(Duration.ZERO,//durasi perputaran
                        new KeyValue(c.ry.angleProperty(), 0d),
                        new KeyValue(c2.rx.angleProperty(), 0d),
                        new KeyValue(c3.rz.angleProperty(), 0d),
                         new KeyValue(c4.rz.angleProperty(), 0d)
                ),
                new KeyFrame(Duration.seconds(1),//durasi perputaran berdasarkan waktu
                        new KeyValue(c.ry.angleProperty(), 360d),
                        new KeyValue(c2.rx.angleProperty(), 360d),
                        new KeyValue(c3.rz.angleProperty(), 360d),
                         new KeyValue(c4.rz.angleProperty(), 360d)
                
                ));
        animation.setCycleCount(Animation.INDEFINITE);

        return new Group(c,c2,c3,c4);
    }

    public void play() {
        animation.play();
    }

    @Override public void stop() {
        animation.pause();
    }

    public class Delta extends Group { // pembuatan bentuk objek
        final Rotate rx = new Rotate(0,Rotate.X_AXIS);
        final Rotate ry = new Rotate(0,Rotate.Y_AXIS);
        final Rotate rz = new Rotate(0,Rotate.Z_AXIS);
        public Delta(double size, Color color, double shade) {
            getTransforms().addAll(rz, ry, rx);
            getChildren().addAll(
                RectangleBuilder.create() // back face
                    .width(size).height(size)
                    .fill(color.deriveColor(0.0, 1.0, (1 - 0.5*shade), 1.0))
                    .translateX(-0.5*size)
                    .translateY(-0.5*size)
                    .translateZ(0.5*size)
                    .build(),
                RectangleBuilder.create() // bottom face
                    .width(size).height(size)
                    .fill(color.deriveColor(0.0, 1.0, (1 - 0.4*shade), 1.0))
                    .translateX(-0.5*size)
                    .translateY(0)
                    .rotationAxis(Rotate.X_AXIS)
                    .rotate(90)
                    .build(),
                RectangleBuilder.create() // right face
                    .width(size).height(size)
                    .fill(color.deriveColor(0.0, 1.0, (1 - 0.3*shade), 1.0))
                    .translateX(-1*size)
                    .translateY(-0.5*size)
                    .rotationAxis(Rotate.Y_AXIS)
                    .rotate(90)
                    .build(),
                RectangleBuilder.create() // left face
                    .width(size).height(size)
                    .fill(color.deriveColor(0.0, 1.0, (1 - 0.2*shade), 1.0))
                    .translateX(0)
                    .translateY(-0.5*size)
                    .rotationAxis(Rotate.Y_AXIS)
                    .rotate(90)
                    .build(),
                RectangleBuilder.create() // top face
                    .width(size).height(size)
                    .fill(color.deriveColor(0.0, 1.0, (1 - 0.1*shade), 1.0))
                    .translateX(-0.5*size)
                    .translateY(-1*size)
                    .rotationAxis(Rotate.X_AXIS)
                    .rotate(90)
                    .build(),
                RectangleBuilder.create() // top face
                    .width(size).height(size)
                    .fill(color)
                    .translateX(-0.5*size)
                    .translateY(-0.5*size)
                    .translateZ(-0.5*size)
                    .build()
            );
        }
    }

    @Override public void start(Stage primaryStage) throws Exception {
        init(primaryStage);
        primaryStage.show();
        play();
    }

    /**
     * The main() method is ignored in correctly deployed JavaFX 
     * application. main() serves only as fallback in case the 
     * application can not be launched through deployment artifacts,
     * e.g., in IDEs with limited FX support. NetBeans ignores main().
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }
}

Run

5-15-2013 6-53-05 AM

Advertisements

Published by

jarcode

hello I am jarcode

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s