在我看来,在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。
编辑 - 拼写