2017-05-12 7 views
2

J'avais des problèmes pour appliquer une texture à un maillage en utilisant JavaFX et FXyz 0.1.1.application de texture pour mailler dans javafx

J'ai trouvé this question et même avec la réponse détaillée, il ne pouvait pas comprendre. J'ai recommencé à zéro, copiant le code de la réponse exactement et la scène est noire sans icosohedron visible. J'utilise Java 8. L'image fournie est un fichier gif et le code le référence en tant que png. Je l'ai essayé avec les versions png et gif du fichier. Autant que je peux dire tout le reste est exactement comme le code dans la réponse à la question référencée.

Je suis capable de lancer this et de texturer cette sphère sans problème, mais j'aimerais pouvoir utiliser un icosohedron à la place d'une sphère.

Répondre

1

Si vous utilisez le FXyz library, vous pouvez très facilement appliquer différentes textures à un icosaèdre ou à l'une des différentes primitives que vous pouvez trouver dans le library.

Cet extrait montre 5 différents modes de texture:

@Override 
public void start(Stage primaryStage) { 
    PerspectiveCamera camera = new PerspectiveCamera(true); 
    camera.setTranslateY(3); 
    camera.setTranslateX(4); 
    camera.setTranslateZ(-15); 

    IcosahedronMesh icoLine = new IcosahedronMesh(100, 0); 
    icoLine.setDrawMode(DrawMode.LINE); 
    icoLine.getTransforms().addAll(new Rotate(10, Rotate.X_AXIS), new Rotate(-20, Rotate.Y_AXIS)); 

    IcosahedronMesh icoColor = new IcosahedronMesh(100, 0); 
    icoColor.setTextureModeNone(Color.LIGHTGREEN); 
    icoColor.getTransforms().addAll(new Rotate(20, Rotate.X_AXIS), new Rotate(-20, Rotate.Y_AXIS)); 

    IcosahedronMesh icoFunction = new IcosahedronMesh(100, 0); 
    icoFunction.setTextureModeVertices3D(1530, p -> Math.cos(p.z)); 
    icoFunction.getTransforms().addAll(new Rotate(30, Rotate.X_AXIS), new Rotate(-20, Rotate.Y_AXIS)); 

    IcosahedronMesh icoFaces = new IcosahedronMesh(100, 0); 
    icoFaces.setTextureModeFaces(5); 
    icoFaces.getTransforms().addAll(new Rotate(20, Rotate.X_AXIS), new Rotate(-10, Rotate.Y_AXIS)); 

    IcosahedronMesh icoImage = new IcosahedronMesh(100, 0); 
    icoImage.setTextureModeImage(getClass().getResource("icon.jpg").toExternalForm()); 
    icoImage.getTransforms().addAll(new Rotate(20, Rotate.X_AXIS), new Rotate(-20, Rotate.Y_AXIS)); 

    IcosahedronMesh icoPattern = new IcosahedronMesh(100, 0); 
    icoPattern.setTextureModePattern(Patterns.CarbonPatterns.CARBON_KEVLAR, 100); 
    icoPattern.getTransforms().addAll(new Rotate(20, Rotate.X_AXIS), new Rotate(-30, Rotate.Y_AXIS)); 


    GridPane grid = new GridPane(); 
    grid.add(new Group(icoLine), 0, 0); 
    grid.add(new Group(icoColor), 1, 0); 
    grid.add(new Group(icoFunction), 2, 0); 

    grid.add(new Group(icoFaces), 0, 1); 
    grid.add(new Group(icoImage), 1, 1); 
    grid.add(new Group(icoPattern), 2, 1); 
    Scene scene = new Scene(grid, 600, 400, true, SceneAntialiasing.BALANCED); 
    scene.setCamera(camera); 

    primaryStage.setScene(scene); 
    primaryStage.setTitle(("Icosahedron - FXyz3D")); 
    primaryStage.show(); 

} 

Icosahedra Textures

+0

Nous vous remercions de réponse et les exemples. Ils m'ont fait aller dans la direction que je cherchais. – sdp0et