3 Stappen naar het bouwen van een 3D Java World

3 Stappen naar het bouwen van een 3D Java World - dummies

In een paar korte stappen kunt u beginnen met het maken van een relatief eenvoudig 3D-programma in JavaFX dat de driedimensionale wereld weergeeft (een voorbeeld wordt hieronder getoond) . Zoals u kunt zien, omvat deze 3D-ruimte vier vormen: een bol, een kubus, een cilinder en een piramide. Deze korte lijst laat zien hoe je aan de slag kunt met een cilinder.

Trek je Thinking Cap aan, want dit voorbeeld is soms behoorlijk technisch en veel van de concepten met betrekking tot het bouwen van 3D-werelden kunnen verwarrend zijn, vooral als dit je eerste ervaring met 3D-programmering is.

Een voorbeeld van een 3D-programma in JavaFX.

Stap één: voeg een cilinder toe

In deze stap voegt u een standaard 3D-object toe aan uw wereld. JavaFX biedt drie basisvormen die u kunt toevoegen: cilinders, dozen en bollen. Begin met het toevoegen van een cilinder:

 Cilindercilinder = nieuwe cilinder (100, 50); wortel. getChildren (). voeg (cilinder); 

De constructeur van de cilinderklasse accepteert twee argumenten: de straal van de cilinder en de hoogte. Dit voorbeeld creëert een cilinder die ruwweg de vorm heeft van een hockeypuck, vier keer zo breed als hij groot is; vervolgens wordt de cilinder toegevoegd aan het hoofdknooppunt van de scène.

Op dit moment bestaat de cilinder in de wereld, maar is deze niet zichtbaar. Op basis van wat u weet van 2D-vormen, kunt u in de verleiding komen om het zichtbaar te maken door een vulkleur (setFill) of een lijnkleur (setStroke) toe te voegen. Maar dat is niet hoe 3D-objecten werken. In de volgende stap ontdek je hoe je een materiaal op het oppervlak van de cilinder aanbrengt zodat het zichtbaar is in de scène.

Stap twee: maak een materiaal

Het renderen van de vlakken van een 3D-object is veel ingewikkelder dan het renderen van platte, tweedimensionale objecten. Voor een 2D-object past u een Paint-object toe via de methode setFill. De verf kan een eenvoudige kleur, een verloopkleur of een afbeelding zijn.

Voor 3D-objecten past u geen verf toe. In plaats daarvan past u een speciaal object toe dat een Phong-materiaal wordt genoemd, vertegenwoordigd door de klasse PhongMaterial. Een Phong-materiaal (genoemd naar Bui Tuong Phong, een pionierende computergrafiekdeskundige in de jaren 1970) biedt de middelen waarmee de gezichten van een 3D-object realistisch worden weergegeven.

De volgende code maakt een eenvoudig Phong-materiaal op basis van twee tinten blauw en past vervolgens het materiaal op de cilinder toe:

 PhongMaterial blueStuff = new PhongMaterial (); bluestuff. setDiffuseColor (kleur LIGHTBLUE); bluestuff. setSpecularColor (kleur BLUE); cilinder. setMaterial (bluestuff); 

Nadat het Phong-materiaal op de cilinder is aangebracht, is de cilinder zichtbaar in de scène, zoals weergegeven.

De 3D-cilinder met een Phong-materiaal.

Stap drie: Vertaal de cilinder

Je hebt ongetwijfeld gemerkt dat de cilinder er niet erg driedimensionaal uitziet. Dat is omdat je er edge-on naar kijkt: de camera wijst recht op de kruising van de x- en y-assen, en de cilinder is precies op die plek gericht.

Om enig perspectief te krijgen op de cilinder, kunt u deze verplaatsen naar een andere locatie in de 3D-ruimte door de x-, y- en z-coördinaten te vertalen. Bijvoorbeeld:

 cilinder. setTranslateX (-200); cilinder. setTranslateY (200); cilinder. setTranslateZ (200); 

Hier wordt de cilinder 200 eenheden naar links verplaatst, 200 eenheden naar beneden en 200 eenheden weg van de camera. Het resulterende beeld lijkt meer op een cilinder, zoals je hier kunt zien.

De vertaalde 3D-cilinder.

In deze afbeelding lijkt het alsof de cilinder naar voren is gedraaid, zodat u een beetje van het bovenoppervlak kunt zien. Dit is echter niet het geval. Wat er feitelijk is gebeurd, is dat je niet langer naar de cilinder kijkt.

In plaats daarvan, omdat de cilinder zich onder de camera bevindt, kijkt u erop neer. Zo kun je een beetje van de bovenkant zien. Je kijkt er ook vanaf de zijkant naar, wat verklaart waarom het een beetje gekanteld lijkt.