在移动设备上点灯问题

时间:2018-05-03 20:59:18

标签: gluon javafxports javafx-3d

在我看来,在Android上运行应用程序时,PointLight不会正确点亮场景。事件虽然这是使用Gluon Mobile编码的,但在我看来,这是一个javafxport或JavaFX 3D问题。

这是演示该问题的演示视图:

import com.gluonhq.charm.glisten.application.MobileApplication;
import com.gluonhq.charm.glisten.control.AppBar;
import com.gluonhq.charm.glisten.mvc.View;
import com.gluonhq.charm.glisten.visual.MaterialDesignIcon;
import javafx.animation.Interpolator;
import javafx.animation.TranslateTransition;
import javafx.scene.PointLight;
import javafx.scene.SubScene;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Sphere;
import javafx.util.Duration;


public final class LightView extends View {

    public LightView() {
        setOnShown(event -> build3DContent());
    }

    private void build3DContent() {
        Sphere sphere = new Sphere();
        sphere.setRadius(100);
        sphere.setTranslateX(getWidth() / 2d);
        sphere.setTranslateY(getHeight() / 2d);
        final PointLight light = new PointLight(Color.WHITE);
        light.getScope().add(sphere);
        light.setTranslateZ(-300);
        light.setTranslateY(getHeight() / 2d);
        final Pane root = new Pane();
        root.getChildren().addAll(sphere, light);
        SubScene subScene = new SubScene(root, getWidth(), getHeight());
        setCenter(subScene);
        final TranslateTransition animation = new TranslateTransition(Duration.seconds(2));
        animation.setNode(light);
        animation.setToX(getWidth());
        animation.setAutoReverse(true);
        animation.setCycleCount(TranslateTransition.INDEFINITE);
        animation.setInterpolator(Interpolator.EASE_BOTH);
        animation.playFromStart();
    }    

    @Override
    protected void updateAppBar(AppBar appBar) {
        appBar.getActionItems().add(MaterialDesignIcon.ARROW_BACK.button(event -> MobileApplication.getInstance().switchView(MobileApplication.HOME_VIEW)));
    }
}

在Windows桌面上运行时,PointLight以Y轴为中心,动画使其在球体的左右移动。球体本身也以Y轴为中心,因此光线穿过赤道。但是当在Android上运行时,球体居中,但光线仅照亮球体的顶部。 PointLight的坐标看起来是正确的。这未在ARM(Pi),iOS模拟器或iOS设备或任何其他桌面操作系统上进行测试。

Desktop version Android version

这是另一个更复杂的例子,一个行星被3点灯照亮。 Light1位于球体的中心左侧和前方,光线2位于球体的右侧和后方,并且通过用鼠标移动白点或通过轻击移动,光线3自由地定位在球体的前方。所有点光源坐标都显示正确,但在Android上运行时,灯光肯定不正确。在Windows上运行时,一切看起来都很好。

Desktop version Android version

其他信息:

Windows 10版本10.0.16299.371

JDK 9.0.1

Android三星Galaxy 8 Plus Android 8.0.0安全补丁2018年4月

Intellij IDEA 2018.1.1

Gluon (来自build.graddle)

JavaFXPorts 2.0.19

源兼容性1.8

目标兼容性1.8

Gluon Charm 5.0.0-jdk9

Gluon Charm Down config 3.8.0

注意:我建议在直接联系Gluon的支持后将此问题发布到StackOverflow。

编辑 - 拼写

0 个答案:

没有答案