来自TriangleMesh的Javafx 8 3D高度图

时间:2014-03-10 01:25:52

标签: 3d javafx-8

刚刚制作了这个小应用程序并希望分享...

我从几个样本中获取代码并根据我的需要进行调整  你可以在这里得到消息来源:gitHub source

以下是几张截图... screenShot 1

enter image description here

如果您发现它有趣或有用或想要帮助改善它...随意做或说出来!

编辑:好的,似乎在某些图片上引入了很多延迟,我尝试实现时间轴,希望将一些处理推送到GPU ..(我相信它是如何工作的)..有谁能想到更好的方法来创建更新线程?

Timeline defaultTimeline = new Timeline();
    defaultTimeline.getKeyFrames().addAll(new KeyFrame(new Duration(14 - (System.currentTimeMillis() % 14)), (ActionEvent t) -> {

        Timeline everySecond = new Timeline();
        everySecond.setCycleCount(Timeline.INDEFINITE);
        everySecond.getKeyFrames().addAll(new KeyFrame(Duration.valueOf(14 + "ms"), (ActionEvent event) -> {
            update();                  
        }));
        everySecond.play();
        System.err.println("Playing");
    }));
    defaultTimeline.play();

和更新方法:

 private void update() {
    if(pixelSkipSlider.isValueChanging()){
        if(meshView.getMesh() != null){
            meshView.setMesh(MeshUtils.createHeightMap(meshImageView.getImage(), (int)pixelSkipSlider.getValue() , (float)maxHeightSlider.getValue(), (float)scaleSlider.getValue()));
        }
    }
    if(maxHeightSlider.isValueChanging()){
        if(meshView.getMesh() != null){
            meshView.setMesh(MeshUtils.createHeightMap(meshImageView.getImage(), (int)pixelSkipSlider.getValue() , (float)maxHeightSlider.getValue(), (float)scaleSlider.getValue()));
        }
    }
    if(scaleSlider.isValueChanging()){
        if(meshView.getMesh() != null){
            meshView.setMesh(MeshUtils.createHeightMap(meshImageView.getImage(), (int)pixelSkipSlider.getValue() , (float)maxHeightSlider.getValue(), (float)scaleSlider.getValue()));
        }
    }
}    

1 个答案:

答案 0 :(得分:1)

在被问到的时候,我不知道JavaFX属性的invalidated()方法, 覆盖此方法并使用它是我更新属性的首选方法。

通过这样做,平台可以正常运行,我的问题已经消失。