Apprendre à créer des modèle 3d dans JavaFX 8?
J'ai essayé de faire un avion en JavaFX application à l'aide de tutoriel officiel et a donc le code suivant:
Image diifuseMap = new Image(getClass().getResource("t.jpg").toExternalForm());
TriangleMesh planeMesh = new TriangleMesh();
float[] points = {
-5, 5, 0,
-5, -5, 0,
5, 5, 0,
5, -5, 0
};
float[] texCoords = {
0, 0,
0, 1,
1, 0,
1, 1
};
int[] faces = {
0, 0, 1, 1, 2, 2,
2, 2, 3, 3, 1, 1
};
planeMesh.getPoints().addAll(points);
planeMesh.getTexCoords().addAll(texCoords);
planeMesh.getFaces().addAll(faces);
MeshView meshView = new MeshView(planeMesh);
meshView.setMaterial(new PhongMaterial(Color.BLACK, diifuseMap, null, null, null));
Group3D plane = new Group3D(new MeshView(planeMesh));
Mais, malheureusement, rien n'est apparu dans la scène. Quelqu'un peut-il expliquer comment créer mes propres modèles 3d en JavaFX? Et est-il possible de créer sans texture(je veux modèle filaire)?
OriginalL'auteur Eugene | 2013-10-18
Vous devez vous connecter pour publier un commentaire.
Votre exemple de maillage de rendu OK pour moi.
Peut-être vous n'avez pas votre configuration de la caméra correctement ou qui ont votre maillage mises à l'échelle pour qu'il soit visible.
Votre exemple de maillage n'a pas grand-chose, c'est un triangle orienté vers la caméra et un deuxième triangle en face de la caméra.
Oui, définir la DrawMode pour votre maillage vue de Ligne.
Exemple De Programme Explication
J'ai changé l'ordre de vos visages, de sorte qu'ils sont tous deux confrontés à la même direction, de sorte que vous obtenez une place face à l'observateur plutôt qu'un triangle orienté vers le spectateur et l'on s'éloigne de l'observateur:
Aussi la texture doit changer (pour le visage ci-dessus de tableau pour obtenir la bonne orientation de la texture de sorte qu'il n'est pas à l'envers).
J'ai mis en place une réforme de reprendre le contrôle et d'animation de la rotation de la modèle, de sorte que vous pouvez voir le "retour" des côtés des triangles (en noir) et c'est clairement ce qui est en cours de rendu. J'ai également ajouté la possibilité de basculer d'une carte de diffusion (certains marbre) pour une texture ou un mode fil de fer.
Exemple De Programme De Sortie
Exemple De Programme
Qui est trop large une question de StackOverflow. Il y a des universités et des collèges d'art que de la main des diplômes dans ce genre de trucs.
Le JavaFX 3D mise en œuvre fournit un wrapper autour des Api natives qui communiquent avec le matériel graphique (par exemple, DirectX et OpenGL). Ces Api travailler avec précision plutôt que de double précision. À l'aide de
float[]
directement dans l'API signifie que le maillage du modèle de données peuvent être stockées de manière plus efficace et directement mappés à des sous-jacents des Api graphiques que sidouble[]
ou unObservableList<Double>
ont été utilisés.Quelqu'un peut-il expliquer pourquoi Maillage.setAll prend float[] alors que le reste de l'API utilise des doubles?
BTW excellent exemple de la façon d'utiliser un subscene. Merci!
Je crois parce que les valeurs sont transmises directement à l'api soufflet prisme DirectX ou OpenGL les classes serait com.soleil.prism.d3d.D3DMeshView et com.soleil.prism.es2.ES2MeshView. Je suppose que il y a une mise en œuvre de Java2D, mais je n'ai pas encore trouvé.
Je doute qu'il y est un Java2D mise en œuvre de MeshView. 3D dans JavaFX est une ConditionalFeature, donc une plate-forme qui n'exécute pas de 3D dédiée mise en œuvre comme DirectX ou OpenGL serait probablement juste le SCENE3D ConditionalFeature désactivé. Il n'est guère un problème, même si, comme la plupart des plates-formes support de DirectX ou OpenGL.
OriginalL'auteur jewelsea
Étape 1:Liste des points de
Étape 2:Liste des points de texture
Étape 3: la Liste de l'une des faces (un mélange des points 3D et points de Texture dans le sens antihoraire (ou bouton droit de la règle de la main))
OriginalL'auteur Kaiba Zax