Innehållsförteckning:
Video: JavaFX Java GUI Tutorial - 1 - Creating a Basic Window 2024
JavaFX har inbyggt stöd för realistisk 3D-modellering. Faktum är att JavaFX-scenen är tredimensionell i naturen. De flesta JavaFX-program fungerar i bara två dimensioner, som bara anger x- och y-koordinater. Men allt du behöver göra för att gå in i den tredje dimensionen är att ange z-koordinater för att placera noderna på din scengraf i tredimensionellt utrymme.
JavaFX innehåller en rik uppsättning klasser som är dedikerade till att skapa och visualisera 3D-objekt i 3D-världar. Du kan skapa tredimensionella former, till exempel kuber och cylindrar. Du kan flytta den virtuella kameran runt i 3D-rymden för att titta på dina 3D-objekt från olika vinklar och olika perspektiv.
Och du kan till och med lägga till ljuskällor för att noggrant kontrollera det slutliga utseendet på dina virtuella världar. Kort sagt, JavaFX kan producera häpnadsväckande 3D-scener.
Lägg till en 3D-ruta i din Java-värld
I det här steget lägger du till ett objekt i 3D-världen: I det här fallet en ruta som representeras av boxklassen. Här är koden:
Box box = Ny Box (100, 100, 100); låda. setMaterial (blueStuff); låda. setTranslateX (150); låda. setTranslateY (-100); låda. setTranslateZ (-100); rot. getChildren (). lägg (fält);
Boxkonstruktorn accepterar tre argument som representerar boxens bredd, höjd och djup. I detta exempel är alla tre inställda på 100. Således kommer lådan att dras som en kub med varje sida som mäter 100 enheter.
Lådan har samma material som cylindern; då är det översatt på alla tre axlarna så att du kan få en perspektivvy av lådan. Figuren visar hur rutan visas när den görs. Som du kan se är lådans vänstra och nedre sidor synliga eftersom du översatt läget av lådan upp och till höger så att kameran kan få lite perspektiv.
Rotera 3D-rutan
I det här steget roterar du rutan för att skapa en ännu mer intressant perspektivvy. Det finns två sätt att rotera ett 3D-objekt. Det enklaste är att ringa objektets setRotate-metod och tillhandahålla en rotationsvinkel:
rutan. setRotate (25);
Som standard roterar objektet på sin z-axel. Om det här är svårt att visualisera, kan du föreställa dig att du skär objektet med en lång pinne som är parallell med z-axeln. Snurra sedan objektet på spett.
Om du vill rotera objektet längs en annan axel, ring först setRotationAxis. Till exempel, för att snurra objektet på sin x-axel, använd den här sekvensen:
rutan. setRotationAxis (Rotate. X_AXIS); låda. setRotate (25);
Föreställ dig att köra spett genom lådan med spett parallellt med x-axeln och spinna sedan lådan 25 grader.
Det enda problemet med att använda setRotate-metoden för att rotera ett 3D-objekt är att det bara fungerar på en axel åt gången. Antag att du vill rotera rutan 25 grader på både z- och x-axeln. Följande kod kommer inte att göra detta:
rutan. setRotationAxis (Rotate. X_AXIS); låda. setRotate (25); låda. setRotationAxis (Rotate. Z_AXIS); låda. setRotate (25);
När setRotate-metoden kallas andra gången för att rotera rutan på z-axeln, återställs x-axelrotationen.
För att rotera på mer än en axel, måste du använda Rotate-klassen i stället. Du skapar en separat Rotate-instans för varje axel som du vill rotera objektet på och lägger sedan till alla Rotate-instanser i objektets Transforms-samling via getTransforms (). lägg tillAll metod, så här:
Rotera rxBox = Ny Rotate (0, 0, 0, 0, Rotate. X_AXIS); Rotera 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); låda. getTransforms (). addAll (rxBox, ryBox, rzBox);
Rotatkonstruktorn accepterar fyra parametrar. De första tre är x-, y- och z-koordinaterna för punkten i objektet genom vilket rotationsaxeln kommer att passera. Vanligtvis anger du nollor för dessa parametrar för att rotera objektet runt dess mittpunkt. Den fjärde parametern anger rotationsaxeln.
Denna figur visar hur rutan visas efter att den har roterats.
Lådan efter att den har roterats.