JavaFx PerspectiveCamera - fixedEyeAtCameraZero 标志 - 当为真时,所有对象都会消失

标签 java javafx graphics 3d javafx-3d

我想模拟盒子和矩形的透视变形。我的目标是扭曲盒子和图像,就好像相机正在倾斜和移动一样。但我并没有真正了解如何使用 PerspectiveCamera。

当我将 fixedEyeAtCameraZero 设置为 false 时,我可以在屏幕上看到框和图像。但是更改窗口大小会导致奇怪的正交透视变化,这是不现实的。

另一方面,当我将 fixedEyeAtCameraZero 设置为 true 时,我看到的只是一个空白窗口。

错误: false

是的: true

这是代码,第 51 行有违规标志。

package sample;
import javafx.application.Application;
import javafx.geometry.Point3D;
import javafx.scene.Group;
import javafx.scene.PerspectiveCamera;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.shape.Box;
import javafx.scene.shape.DrawMode;
import javafx.scene.shape.Rectangle;
import javafx.scene.transform.Rotate;
import javafx.stage.Stage;

public class Example_Box extends Application {
    @Override
    public void start(Stage stage) {

        //Drawing a Box
        Box box2 = new Box();

        //Setting the properties of the Box
        box2.setWidth(100.0);
        box2.setHeight(100.0);
        box2.setDepth(100.0);

        //Setting the position of the box
        box2.setTranslateX(30); //450
        box2.setTranslateY(90);//150
        box2.setTranslateZ(300);

        //Setting the drawing mode of the box
        box2.setDrawMode(DrawMode.LINE);

        //Drawing an Image
        Image image = new Image("Lenna.png");
        ImageView imageView = new ImageView(image);
        imageView.setTranslateX(200);
        imageView.setTranslateY(150);
        imageView.setTranslateZ(200);

        //imageView.getTransforms().add(new Rotate(30, 50, 30));

        //Creating a Group object
        Group root = new Group(box2, imageView);

        //Creating a scene object
        Scene scene = new Scene(root, 600, 300);

        //Setting camera
        PerspectiveCamera camera = new PerspectiveCamera(true);
        camera.setTranslateX(30);
        camera.setTranslateY(0);
        camera.setTranslateZ(-100);

        camera.setRotationAxis(new Point3D(1,0,0));
        scene.setCamera(camera);

        //Setting title to the Stage
        stage.setTitle("Drawing a Box");

        //Adding scene to the stage
        stage.setScene(scene);

        //Displaying the contents of the stage
        stage.show();
    }
    public static void main(String args[]){
        launch(args);
    }
}

最佳答案

尝试更改 farClip 值。默认情况下,farClip 值在 FX 透视相机中为 100。

    camera.setFarClip(2000.0);

通过添加上面的代码,我可以看到 Box。如果我将相机移得更远(在 Z 方向),我也可以看到图像,

    camera.setTranslateZ(-1000);

引用:http://www.dummies.com/programming/java/javafx-add-a-perspective-camera/

关于JavaFx PerspectiveCamera - fixedEyeAtCameraZero 标志 - 当为真时,所有对象都会消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41167764/

相关文章:

java - Struts2 验证中的短路

java - 如何在 DefaultButton 操作之前使用 KeyPressed 事件?

Java xpath内存泄漏?

Java 框架显示我的屏幕

java - 给定加速度计的加速度,如何对模块的空间位置进行建模?

java - Spring Security认证管理漏洞

java - 如何使按钮在 FXML 中保持其大小

带有按钮的 JavaFX.TitledPane

java - 在 swing 中调整图像大小

r - 如何使用基本图避免过度绘制(对于点)?