Skinning cube 3D personnalisé dans javafx 8


J'essaie d'ajouter un skin à un cube en utilisant le code suivant, mais le skin ne fonctionnera pas du tout. J'ai testé pour voir s'il s'ajoutera à un cube par défaut et il le fera (mais répète l'image complète de chaque côté au lieu de l'envelopper, c'est pourquoi je crée un cube personnalisé pour éviter cela). Toute aide serait grandement appréciée.

private void buildGraphics()
{
    Image dieImage = new Image(getClass().getResourceAsStream("images/die.gif"));

    PhongMaterial material = new PhongMaterial();
    material.setDiffuseMap(dieImage);
    material.setSpecularColor(Color.RED);

    float hw = 100/2f;
    float hh = 100/2f;
    float hd = 100/2f;

    float points[] = 
        {
            hw, hh, hd,
            hw, hh, -hd,
            hw, -hh, hd,
            hw, -hh, -hd,
            -hw, hh, hd,
            -hw, hh, -hd,
            -hw, -hh, hd,
            -hw, -hh, -hd,
        };

    float tex[] =
        {
            100, 0,
            200, 0,
            0, 100,
            100, 100,
            200, 100,
            300, 100,
            400, 100,
            0, 200,
            100, 200,
            200, 200,
            300, 200,
            400, 200,
            100, 300,
            200, 300
        };

    int faces[] =
        {
            0, 10, 2, 5, 1, 9,
            2, 5, 3, 4, 1, 9,
            4, 7, 5, 8, 6, 2,
            6, 2, 5, 8, 7, 3,
            0, 13, 1, 9, 4, 12,
            4, 12, 1, 9, 5, 8,
            2, 1, 6, 0, 3, 4,
            3, 4, 6, 0, 7, 3,
            0, 10, 4, 11, 2, 5,
            2, 5, 4, 11, 6, 6,
            1, 9, 3, 4, 5, 8,
            5, 8, 3, 4, 7, 3
        };

    TriangleMesh mesh = new TriangleMesh();
    mesh.getPoints().addAll(points);
    mesh.getTexCoords().addAll(tex);
    mesh.getFaces().addAll(faces);

    MeshView box = new MeshView(mesh);
    box.setMaterial(material);

    graphicGroup.getChildren().add(box);

    Box box2 = new Box(100, 100, 100);
    box2.setTranslateX(150);
    box2.setMaterial(material);


    graphicGroup.getChildren().add(box2);
    world.getChildren().add(graphicGroup);
}
Author: Jamie Coleshill, 2013-10-19

1 answers

Vous avez raison... J'ai également joué avec la fabrication de formes de base.. comme la Capsule, les cartes de hauteur, le Tore, etc...

Les texCoords sont une douleur, mais les visages le sont encore plus lorsqu'ils font des formes plus complexes.

Comme vous l'avez commenté, texCoords devrait être une valeur comprise entre 0,0(0%) et 1,0(100%) de votre image rectangle

Je n'ai toujours pas pu trouver mes texCoords pour mon Tore...

Je pense toujours que les gars dans les coulisses doivent se débarrasser de leur système de construction de TriangleMesh.

Point3D le sens parfait pour les Points[], mais ils utilisent un float[] ... même chose avec texCoords... Point2D ferait un bien meilleur ajustement à mon humble avis.. Les visages [] est ok... Comme c'est un simple Entier[]...

Je peux même simplement créer une classe SimpleMesh qui gère la chose de cette façon... de toute façon, Heureux que vous ayez pensé à elle.

 0
Author: jdub1581, 2014-07-26 00:32:53