圆柱体JavaFX上的图像缩放

时间:2014-05-29 12:39:47

标签: java javafx-8

我想要做的是在Java3D中缩放圆柱体上的图像。我到目前为止的代码如下所示。我不知道如何使图像不会拉伸整个圆柱体。

package javafxapplication2;

import javafx.application.Application;
import javafx.beans.property.DoubleProperty;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.scene.Group;
import javafx.scene.PerspectiveCamera;
import javafx.scene.PointLight;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.paint.Color;
import javafx.scene.paint.Material;
import javafx.scene.paint.PhongMaterial;
import javafx.scene.shape.Cylinder;
import javafx.scene.shape.MeshView;
import javafx.scene.shape.TriangleMesh;
import javafx.scene.transform.Rotate;
import javafx.stage.Stage;

public class EarthCylinder extends Application {

    double anchorX, anchorY;

    private double anchorAngleX = 0;
    private double anchorAngleY = 0;

    private final DoubleProperty angleX = new SimpleDoubleProperty(0);
    private final DoubleProperty angleY = new SimpleDoubleProperty(0);

    PerspectiveCamera scenePerspectiveCamera = new PerspectiveCamera(false);

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // Remove this line once dirtyopts bug is fixed for 3D primitive        
        System.setProperty("prism.dirtyopts", "false");
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        Image diffuseMap
                = new Image(EarthCylinder.class
                        .getResource("download.jpg")
                        .toExternalForm());

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

        final Cylinder cylinder = new Cylinder(200, 400);

        cylinder.setMaterial(material);


        final Group parent = new Group(cylinder);
        parent.setTranslateX(450);
        parent.setTranslateY(450);
        parent.setTranslateZ(0);

        Rotate xRotate;
        Rotate yRotate;
        parent.getTransforms().setAll(
        xRotate = new Rotate(0, Rotate.X_AXIS),
        yRotate = new Rotate(0, Rotate.Y_AXIS));
        xRotate.angleProperty().bind(angleX);
        yRotate.angleProperty().bind(angleY);
        final Group root = new Group();
        root.getChildren().add(parent);

        final Scene scene = new Scene(root, 900, 900, true);
        scene.setFill(Color.BLACK);

        scene.setOnMousePressed(event -> {
            anchorX = event.getSceneX();
            anchorY = event.getSceneY();

            anchorAngleX = angleX.get();
            anchorAngleY = angleY.get();
        });

        scene.setOnMouseDragged(event -> {
            angleX.set(anchorAngleX - (anchorY - event.getSceneY()));
            angleY.set(anchorAngleY + anchorX - event.getSceneX());
        });

        PointLight pointLight = new PointLight(Color.WHITE);
        pointLight.setTranslateX(400);
        pointLight.setTranslateY(400);
        pointLight.setTranslateZ(-3000);

        scene.setCamera(scenePerspectiveCamera);

        root.getChildren().addAll(pointLight, scenePerspectiveCamera);

        primaryStage.setScene(scene);
        primaryStage.show();
    }
}

以上代码的结果如下所示:

enter image description here

0 个答案:

没有答案