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 गुण हैं -

  • width - बॉक्स की चौड़ाई।

  • height - बॉक्स की ऊंचाई।

  • depth - बॉक्स की गहराई।

2 सिलेंडर

एक सिलेंडर एक बंद ठोस होता है जिसमें एक घुमावदार सतह से जुड़े दो समानांतर (अधिकतर गोलाकार) आधार होते हैं।

यह दो मापदंडों द्वारा वर्णित है, अर्थात्, radius इसके परिपत्र आधार और height सिलेंडर का।

जावाएफएक्स में, एक सिलेंडर का प्रतिनिधित्व एक वर्ग द्वारा किया जाता है जिसका नाम है Cylinder। यह वर्ग पैकेज का हैjavafx.scene.shape

इस क्लास को इंस्टेंट करके, आप JavaFX में एक सिलेंडर नोड बना सकते हैं। इस वर्ग में डबल डेटाटाइप के 2 गुण हैं -

  • height - सिलेंडर की ऊंचाई।

  • radius - सिलेंडर की त्रिज्या।

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 सिलेंडर प्रदर्शित होते हैं, जैसा कि निम्नलिखित स्क्रीनशॉट में दिखाया गया है। -