Innholdsfortegnelse:
Video: JavaFX Java GUI Tutorial - 1 - Creating a Basic Window 2025
JavaFX har innebygd støtte for realistisk 3D-modellering. Faktisk er JavaFX scene grafen tredimensjonal i naturen. De fleste JavaFX-programmer fungerer i bare to dimensjoner, og angir bare x- og y-koordinater. Men alt du trenger å gjøre for å gå inn i den tredje dimensjonen er å spesifisere z-koordinater for å plassere knutepunktene til scenegrafen din i tredimensjonalt rom.
JavaFX inneholder et rikt sett med klasser som er dedikert til å lage og visualisere 3D-objekter i 3D-verdener. Du kan lage tredimensjonale former, for eksempel kuber og sylindere. Du kan flytte det virtuelle kameraet rundt i 3D-rommet for å se på dine 3D-objekter fra forskjellige vinkler og forskjellige perspektiver.
Og du kan til og med legge til lyskilder for å nøye kontrollere det endelige utseendet til virtuelle verdener. Kort sagt, JavaFX er i stand til å produsere forbløffende 3D scener.
Legg til en 3D-boks i Java-verdenen din
I dette trinnet legger du til et objekt i 3D-verdenen: I dette tilfellet en boks, representert av bokseklassen. Her er koden:
Bokseboks = Ny boks (100, 100, 100); eske. setMaterial (blueStuff); eske. setTranslateX (150); eske. setTranslateY (-100); eske. setTranslateZ (-100); rot. getChildren (). legg (boks);
Boksekonstruktøren aksepterer tre argumenter som representerer bredden, høyden og dybden av boksen. I dette eksemplet er alle tre satt til 100. Dermed blir boksen tegnet som en terning med hver side som måler 100 enheter.
Boksen er gitt samme materiale som sylinderen; da er det oversatt på alle tre aksene, slik at du kan få et perspektivvis av boksen. Figuren viser hvordan boksen vises når den gjengis. Som du kan se, er venstre og bunnflaten av boksen synlig fordi du har oversatt posisjonsposisjonen oppe og til høyre slik at kameraet kan få noe perspektiv.
Roter 3D-boksen
I dette trinnet, roter du boksen for å skape en enda mer interessant perspektivvisning. Det er to måter å rotere et 3D-objekt på. Det enkleste er å ringe objektets setRotate-metode og levere en rotasjonsvinkel:
boks. setRotate (25);
Som standard vil dette rotere objektet på sin z-akse. Hvis dette er vanskelig å visualisere, tenk å skjære objektet med en lang pinne som er parallell med z-aksen. Spinn deretter objektet på spissen.
Hvis du vil rotere objektet langs en annen akse, må du først ringe til setRotationAxis. For eksempel, for å rotere objektet på sin x-akse, bruk denne sekvensen:
-boksen. setRotationAxis (Rotate. X_AXIS); eske. setRotate (25);
Tenk å kjøre spyden gjennom boksen med spydet parallelt med x-aksen og deretter spinne boksen 25 grader.
Det eneste problemet med å bruke setRotate-metoden for å rotere en 3D-objekt er at den bare fungerer på en akse om gangen. For eksempel, antar at du vil rotere boksen 25 grader på både z- og x-aksen. Følgende kode vil ikke gjøre dette:
boksen. setRotationAxis (Rotate. X_AXIS); eske. setRotate (25); eske. setRotationAxis (Rotate. Z_AXIS); eske. setRotate (25);
Når setRotate-metoden kalles andre gang for å rotere boksen på z-aksen, tilbakestilles x-aksens rotasjon.
For å rotere på mer enn en akse må du bruke Rotate-klassen i stedet. Du oppretter en separat Rotate-forekomst for hver akse du vil rotere objektet på, og deretter legger du til alle roterende forekomster i objektets Transforms-samling via getTransforms (). Legg tilAll metode, slik:
Rotere rxBox = Ny Rotate (0, 0, 0, 0, Rotate. X_AXIS); Roter 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); eske. getTransforms (). addAll (rxBox, ryBox, rzBox);
Rotate-konstruktøren godtar fire parametere. De tre første er x-, y- og z-koordinatene til punktet i objektet gjennom hvilket rotasjonsaksen vil passere. Vanligvis angir du nuller for disse parametrene for å rotere objektet rundt midtpunktet. Den fjerde parameteren angir rotasjonsaksen.
Denne figuren viser hvordan boksen vises etter at den er rotert.
