首页 > 解决方案 > 在盒子 JavaFX 周围包裹纹理

问题描述

我需要在 JavaFX 中制作一个魔方,而不是使用标准库和 SceneBulider。问题是 - 我有一个需要包裹立方体的纹理。使用这个: 在 javafx 8 中对自定义 3D 立方体进行蒙皮在 JavaFX 中使用不同纹理创建一个立方体 无法获得任何结果。无论如何,这是我的控制器。

import com.sun.javafx.geom.transform.GeneralTransform3D;
import javafx.fxml.FXML;
import javafx.scene.*;
import javafx.scene.image.Image;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.AnchorPane;
import javafx.scene.paint.Color;
import javafx.scene.paint.PhongMaterial;
import javafx.scene.shape.Box;
import javafx.scene.shape.DrawMode;
import javafx.scene.shape.MeshView;
import javafx.scene.shape.TriangleMesh;
import javafx.scene.transform.Rotate;
import javafx.scene.transform.Translate;

public class Controller{
 /*   double mousePosX;
    double mousePosY;
    double mouseOldX;
    double mouseOldY;
    Rotate rotateX = new Rotate(30, 0, 0, 0, Rotate.X_AXIS);
    Rotate rotateY = new Rotate(20, 0, 0, 0, Rotate.Y_AXIS);*/
    @FXML
    Camera camera = new PerspectiveCamera(true);

    @FXML
    private Box rubik;

    @FXML
    private AnchorPane anchor;

    @FXML
    private MeshView mesh;
    @FXML
    private AmbientLight ambientlight;

        private void paintCube()

    {
        Image dieImage = new Image(getClass().getResourceAsStream("textura.png"));

        PhongMaterial material = new PhongMaterial();
        material.setDiffuseMap(dieImage);

        ambientlight.setColor(Color.WHITE);

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

        float points[] =
                {
                        0, 0, 300,      //P0
                        300, 0, 300,    //P1
                        0, 300, 300,    //P2
                        300, 300, 300,  //P3
                        0, 0, 0,        //P4
                        300, 0, 0,      //P5
                        0, 300, 0,      //P6
                        300, 300, 0     //P7
                };

        float tex[] =
                {
                        0.25f, 0,       //T0
                        0.5f, 0,        //T1
                        0, 0.25f,       //T2
                        0.25f, 0.25f,   //T3
                        0.5f, 0.25f,    //T4
                        0.75f, 0.25f,   //T5
                        1, 0.25f,       //T6
                        0, 0.5f,        //T7
                        0.25f, 0.5f,    //T8
                        0.5f, 0.5f,     //T9
                        0.75f, 0.5f,    //T10
                        1, 0.5f,        //T11
                        0.25f, 0.75f,   //T12
                        0.5f, 0.75f     //T13
                };

        int faces[] =
                {
                        5,1,4,0,0,3     //P5,T1 ,P4,T0  ,P0,T3
                        ,5,1,0,3,1,4    //P5,T1 ,P0,T3  ,P1,T4
                        ,0,3,4,2,6,7    //P0,T3 ,P4,T2  ,P6,T7
                        ,0,3,6,7,2,8    //P0,T3 ,P6,T7  ,P2,T8
                        ,1,4,0,3,2,8    //P1,T4 ,P0,T3  ,P2,T8
                        ,1,4,2,8,3,9    //P1,T4 ,P2,T8  ,P3,T9
                        ,5,5,1,4,3,9    //P5,T5 ,P1,T4  ,P3,T9
                        ,5,5,3,9,7,10   //P5,T5 ,P3,T9  ,P7,T10
                        ,4,6,5,5,7,10   //P4,T6 ,P5,T5  ,P7,T10
                        ,4,6,7,10,6,11  //P4,T6 ,P7,T10 ,P6,T11
                        ,3,9,2,8,6,12   //P3,T9 ,P2,T8  ,P6,T12
                        ,3,9,6,12,7,13  //P3,T9 ,P6,T12 ,P7,T13
                };

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

       //mesh = new MeshView(mesh1);
       //mesh.setMaterial(material);
        mesh.setMesh(mesh1);

       rubik.setMaterial(material);
    }

    @FXML
    public void initialize()
    {

         Rotate cameraRotateX, cameraRotateY, cameraRotateZ;
         Translate cameraTranslate;
         cameraRotateX = new Rotate(10, Rotate.X_AXIS);
         cameraRotateY = new Rotate(10, Rotate.Y_AXIS);
         cameraRotateZ = new Rotate(0, Rotate.Z_AXIS);

        rubik.getTransforms().addAll(
                cameraRotateX,
                cameraRotateY,
                cameraRotateZ);

     //   Rotate rotateX = new Rotate(30, 0, 0, 0, Rotate.X_AXIS);
     //   Rotate rotateY = new Rotate(20, 0, 0, 0, Rotate.Y_AXIS);              
     //rubik.setRotate(45);

        paintCube();
    }
  /*  @FXML
    public void klik(MouseEvent mouseEvent) {
        mouseOldX = mouseEvent.getX();
        mouseOldY = mouseEvent.getY();
    }
    @FXML
    public void gowno(MouseEvent mouseEvent) {
        mousePosX = mouseEvent.getX();
        mousePosY = mouseEvent.getY();
        rotateX.setAngle(rotateX.getAngle()-(mousePosY - mouseOldY));
        rotateY.setAngle(rotateY.getAngle()+(mousePosX - mouseOldX));
        mouseOldX = mousePosX;
        mouseOldY = mousePosY;
    }
*/
}

立方体是 300/300/300。

标签: javajavafx

解决方案


推荐阅读