Indholdsfortegnelse:
Video: JavaFX Java GUI Tutorial - 1 - Creating a Basic Window 2025
JavaFX har indbygget understøttelse til realistisk 3D-modellering. Faktisk er JavaFX scene grafen tredimensionel i naturen. De fleste JavaFX-programmer fungerer kun i to dimensioner og angiver kun x- og y-koordinater. Men alt hvad du skal gøre for at gå ind i den tredje dimension er at angive z-koordinater for at placere noderne på din scenediagram i tredimensionelt rum.
JavaFX indeholder et rigt sæt klasser, der er dedikeret til at skabe og visualisere 3D-objekter i 3D-verdener. Du kan oprette tredimensionale former, som f.eks. Terninger og cylindre. Du kan flytte det virtuelle kamera rundt i 3D-rummet for at se på dine 3D-objekter fra forskellige vinkler og forskellige perspektiver.
Og du kan endda tilføje lyskilder for nøje at kontrollere det endelige udseende af dine virtuelle verdener. Kort sagt, JavaFX er i stand til at producere forbløffende 3D scener.
Tilføj en 3D-boks til din Java-verden
I dette trin skal du tilføje et objekt til 3D-verdenen: I dette tilfælde en boks, der er repræsenteret af bokseklassen. Her er koden:
Kasse boks = Ny kasse (100, 100, 100); boks. setMaterial (blueStuff); boks. setTranslateX (150); boks. setTranslateY (-100); boks. setTranslateZ (-100); rod. getChildren (). tilføje (boks);
Boxkonstruktøren accepterer tre argumenter, der repræsenterer bredden, højden og dybden af boksen. I dette eksempel er alle tre sat til 100. Således bliver kassen tegnet som en terning med hver side, der måler 100 enheder.
Boksen er givet samme materiale som cylinderen; så er det oversat på alle tre akser, så du kan få et perspektivisk billede af kassen. Figuren viser hvordan boksen vises, når den gengives. Som du kan se, er boksens venstre og nederste side synlige, fordi du oversatte placeringen af kassen op og til højre, så kameraet kan få noget perspektiv.
Drej 3D-boksen
I dette trin skal du dreje boksen for at skabe en endnu mere interessant perspektivvisning. Der er to måder at rotere en 3D-objekt på. Det enkleste er at kalde objektets setRotate-metode og levere en rotationsvinkel:
boks. setRotate (25);
Som standard vil dette rotere objektet på sin z-akse. Hvis det er svært at visualisere, forestil dig at skære objektet med en lang pind, der er parallel med z-akse. Drej derefter objektet på spyddet.
Hvis du vil rotere objektet langs en anden akse, skal du først ringe til setRotationAxis. Hvis du f.eks. Skal dreje objektet på sin x-akse, skal du bruge denne sekvens:
boksen. setRotationAxis (Rotate. X_AXIS); boks. setRotate (25);
Forestil dig at køre spyden gennem kassen med spyddet parallelt med x-aksen og derefter spinde boksen 25 grader.
Det eneste problem med at bruge setRotate-metoden til at rotere et 3D-objekt er, at det kun virker på en akse ad gangen. Antag for eksempel, at du vil rotere boksen 25 grader på både z- og x-aksen. Følgende kode vil ikke gøre dette:
boks. setRotationAxis (Rotate. X_AXIS); boks. setRotate (25); boks. setRotationAxis (Rotate. Z_AXIS); boks. setRotate (25);
Når setRotate-metoden kaldes anden gang for at rotere boksen på z-aksen, nulstilles x-aksens rotation.
For at rotere på mere end en akse, skal du bruge Rotate-klassen i stedet. Du opretter en separat Rotate-forekomst for hver akse, du vil rotere objektet på, og derefter tilføjer alle de roterende forekomster til objektets Transforms-samling via getTransforms (). addAll metode, som denne:
Rotate rxBox = new Rotate (0, 0, 0, 0, Rotate. X_AXIS); Drej ryBox = Ny Rotate (0, 0, 0, 0, Rotate. Y_AXIS); Rotate rzBox = new Rotate (0, 0, 0, 0, Rotate. Z_AXIS); rxBox. setAngle (30); ryBox. setAngle (50); rzBox. setAngle (30); boks. getTransforms (). addAll (rxBox, ryBox, rzBox);
Rotatekonstruktøren accepterer fire parametre. De første tre er x-, y- og z-koordinaterne for punktet i objektet, gennem hvilket rotationsaksen vil passere. Typisk angiver du nuller for disse parametre for at rotere objektet omkring dets midterpunkt. Den fjerde parameter angiver rotationsaksen.
Denne figur viser, hvordan kassen vises, efter at den er blevet roteret.
Boksen efter at den er blevet roteret.