Using the inline feature, the code displays a rotating globe with a diffuse map. It totally relies on the inline code without the
need for external libraries or references.
Code needs to be completed in some places by an attentive b4j programmer. I just left them blank for interaction
see demo:
need for external libraries or references.
Code needs to be completed in some places by an attentive b4j programmer. I just left them blank for interaction
see demo:
B4X:
Sub AppStart (Form1 As Form, Args() As String)
MainForm = Form1
MainForm.RootPane.LoadLayout("Layout1")
Dim jform As JavaObject = MainForm
Dim jStage As JavaObject
'
'..........................................
Dim earthView As JavaObject=(Me).As(JavaObject).InitializeStatic("com.prosoft.jEarthView.main$EarthViewer")
'..........................................
MainForm.Show
End Sub
#if Java
import javafx.animation.*;
import javafx.scene.*;
import javafx.scene.image.Image;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.*;
import javafx.scene.shape.Sphere;
import javafx.scene.transform.Rotate;
//............................
import javafx.util.Duration;
public static class EarthViewer {
private static final double EARTH_RADIUS = 320;
private static final double VIEWPORT_SIZE = 600;
private static final double ROTATE_SECS = 80;
private static final double MAP_WIDTH = 8192 / 2d;
private static final double MAP_HEIGHT = 4092 / 2d;
private static final String DIFFUSE_MAP ="https://planetpixelemporium.com/download/download.php?8081/earthmap10k.jpg";
private static final String NORMAL_MAP = "";
private static final String SPECULAR_MAP = "";
private static Group buildScene() {
Sphere earth = new Sphere(EARTH_RADIUS);
earth.setTranslateX(VIEWPORT_SIZE / 2d);
earth.setTranslateY(VIEWPORT_SIZE / 2d);
PhongMaterial earthMaterial = new PhongMaterial();
earthMaterial.setDiffuseMap(
new Image(
DIFFUSE_MAP,
MAP_WIDTH,
MAP_HEIGHT,
true,
true
)
);
earthMaterial.setBumpMap(
new Image(
NORMAL_MAP,
MAP_WIDTH,
MAP_HEIGHT,
true,
true
)
);
earthMaterial.setSpecularMap(
new Image(
SPECULAR_MAP,
MAP_WIDTH,
MAP_HEIGHT,
true,
true
)
);
earth.setMaterial(
earthMaterial
);
return new Group(earth);
}
public void earthview(Stage stage) {
Group group = buildScene();
Scene scene = new Scene(
new StackPane(group),
VIEWPORT_SIZE, VIEWPORT_SIZE,
true,
SceneAntialiasing.BALANCED
);
scene.setFill(Color.rgb(10, 10, 40));
scene.setCamera(new PerspectiveCamera());
stage.setScene(scene);
//...................................
//....................................
rotateAroundYAxis(group).play();
}
private static RotateTransition rotateAroundYAxis(Node node) {
RotateTransition rotate = new RotateTransition(
Duration.seconds(ROTATE_SECS),
node
);
rotate.setAxis(Rotate.Y_AXIS);
rotate.setFromAngle(360);
rotate.setToAngle(0);
rotate.setInterpolator(Interpolator.LINEAR);
rotate.setCycleCount(RotateTransition.INDEFINITE);
return rotate;
}
}
#End If