JavaFX: ajouter un objet maillé à un monde en 3D

Les objets que vous pouvez le plus simplement ajouter à votre monde virtuel JavaFX sont créés en utilisant les trois classes intégrées de forme 3D qui viennent avec JavaFX: Cylindre, Boîte, et Sphère. Pour plus d'objets complexes, vous devez utiliser le TriangleMesh classe pour créer l'objet basé sur une série de triangles connectés.

Ici, créer un des plus simples de tous les objets de maille: la pyramide à quatre côtés en photo ici. Visuellement, une pyramide à quatre côtés a un total de cinq Faces: les quatre faces latérales triangulaires et la base carrée. Mais dans un maillage JavaFX triangle, les places ne sont pas autorisés, seuls les triangles. Ainsi, la pyramide compose en fait de six faces: les quatre faces triangulaires latérales et deux triangles adjacents qui composent le visage.

Cette section présente des informations très conceptuellement difficile. Si vous ne l'avez pas étudié mailles dans une classe Infographie, être prêt à lire les paragraphes suivants à plusieurs reprises avant qu'il ne commence à faire sens.

Si elle n'a pas encore un sens, prenez un café au lait, retirer une feuille de papier millimétré, et commencer à griffonner. Dessin de la pyramide avec votre propre main aidera votre compréhension. Essayez d'utiliser un crayon.

Une pyramide à base carrée dans JavaFX.
Une pyramide à base carrée dans JavaFX.

Pour obtenir la pyramide commencé, appeler le TriangleMesh constructeur comme ceci:

TriangleMesh pyramidMesh = new TriangleMesh () -

Pour compléter la pyramide, vous devez remplir trois collections qui définissent la géométrie de la maille. Ces collections contiennent les points, les visages, et les coordonnées de texture qui définissent la forme.

Commencez avec la texture collection de coordonner, parce que vous pouvez très bien l'ignorer pour cette simple pyramide. Les coordonnées de texture sont utiles lorsque vous utilisez un matériau qui contient une image qui devrait être étiré de façon spécifique sur le cadre de la maille. Ils vous permettent d'associer un x, y spécifiques coordonnée dans l'image à chaque coin de chaque face.




Malheureusement, vous ne pouvez pas simplement laisser de côté les coordonnées de texture, même si vous ne les utilisez pas, vous devez charger au moins une coordonnée. Faire avec cette ligne de code:

. pyramidMesh.getTexCoords () addAll (0,0) -

Passons maintenant aux deux autres collections. La prochaine est une collection de la sommets (autrement dit, coins) qui définit la forme. Votre pyramide à base carrée a cinq sommets, que vous pouvez imaginer que le haut, le coin avant (le point le plus proche), le coin gauche, le coin arrière, et le coin droit. Ces sommets sont numérotés 0, 1, 2, 3, et 4.

Compte tenu de la hauteur h et la longueur s de chaque côté de la pyramide, on peut calculer les directions x, y et z des coordonnées pour chacun des sommets en utilisant les formules suivantes:

SommetCoinXYZ
0Haut000
1Devant0h-s / 2
2Gauche-s / 2h0
3Arrières / 2h0
4Droit0hs / 2

Avec tout ce que comme arrière-plan, voici le code pour créer la collection Points:

flotter h = 150 - 300 = // s Heightfloat -. // SidepyramidMesh.getPoints () addAll (0,0,0, // point 0 - Top0, h, -s / 2, point 1 // - Front-s / 2, h, 0, // point 2 - Lefts / 2, h, 0, // point 3 - Back0, H, S / 2 // point 4 - Droit) -

La collection finale définit les visages. Les visages sont définis en spécifiant l'index de chaque sommet qui fait chaque face. Par exemple, la face avant gauche est un triangle dont les trois sommets sont le haut, à l'avant, et de la gauche. Les indices pour ces trois sommets sont 0, 2 et 1.

Il existe un total de six triangles de la pyramide, et leurs faces sont définies par les points suivants:

VisagePoint 1Point 2Point 3
Avant gauche021
Avant droit013
Arrière droit034
Arrière gauche042
Inférieur arrière412
Avant en bas432

Même si cela peut ne pas être évident à partir de ce tableau, l'ordre dans lequel les visages apparaissent est essentielle à la réussite de la maille. En général, les visages sont répertoriés dans un sens anti-horaire et l'ordre à la baisse. Ainsi, les quatre faces latérales enveloppent la pyramide pour le sens antihoraire. Ils sont suivis par les deux faces inférieures.

Chaque face dans la collection de faces est représenté par trois paires de nombres dont chacun représente l'indice de l'un des sommets du triangle et l'indice de la texture correspondant de coordonnées.

Parce que vous avez un seul élément de la texture collection Coordonner, le deuxième nombre dans chaque paire sera toujours zéro. Ainsi, la séquence 0, 0, 2, 0, 1, 0 définit la face avant gauche: Les indices de vertex sont 0, 2 et 1, et la texture de coordonner les indices sont tous à 0.

Voici le code pour charger la collection Faces:

pyramidMesh.getFaces (). addAll (0,0, 2,0, 1,0, // Avant gauche face0,0, 1,0, 3,0, // face0,0 avant droite, 3,0, 4, 0, // face0,0 Arrière droit, 4,0, 2,0, // face4,0 Arrière gauche, 1,0, 2,0, // face4,0 arrière Bas, 3,0, 1,0 / / face avant Bottom) - 

Après les trois collections de la maille sont prêts, le reste du code concrétise la pyramide en ajoutant un matériau Phong, traduit la pyramide pour l'obtenir sur le centre de la scène, et ajoute la pyramide à la racine:

Pyramide MeshView = new MeshView(pyramidMesh)-pyramid.setDrawMode(DrawMode.FILL)-pyramid.setMaterial(blueStuff)-pyramid.setTranslateX(200)-pyramid.setTranslateY(100)-pyramid.setTranslateZ(200)-root.getChildren().add(pyramid)-

» » » » JavaFX: ajouter un objet maillé à un monde en 3D