JavaFX - Bentuk 3D
Di bab sebelumnya, kita telah melihat cara menggambar bentuk 2D pada bidang XY. Selain bentuk 2D ini, kita dapat menggambar beberapa bentuk 3D lainnya juga menggunakan JavaFX.
Bentuk 3D
Secara umum, bangun 3D merupakan bangun geometri yang dapat digambar pada bidang XYZ. Ini termasuk aCylinder, Sphere dan a Box.
Masing-masing bentuk 3D yang disebutkan di atas diwakili oleh sebuah kelas dan semua kelas ini termasuk dalam paket javafx.scene.shape. Kelas bernamaShape3D adalah kelas dasar dari semua bentuk 3-Dimensi di JavaFX.
Membuat Bentuk 3D
Untuk membuat bentuk 3 Dimensi, Anda perlu -
Buat instance kelas masing-masing dari bentuk 3D yang diperlukan.
Atur properti bentuk 3D.
Tambahkan objek bentuk 3D ke grup.
Instansiasi Kelas Masing-masing
Untuk membuat bentuk 3-Dimensi, pertama-tama Anda perlu membuat instance kelasnya masing-masing. Misalnya, jika Anda ingin membuat kotak 3D, Anda perlu membuat instance kelas bernama Box sebagai berikut -
Box box = new Box();
Mengatur Properti Bentuk
Setelah membuat instance kelas, Anda perlu menyetel properti untuk bentuk menggunakan metode penyetel.
Misalnya, untuk menggambar kotak 3D Anda harus meneruskan Width, Height, Depth-nya. Anda dapat menentukan nilai-nilai ini menggunakan metode penyetelnya masing-masing sebagai berikut -
//Setting the properties of the Box
box.setWidth(200.0);
box.setHeight(400.0);
box.setDepth(200.0);
Menambahkan Objek Bentuk ke Grup
Terakhir, Anda perlu menambahkan objek bentuk ke grup dengan meneruskannya sebagai parameter konstruktor seperti yang ditunjukkan di bawah ini.
//Creating a Group object
Group root = new Group(box);
Tabel berikut memberi Anda daftar berbagai bentuk 3D yang disediakan oleh JavaFX.
S.No | Bentuk & Deskripsi |
---|---|
1 | Kotak Kubus adalah bentuk tiga dimensi dengan a length (kedalaman), width, dan a height. Di JavaFX kotak tiga dimensi diwakili oleh kelas bernama Box. Kelas ini termasuk dalam paketjavafx.scene.shape. Dengan membuat instance kelas ini, Anda dapat membuat node Box di JavaFX. Kelas ini memiliki 3 properti dari tipe data ganda yaitu -
|
2 | Silinder Silinder adalah padatan tertutup yang memiliki dua alas paralel (kebanyakan melingkar) yang dihubungkan oleh permukaan melengkung. Ini dijelaskan oleh dua parameter, yaitu, radius dari alas melingkar dan height dari silinder. Di JavaFX, silinder diwakili oleh kelas bernama Cylinder. Kelas ini termasuk dalam paketjavafx.scene.shape. Dengan membuat instance kelas ini, Anda dapat membuat node silinder di JavaFX. Kelas ini memiliki 2 properti dari tipe data ganda yaitu -
|
3 | Bola Bola didefinisikan sebagai kumpulan titik yang semuanya berada pada jarak yang sama r dari titik tertentu dalam ruang 3D. Jarak r ini adalah jari-jari bola dan titik yang diberikan adalah pusat bola. Di JavaFX, bola diwakili oleh kelas bernama Sphere. Kelas ini termasuk dalam paketjavafx.scene.shape. Dengan membuat instance kelas ini, Anda dapat membuat node sphere di JavaFX. Kelas ini memiliki properti bernama radiusdari tipe data ganda. Ini mewakili radius Sphere. |
Properti Objek 3D
Untuk semua objek 3 Dimensi, Anda dapat mengatur berbagai properti seperti Cull Face, Drawing Mode, Material.
Bagian berikut membahas properti objek 3D.
Cull Face
Secara umum, pemusnahan adalah penghilangan bagian bentuk yang tidak diorientasikan dengan benar (yang tidak terlihat di area tampilan).
Properti Cull Face adalah dari jenisnya CullFacedan itu mewakili Wajah Pemusnahan dari bentuk 3D. Anda dapat mengatur Wajah Pemusnahan suatu bentuk menggunakan metode inisetCullFace() seperti yang ditunjukkan di bawah ini -
box.setCullFace(CullFace.NONE);
Jenis guratan suatu bentuk dapat berupa -
None - Tidak ada pemusnahan yang dilakukan (CullFace.NONE).
Front- Semua poligon yang menghadap ke depan disingkirkan. (CullFace.FRONT).
Back- Semua poligon yang menghadap ke belakang disingkirkan. (StrokeType.BACK).
Secara default, tampilan pemusnahan dari bentuk 3 Dimensi adalah Kembali.
Contoh
Program berikut adalah contoh yang mendemonstrasikan berbagai permukaan pemusnahan bola. Simpan kode ini dalam file dengan namaSphereCullFace.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.shape.CullFace;
import javafx.stage.Stage;
import javafx.scene.shape.Sphere;
public class SphereCullFace extends Application {
@Override
public void start(Stage stage) {
//Drawing Sphere1
Sphere sphere1 = new Sphere();
//Setting the radius of the Sphere
sphere1.setRadius(50.0);
//Setting the position of the sphere
sphere1.setTranslateX(100);
sphere1.setTranslateY(150);
//setting the cull face of the sphere to front
sphere1.setCullFace(CullFace.FRONT);
//Drawing Sphere2
Sphere sphere2 = new Sphere();
//Setting the radius of the Sphere
sphere2.setRadius(50.0);
//Setting the position of the sphere
sphere2.setTranslateX(300);
sphere2.setTranslateY(150);
//Setting the cull face of the sphere to back
sphere2.setCullFace(CullFace.BACK);
//Drawing Sphere3
Sphere sphere3 = new Sphere();
//Setting the radius of the Sphere
sphere3.setRadius(50.0);
//Setting the position of the sphere
sphere3.setTranslateX(500);
sphere3.setTranslateY(150);
//Setting the cull face of the sphere to none
sphere2.setCullFace(CullFace.NONE);
//Creating a Group object
Group root = new Group(sphere1, sphere2, sphere3);
//Creating a scene object
Scene scene = new Scene(root, 600, 300);
//Setting title to the Stage
stage.setTitle("Drawing a Sphere");
//Adding scene to the stage
stage.setScene(scene);
//Displaying the contents of the stage
stage.show();
}
public static void main(String args[]){
launch(args);
}
}
Kompilasi dan jalankan file Java yang disimpan dari command prompt menggunakan perintah berikut.
javac SphereCullFace.java
java SphereCullFace
Saat menjalankan, program di atas menghasilkan jendela JavaFX yang menampilkan tiga bidang dengan nilai wajah pemusnahan FRONT, BACK dan NONE masing-masing sebagai berikut -
Mode Menggambar
Ini adalah properti dari tipe DrawModedan itu mewakili mode menggambar yang digunakan untuk menggambar bentuk 3D saat ini. Anda dapat memilih mode gambar untuk menggambar bentuk 3D menggunakan metode setDrawMode () sebagai berikut -
box.setDrawMode(DrawMode.FILL);
Di JavaFX, Anda dapat memilih dua mode gambar untuk menggambar bentuk 3D, yaitu -
Fill - Mode ini menggambar dan mengisi bentuk 2D (DrawMode.FILL).
Line - Mode ini menggambar bentuk 3D menggunakan garis (DrawMode.LINE).
Secara default, mode menggambar bentuk 3Dimensi adalah isian.
Contoh
Program berikut adalah contoh yang mendemonstrasikan berbagai mode gambar kotak 3D. Simpan kode ini dalam file dengan namaBoxDrawMode.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.PerspectiveCamera;
import javafx.scene.Scene;
import javafx.scene.shape.Box;
import javafx.scene.shape.DrawMode;
import javafx.stage.Stage;
public class BoxDrawMode extends Application {
@Override
public void start(Stage stage) {
//Drawing a Box
Box box1 = new Box();
//Setting the properties of the Box
box1.setWidth(100.0);
box1.setHeight(100.0);
box1.setDepth(100.0);
//Setting the position of the box
box1.setTranslateX(200);
box1.setTranslateY(150);
box1.setTranslateZ(0);
//Setting the drawing mode of the box
box1.setDrawMode(DrawMode.LINE);
//Drawing a Box
Box box2 = new Box();
//Setting the properties of the Box
box2.setWidth(100.0);
box2.setHeight(100.0);
box2.setDepth(100.0);
//Setting the position of the box
box2.setTranslateX(450); //450
box2.setTranslateY(150);//150
box2.setTranslateZ(300);
//Setting the drawing mode of the box
box2.setDrawMode(DrawMode.FILL);
//Creating a Group object
Group root = new Group(box1, box2);
//Creating a scene object
Scene scene = new Scene(root, 600, 300);
//Setting camera
PerspectiveCamera camera = new PerspectiveCamera(false);
camera.setTranslateX(0);
camera.setTranslateY(0);
camera.setTranslateZ(0);
scene.setCamera(camera);
//Setting title to the Stage
stage.setTitle("Drawing a Box");
//Adding scene to the stage
stage.setScene(scene);
//Displaying the contents of the stage
stage.show();
}
public static void main(String args[]){
launch(args);
}
}
Kompilasi dan jalankan file java yang disimpan dari command prompt menggunakan perintah berikut.
javac BoxDrawMode.java
java BoxDrawMode
Saat menjalankan, program di atas menghasilkan jendela JavaFX yang menampilkan dua kotak dengan nilai mode gambar LINE dan FILL masing-masing, sebagai berikut -
Bahan
Properti Wajah pemusnahan adalah dari jenisnya Materialdan digunakan untuk memilih permukaan material bentuk 3D. Anda dapat mengatur materi bentuk 3D menggunakan metode inisetCullFace() sebagai berikut -
cylinder.setMaterial(material);
Seperti yang disebutkan di atas untuk metode ini, Anda perlu meneruskan objek berjenis Material. ItuPhongMaterial kelas paket javafx.scene.paintadalah sub kelas dari kelas ini dan menyediakan 7 properti yang mewakili bahan berbayang Phong. Anda dapat menerapkan semua jenis bahan ini ke permukaan bentuk 3D menggunakan metode penyetel properti ini.
Berikut adalah jenis material yang tersedia di JavaFX -
bumpMap - Ini mewakili peta normal yang disimpan sebagai Gambar RGB.
diffuseMap - Ini mewakili peta yang tersebar.
selfIlluminationMap - Ini mewakili peta iluminasi diri dari PhongMaterial ini.
specularMap - Ini mewakili peta specular dari PhongMaterial ini.
diffuseColor - Ini mewakili warna menyebar dari Bahan Phong ini.
specularColor - Ini mewakili warna specular dari PhongMaterial ini.
specularPower - Ini mewakili kekuatan specular dari PhongMaterial ini.
Secara default, bahan dari bentuk 3-Dimensi adalah Bahan Phong dengan warna abu-abu terang yang tersebar.
Contoh
Berikut adalah contoh yang menampilkan berbagai material pada silinder. Simpan kode ini dalam file dengan namaCylinderMaterials.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.PerspectiveCamera;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.paint.Color;
import javafx.scene.paint.PhongMaterial;
import javafx.scene.shape.Cylinder;
import javafx.stage.Stage;
public class CylinderMaterials extends Application {
@Override
public void start(Stage stage) {
//Drawing Cylinder1
Cylinder cylinder1 = new Cylinder();
//Setting the properties of the Cylinder
cylinder1.setHeight(130.0f);
cylinder1.setRadius(30.0f);
//Setting the position of the Cylinder
cylinder1.setTranslateX(100);
cylinder1.setTranslateY(75);
//Preparing the phong material of type bump map
PhongMaterial material1 = new PhongMaterial();
material1.setBumpMap(new Image
("http://www.tutorialspoint.com/images/tplogo.gif"));
//Setting the bump map material to Cylinder1
cylinder1.setMaterial(material1);
//Drawing Cylinder2
Cylinder cylinder2 = new Cylinder();
//Setting the properties of the Cylinder
cylinder2.setHeight(130.0f);
cylinder2.setRadius(30.0f);
//Setting the position of the Cylinder
cylinder2.setTranslateX(200);
cylinder2.setTranslateY(75);
//Preparing the phong material of type diffuse map
PhongMaterial material2 = new PhongMaterial();
material2.setDiffuseMap(new Image
("http://www.tutorialspoint.com/images/tp-logo.gif"));
//Setting the diffuse map material to Cylinder2
cylinder2.setMaterial(material2);
//Drawing Cylinder3
Cylinder cylinder3 = new Cylinder();
//Setting the properties of the Cylinder
cylinder3.setHeight(130.0f);
cylinder3.setRadius(30.0f);
//Setting the position of the Cylinder
cylinder3.setTranslateX(300);
cylinder3.setTranslateY(75);
//Preparing the phong material of type Self Illumination Map
PhongMaterial material3 = new PhongMaterial();
material3.setSelfIlluminationMap(new Image
("http://www.tutorialspoint.com/images/tp-logo.gif"));
//Setting the Self Illumination Map material to Cylinder3
cylinder3.setMaterial(material3);
//Drawing Cylinder4
Cylinder cylinder4 = new Cylinder();
//Setting the properties of the Cylinder
cylinder4.setHeight(130.0f);
cylinder4.setRadius(30.0f);
//Setting the position of the Cylinder
cylinder4.setTranslateX(400);
cylinder4.setTranslateY(75);
//Preparing the phong material of type Specular Map
PhongMaterial material4 = new PhongMaterial();
material4.setSpecularMap(new Image
("http://www.tutorialspoint.com/images/tp-logo.gif"));
//Setting the Specular Map material to Cylinder4
cylinder4.setMaterial(material4);
//Drawing Cylinder5
Cylinder cylinder5 = new Cylinder();
//Setting the properties of the Cylinder
cylinder5.setHeight(130.0f);
cylinder5.setRadius(30.0f);
//Setting the position of the Cylinder
cylinder5.setTranslateX(100);
cylinder5.setTranslateY(300);
//Preparing the phong material of type diffuse color
PhongMaterial material5 = new PhongMaterial();
material5.setDiffuseColor(Color.BLANCHEDALMOND);
//Setting the diffuse color material to Cylinder5
cylinder5.setMaterial(material5);
//Drawing Cylinder6
Cylinder cylinder6 = new Cylinder();
//Setting the properties of the Cylinder
cylinder6.setHeight(130.0f);
cylinder6.setRadius(30.0f);
//Setting the position of the Cylinder
cylinder6.setTranslateX(200);
cylinder6.setTranslateY(300);
//Preparing the phong material of type specular color
PhongMaterial material6 = new PhongMaterial();
//setting the specular color map to the material
material6.setSpecularColor(Color.BLANCHEDALMOND);
//Setting the specular color material to Cylinder6
cylinder6.setMaterial(material6);
//Drawing Cylinder7
Cylinder cylinder7 = new Cylinder();
//Setting the properties of the Cylinder
cylinder7.setHeight(130.0f);
cylinder7.setRadius(30.0f);
//Setting the position of the Cylinder
cylinder7.setTranslateX(300);
cylinder7.setTranslateY(300);
//Preparing the phong material of type Specular Power
PhongMaterial material7 = new PhongMaterial();
material7.setSpecularPower(0.1);
//Setting the Specular Power material to the Cylinder
cylinder7.setMaterial(material7);
//Creating a Group object
Group root = new Group(cylinder1 ,cylinder2, cylinder3,
cylinder4, cylinder5, cylinder6, cylinder7);
//Creating a scene object
Scene scene = new Scene(root, 600, 400);
//Setting camera
PerspectiveCamera camera = new PerspectiveCamera(false);
camera.setTranslateX(0);
camera.setTranslateY(0);
camera.setTranslateZ(-10);
scene.setCamera(camera);
//Setting title to the Stage
stage.setTitle("Drawing a cylinder");
//Adding scene to the stage
stage.setScene(scene);
//Displaying the contents of the stage
stage.show();
}
public static void main(String args[]){
launch(args);
}
}
Kompilasi dan jalankan file java yang disimpan dari command prompt menggunakan perintah berikut.
Javac CylinderMaterials.java
java CylinderMaterials
Saat menjalankan, program di atas menghasilkan jendela JavaFX yang menampilkan 7 silinder dengan Material, Bump Map, Diffuse Map, Self-Illumination Map, Specular Map, Diffuse Color, Specular Color, (BLANCHEDALMOND) Specular Power, masing-masing, seperti yang ditunjukkan pada tangkapan layar berikut -