JavaFX - 3D आकार
पहले के अध्यायों में, हमने देखा है कि XY विमान पर 2D आकृतियों को कैसे बनाया जाए। इन 2D आकृतियों के अलावा, हम JavaFX का उपयोग करते हुए कई अन्य 3D आकृतियों को भी आकर्षित कर सकते हैं।
3 डी आकार
सामान्य तौर पर, एक 3D आकार एक ज्यामितीय आकृति है जिसे XYZ विमान पर खींचा जा सकता है। इनमें एCylinder, Sphere और एक Box।
उपर्युक्त 3 डी आकार में से प्रत्येक को एक वर्ग द्वारा दर्शाया गया है और ये सभी वर्ग पैकेज के हैं javafx.scene.shape। नाम का वर्गShape3D जावाएफएक्स में सभी 3-आयामी आकृतियों का आधार वर्ग है।
एक 3D आकृति बनाना
3-आयामी आकृति बनाने के लिए, आपको निम्न की आवश्यकता है -
आवश्यक 3 डी आकार के संबंधित वर्ग को तुरंत लिखें।
3 डी आकार के गुणों को सेट करें।
समूह में 3D आकार ऑब्जेक्ट जोड़ें।
रिस्पांसिबल क्लास को इंस्टेंट करना
3-आयामी आकार बनाने के लिए, सबसे पहले आपको इसकी संबंधित कक्षा को तत्काल करने की आवश्यकता है। उदाहरण के लिए, यदि आप एक 3 डी बॉक्स बनाना चाहते हैं, तो आपको बॉक्स नाम के वर्ग को तुरंत टाइप करना होगा -
Box box = new Box();
आकृति के गुण सेट करना
कक्षा को तुरंत करने के बाद, आपको सेटर विधियों का उपयोग करके आकार के लिए गुण सेट करने की आवश्यकता है।
उदाहरण के लिए, एक 3D बॉक्स खींचने के लिए आपको उसकी चौड़ाई, ऊँचाई, गहराई को पास करना होगा। आप इन मूल्यों को उनके संबंधित सेटर तरीकों का उपयोग करके निर्दिष्ट कर सकते हैं -
//Setting the properties of the Box
box.setWidth(200.0);
box.setHeight(400.0);
box.setDepth(200.0);
समूह में आकार वस्तु जोड़ना
अंत में, आपको आकृति के ऑब्जेक्ट को निर्माता के पैरामीटर के रूप में पास करके समूह में जोड़ना होगा जैसा कि नीचे दिखाया गया है।
//Creating a Group object
Group root = new Group(box);
निम्न तालिका आपको जावाएफएक्स द्वारा प्रदान की गई 3 डी आकृतियों की सूची देती है।
S.No | आकार और विवरण |
---|---|
1 |
डिब्बा
एक घनाकार एक के साथ एक तीन आयामी आकार है length (गहराई), width, और ए height। जावाएफएक्स में एक त्रि-आयामी बॉक्स का प्रतिनिधित्व एक वर्ग द्वारा किया जाता है जिसका नाम है Box। यह वर्ग पैकेज का हैjavafx.scene.shape। इस क्लास को इंस्टेंट करके आप JavaFX में एक बॉक्स नोड बना सकते हैं। इस वर्ग में डबल डेटाटाइप के 3 गुण हैं -
|
2 | सिलेंडर
एक सिलेंडर एक बंद ठोस होता है जिसमें एक घुमावदार सतह से जुड़े दो समानांतर (अधिकतर गोलाकार) आधार होते हैं। यह दो मापदंडों द्वारा वर्णित है, अर्थात्, radius इसके परिपत्र आधार और height सिलेंडर का। जावाएफएक्स में, एक सिलेंडर का प्रतिनिधित्व एक वर्ग द्वारा किया जाता है जिसका नाम है Cylinder। यह वर्ग पैकेज का हैjavafx.scene.shape। इस क्लास को इंस्टेंट करके, आप JavaFX में एक सिलेंडर नोड बना सकते हैं। इस वर्ग में डबल डेटाटाइप के 2 गुण हैं -
|
3 | क्षेत्र
एक गोले को उन बिंदुओं के समूह के रूप में परिभाषित किया जाता है जो किसी दिए गए बिंदु से 3 डी अंतरिक्ष में समान दूरी पर होते हैं। यह दूरी r गोले की त्रिज्या है और दिए गए बिंदु गोले का केंद्र है। JavaFX में, एक गोले को एक वर्ग का नाम दिया गया है Sphere। यह वर्ग पैकेज का हैjavafx.scene.shape। इस क्लास को इंस्टेंट करके आप JavaFX में एक गोले का नोड बना सकते हैं। इस वर्ग के नाम पर एक संपत्ति है radiusडबल डेटाटाइप का। यह एक क्षेत्र की त्रिज्या का प्रतिनिधित्व करता है। |
3 डी वस्तुओं के गुण
सभी 3 आयामी वस्तुओं के लिए, आप विभिन्न गुणों को सेट कर सकते हैं जैसे Cull Face, Drawing Mode, Material।
निम्नलिखित खंड 3D वस्तुओं के गुणों पर चर्चा करता है।
कलंक चेहरा
सामान्य तौर पर, culling किसी आकृति के अनुचित रूप से उन्मुख भागों को हटाना है (जो दृश्य क्षेत्र में दिखाई नहीं देते हैं)।
Cull फेस प्रॉपर्टी टाइप की होती है CullFaceऔर यह एक 3D आकार के Cull फेस का प्रतिनिधित्व करता है। आप विधि का उपयोग करके किसी आकृति का Cull फेस सेट कर सकते हैंsetCullFace() जैसा कि नीचे दिखाया गया है -
box.setCullFace(CullFace.NONE);
आकृति का स्ट्रोक प्रकार हो सकता है -
None - कोई पुलिंग नहीं की जाती है (CullFace.NONE)।
Front- सभी सामने वाले पॉलीगनों को खींचा जाता है। (CullFace.FRONT)।
Back- पॉलीगनों का सामना करने वाले सभी वापस आ गए हैं। (StrokeType.BACK)।
डिफ़ॉल्ट रूप से, एक 3-आयामी आकार का सुस्त चेहरा वापस आ गया है।
उदाहरण
निम्नलिखित कार्यक्रम एक उदाहरण है जो क्षेत्र के विभिन्न सुस्त चेहरों को प्रदर्शित करता है। इस कोड को नाम वाली फ़ाइल में सहेजेंSphereCullFace.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);
}
}
निम्न आदेशों का उपयोग करके कमांड प्रॉम्प्ट से सहेजी गई जावा फ़ाइल को संकलित करें और निष्पादित करें।
javac SphereCullFace.java
java SphereCullFace
निष्पादित करने पर, उपरोक्त कार्यक्रम एक जावाएफएक्स विंडो उत्पन्न करता है, जिसमें तीन गोल चेहरे के मान दिखाई देते हैं FRONT, BACK तथा NONE क्रमशः इस प्रकार है -
रेखाचित्र बनाना
यह संपत्ति का प्रकार है DrawModeऔर यह वर्तमान 3D आकार को खींचने के लिए उपयोग किए जाने वाले ड्राइंग मोड का प्रतिनिधित्व करता है। आप इस प्रकार सेट मोडवमोड () का उपयोग करके 3D आकृति बनाने के लिए ड्रा मोड चुन सकते हैं -
box.setDrawMode(DrawMode.FILL);
JavaFX में, आप 3D आकृति बनाने के लिए दो ड्रा मोड चुन सकते हैं, जो हैं -
Fill - यह मोड एक 2D शेप (DrawMode.FILL) को ड्रॉ और भरता है।
Line - यह मोड लाइनों (DrawMode.LINE) का उपयोग करके एक 3D आकार बनाता है।
डिफ़ॉल्ट रूप से, एक 3 डी आयामी आकृति का ड्राइंग मोड भर जाता है।
उदाहरण
निम्नलिखित कार्यक्रम एक उदाहरण है जो एक 3 डी बॉक्स के विभिन्न ड्रा मोड प्रदर्शित करता है। इस कोड को नाम वाली फ़ाइल में सहेजेंBoxDrawMode.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);
}
}
निम्न कमांड का उपयोग करके कमांड प्रॉम्प्ट से सहेजे गए जावा फ़ाइल को संकलित और निष्पादित करें।
javac BoxDrawMode.java
java BoxDrawMode
निष्पादित करने पर, उपरोक्त कार्यक्रम एक JavaFX विंडो बनाता है जिसमें क्रमशः ड्रा मोड मान LINE और FILL के साथ दो बॉक्स प्रदर्शित होते हैं, -
सामग्री
सुस्त चेहरा संपत्ति प्रकार का है Materialऔर इसका उपयोग 3 डी आकार की सामग्री की सतह को चुनने के लिए किया जाता है। आप विधि का उपयोग करके 3 डी आकार की सामग्री सेट कर सकते हैंsetCullFace() निम्नानुसार है -
cylinder.setMaterial(material);
जैसा कि इस पद्धति के लिए ऊपर उल्लेख किया गया है, आपको टाइप मटेरियल के ऑब्जेक्ट को पास करना होगा। PhongMaterial पैकेज की कक्षा javafx.scene.paintइस वर्ग का एक उप वर्ग है और 7 गुण प्रदान करता है जो एक फोंग छायांकित सामग्री का प्रतिनिधित्व करता है। आप इन गुणों के सेटर तरीकों का उपयोग करके इन सभी प्रकार की सामग्रियों को एक 3D आकार की सतह पर लागू कर सकते हैं।
जावाएफएक्स में उपलब्ध सामग्री के प्रकार निम्नलिखित हैं -
bumpMap - यह आरजीबी छवि के रूप में संग्रहीत एक सामान्य मानचित्र का प्रतिनिधित्व करता है।
diffuseMap - यह एक विसरित मानचित्र का प्रतिनिधित्व करता है।
selfIlluminationMap - यह इस PhongMaterial के आत्म-प्रदीप्ति मानचित्र का प्रतिनिधित्व करता है।
specularMap - यह इस PhongMaterial के एक स्पेकुलर मैप को दर्शाता है।
diffuseColor - यह इस PhongMaterial के एक फैलाने वाले रंग का प्रतिनिधित्व करता है।
specularColor - यह इस PhongMaterial के एक स्पेक्युलर रंग का प्रतिनिधित्व करता है।
specularPower - यह इस PhongMaterial की एक स्पेक्युलर पॉवर को दर्शाता है।
डिफ़ॉल्ट रूप से, 3-आयामी आकार की सामग्री एक PhongMaterial है जो हल्के भूरे रंग के फैलाना रंग के साथ है।
उदाहरण
निम्नलिखित एक उदाहरण है जो सिलेंडर पर विभिन्न सामग्रियों को प्रदर्शित करता है। इस कोड को नाम वाली फ़ाइल में सहेजेंCylinderMaterials.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);
}
}
निम्न कमांड का उपयोग करके कमांड प्रॉम्प्ट से सहेजे गए जावा फ़ाइल को संकलित और निष्पादित करें।
Javac CylinderMaterials.java
java CylinderMaterials
निष्पादित करने पर, उपरोक्त कार्यक्रम एक जावाएफएक्स विंडो उत्पन्न करता है जिसमें सामग्री, बम्प मैप, डिफ्यूज़ मैप, सेल्फ-इल्युमिनेशन मैप, स्पेसिफिक मैप, डिफ्यूज़ कलर, स्पेक्युलर कलर, (BLANCHEDALMOND): स्पेक्युलर पॉवर के साथ क्रमशः 7 सिलेंडर प्रदर्शित होते हैं, जैसा कि निम्नलिखित स्क्रीनशॉट में दिखाया गया है। -