Loading cesiumjs4gwt-showcase/src/main/java/org/cleanlogic/cesiumjs4gwt/showcase/config/InjectorModule.java +1 −0 Original line number Diff line number Diff line Loading @@ -122,5 +122,6 @@ public class InjectorModule extends AbstractGinModule { bind(CustomShadersModels.class).asEagerSingleton(); bind(Tiles3DNextCDBYemen.class).asEagerSingleton(); bind(Tiles3DNextS2Globe.class).asEagerSingleton(); bind(ModelExperimental3DModels.class).asEagerSingleton(); } } cesiumjs4gwt-showcase/src/main/java/org/cleanlogic/cesiumjs4gwt/showcase/examples/ModelExperimental3DModels.java 0 → 100644 +109 −0 Original line number Diff line number Diff line /* * Copyright 2021 iserge, Gis4Fun. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.cleanlogic.cesiumjs4gwt.showcase.examples; import com.google.gwt.core.client.GWT; import com.google.gwt.user.client.ui.AbsolutePanel; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.ListBox; import org.cesiumjs.cs.core.*; import org.cesiumjs.cs.core.HeadingPitchRoll; import org.cesiumjs.cs.scene.experimental.ModelExperimental; import org.cesiumjs.cs.scene.experimental.options.ModelExperimentalFromGltfOptions; import org.cesiumjs.cs.widgets.Viewer; import org.cesiumjs.cs.widgets.ViewerPanel; import org.cleanlogic.cesiumjs4gwt.showcase.basic.AbstractExample; import org.cleanlogic.cesiumjs4gwt.showcase.components.store.ShowcaseExampleStore; import javax.inject.Inject; import java.lang.Math; public class ModelExperimental3DModels extends AbstractExample { private Viewer viewer; private final HeadingPitchRoll hpr = new HeadingPitchRoll(Math.toRadians(180), 0, 0); private final Transforms.LocalFrameToFixedFrame fixedFrameTransform = Transforms.localFrameToFixedFrameGenerator("north", "west"); @Inject public ModelExperimental3DModels(ShowcaseExampleStore store) { super("Model Experimental 3D Models", "Load glTF models using Model Experimental", new String[]{"Showcase", "Cesium", "3d", "Viewer", "experimental"}, store, "1.87.1"); } @Override public void buildPanel() { ViewerPanel csVPanel = new ViewerPanel(); viewer = csVPanel.getViewer(); csVPanel.getViewer().clock().currentTime = JulianDate.fromIso8601("2021-11-09T20:27:37.016064475348684937Z"); ListBox listBox = new ListBox(); listBox.addItem("Cesium Balloon"); listBox.addItem("Skinned Character"); listBox.addItem("Draco Compressed Model"); listBox.addItem("Unlit Box"); listBox.addItem("Drone"); listBox.addItem("Ground Vehicle"); listBox.addItem("Instanced Box"); listBox.addChangeHandler(event -> { String value = ((ListBox) event.getSource()).getSelectedItemText(); String prefix = GWT.getModuleBaseURL(); switch (value) { case "Cesium Balloon": selectModel(prefix + "SampleData/models/CesiumBalloon/CesiumBalloon.glb", 15); break; case "Skinned Character": selectModel(prefix + "SampleData/models/CesiumMan/Cesium_Man.glb", 0); break; case "Draco Compressed Model": selectModel(prefix + "SampleData/models/DracoCompressed/CesiumMilkTruck.gltf", 0); break; case "Unlit Box": selectModel(prefix + "Specs/Data/Models/PBR/BoxUnlit/BoxUnlit.gltf", 0); break; case "Drone": selectModel(prefix + "SampleData/models/CesiumDrone/CesiumDrone.glb", 15); break; case "Ground Vehicle": selectModel(prefix + "SampleData/models/GroundVehicle/GroundVehicle.glb", 0); break; case "Instanced Box": selectModel(prefix + "Specs/Data/Models/GltfLoader/BoxInstanced/glTF/box-instanced.gltf", 15); break; default: break; } }); AbsolutePanel aPanel = new AbsolutePanel(); aPanel.add(csVPanel); aPanel.add(listBox, 20, 20); contentPanel.add(new HTML( "<p>Load glTF models using Model Experimental.</p>")); contentPanel.add(aPanel); initWidget(contentPanel); selectModel(GWT.getModuleBaseURL() + "SampleData/models/CesiumBalloon/CesiumBalloon.glb", 15); } @Override public String[] getSourceCodeURLs() { String[] sourceCodeURLs = new String[1]; sourceCodeURLs[0] = GWT.getModuleBaseURL() + "examples/" + "ModelExperimental3DModels.txt"; return sourceCodeURLs; } private void selectModel(String url, double height) { Cartesian3 position = Cartesian3.fromDegrees(-123.0744619, 44.0503706, height); viewer.scene().primitives().removeAll(); ModelExperimentalFromGltfOptions options = ModelExperimentalFromGltfOptions.create(url); options.modelMatrix = Transforms.headingPitchRollToFixedFrame(position, hpr, Ellipsoid.WGS84(), fixedFrameTransform); ModelExperimental model = (ModelExperimental) viewer.scene().primitives().add(ModelExperimental.fromGltf(options)); model.readyPromise().then(nModel -> viewer.camera.lookAt(position, new HeadingPitchRange(Math.toRadians(45), Math.toRadians(-15), model.boundingSphere().radius * 5))); } } cesiumjs4gwt-showcase/src/main/resources/org/cleanlogic/cesiumjs4gwt/public/Specs/Data/Models/GltfLoader/BoxInstanced/glTF/box-instanced.gltf 0 → 100644 +289 −0 Original line number Diff line number Diff line { "asset": { "version": "2.0" }, "extensionsUsed": [ "EXT_mesh_features", "EXT_mesh_gpu_instancing" ], "extensionsRequired": [ "EXT_mesh_gpu_instancing" ], "extensions": { "EXT_mesh_features": { "schema": { "classes": { "box": { "properties": { "name": { "componentType": "STRING" }, "volume": { "componentType": "FLOAT32" } } }, "section": { "properties": { "name": { "componentType": "STRING" }, "id": { "componentType": "UINT16" } } } } }, "propertyTables": [ { "name": "Box", "class": "box", "count": 4, "properties": { "name": { "stringOffsetType": "UINT16", "bufferView": 7, "stringOffsetBufferView": 8 }, "volume": { "bufferView": 9 } } }, { "name": "Section", "class": "section", "count": 2, "properties": { "name": { "stringOffsetType": "UINT16", "bufferView": 10, "stringOffsetBufferView": 11 }, "id": { "bufferView": 12 } } } ] } }, "scene": 0, "scenes": [ { "nodes": [ 0 ] } ], "nodes": [ { "mesh": 0, "extensions": { "EXT_mesh_gpu_instancing": { "attributes": { "TRANSLATION": 3, "ROTATION": 4, "SCALE": 5, "FEATURE_ID_0": 6 } }, "EXT_mesh_features": { "propertyTables": [ 0, 1 ], "featureIds": [ { "offset": 0, "repeat": 1 }, { "attribute": 0 } ] } } } ], "meshes": [ { "primitives": [ { "attributes": { "POSITION": 0, "NORMAL": 1 }, "indices": 2, "mode": 4 } ] } ], "accessors": [ { "name": "Positions", "bufferView": 0, "byteOffset": 0, "componentType": 5126, "count": 24, "max": [ 0.5, 0.5, 0.5 ], "min": [ -0.5, -0.5, -0.5 ], "type": "VEC3" }, { "name": "Normals", "bufferView": 1, "byteOffset": 0, "componentType": 5126, "count": 24, "type": "VEC3" }, { "name": "Indices", "bufferView": 2, "byteOffset": 0, "componentType": 5123, "count": 36, "type": "SCALAR" }, { "name": "Instance Translations", "bufferView": 3, "byteOffset": 0, "componentType": 5126, "count": 4, "type": "VEC3" }, { "name": "Instance Rotations", "bufferView": 4, "byteOffset": 0, "componentType": 5126, "count": 4, "type": "VEC4" }, { "name": "Instance Scales", "bufferView": 5, "byteOffset": 0, "componentType": 5126, "count": 4, "type": "VEC3" }, { "name": "Instance Feature IDs", "bufferView": 6, "byteOffset": 0, "componentType": 5126, "count": 4, "type": "SCALAR" } ], "bufferViews": [ { "name": "Positions", "buffer": 0, "byteLength": 288, "byteOffset": 0 }, { "name": "Normals", "buffer": 0, "byteLength": 288, "byteOffset": 288 }, { "name": "Indices", "buffer": 0, "byteLength": 72, "byteOffset": 576 }, { "name": "Instance Translations", "buffer": 1, "byteLength": 48, "byteOffset": 0 }, { "name": "Instance Rotations", "buffer": 1, "byteLength": 64, "byteOffset": 48 }, { "name": "Instance Scales", "buffer": 1, "byteLength": 48, "byteOffset": 112 }, { "name": "Instance Feature IDs", "buffer": 1, "byteLength": 16, "byteOffset": 160 }, { "name": "Box Names", "buffer": 2, "byteLength": 40, "byteOffset": 0 }, { "name": "Box Name Offsets", "buffer": 2, "byteLength": 10, "byteOffset": 40 }, { "name": "Box Volumes", "buffer": 2, "byteLength": 16, "byteOffset": 56 }, { "name": "Section Name", "buffer": 2, "byteLength": 9, "byteOffset": 72 }, { "name": "Section Name Offsets", "buffer": 2, "byteLength": 6, "byteOffset": 88 }, { "name": "Section IDs", "buffer": 2, "byteLength": 4, "byteOffset": 96 } ], "buffers": [ { "name": "Geometry Buffer", "byteLength": 648, "uri": "geometry.bin" }, { "name": "Instances Buffer", "byteLength": 176, "uri": "instances.bin" }, { "name": "Metadata Buffer", "byteLength": 104, "uri": "metadata.bin" } ] } cesiumjs4gwt-showcase/src/main/resources/org/cleanlogic/cesiumjs4gwt/public/Specs/Data/Models/GltfLoader/BoxInstanced/glTF/geometry.bin 0 → 100644 +648 B File added.No diff preview for this file type. View file cesiumjs4gwt-showcase/src/main/resources/org/cleanlogic/cesiumjs4gwt/public/Specs/Data/Models/GltfLoader/BoxInstanced/glTF/instances.bin 0 → 100644 +176 B File added.No diff preview for this file type. View file Loading
cesiumjs4gwt-showcase/src/main/java/org/cleanlogic/cesiumjs4gwt/showcase/config/InjectorModule.java +1 −0 Original line number Diff line number Diff line Loading @@ -122,5 +122,6 @@ public class InjectorModule extends AbstractGinModule { bind(CustomShadersModels.class).asEagerSingleton(); bind(Tiles3DNextCDBYemen.class).asEagerSingleton(); bind(Tiles3DNextS2Globe.class).asEagerSingleton(); bind(ModelExperimental3DModels.class).asEagerSingleton(); } }
cesiumjs4gwt-showcase/src/main/java/org/cleanlogic/cesiumjs4gwt/showcase/examples/ModelExperimental3DModels.java 0 → 100644 +109 −0 Original line number Diff line number Diff line /* * Copyright 2021 iserge, Gis4Fun. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.cleanlogic.cesiumjs4gwt.showcase.examples; import com.google.gwt.core.client.GWT; import com.google.gwt.user.client.ui.AbsolutePanel; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.ListBox; import org.cesiumjs.cs.core.*; import org.cesiumjs.cs.core.HeadingPitchRoll; import org.cesiumjs.cs.scene.experimental.ModelExperimental; import org.cesiumjs.cs.scene.experimental.options.ModelExperimentalFromGltfOptions; import org.cesiumjs.cs.widgets.Viewer; import org.cesiumjs.cs.widgets.ViewerPanel; import org.cleanlogic.cesiumjs4gwt.showcase.basic.AbstractExample; import org.cleanlogic.cesiumjs4gwt.showcase.components.store.ShowcaseExampleStore; import javax.inject.Inject; import java.lang.Math; public class ModelExperimental3DModels extends AbstractExample { private Viewer viewer; private final HeadingPitchRoll hpr = new HeadingPitchRoll(Math.toRadians(180), 0, 0); private final Transforms.LocalFrameToFixedFrame fixedFrameTransform = Transforms.localFrameToFixedFrameGenerator("north", "west"); @Inject public ModelExperimental3DModels(ShowcaseExampleStore store) { super("Model Experimental 3D Models", "Load glTF models using Model Experimental", new String[]{"Showcase", "Cesium", "3d", "Viewer", "experimental"}, store, "1.87.1"); } @Override public void buildPanel() { ViewerPanel csVPanel = new ViewerPanel(); viewer = csVPanel.getViewer(); csVPanel.getViewer().clock().currentTime = JulianDate.fromIso8601("2021-11-09T20:27:37.016064475348684937Z"); ListBox listBox = new ListBox(); listBox.addItem("Cesium Balloon"); listBox.addItem("Skinned Character"); listBox.addItem("Draco Compressed Model"); listBox.addItem("Unlit Box"); listBox.addItem("Drone"); listBox.addItem("Ground Vehicle"); listBox.addItem("Instanced Box"); listBox.addChangeHandler(event -> { String value = ((ListBox) event.getSource()).getSelectedItemText(); String prefix = GWT.getModuleBaseURL(); switch (value) { case "Cesium Balloon": selectModel(prefix + "SampleData/models/CesiumBalloon/CesiumBalloon.glb", 15); break; case "Skinned Character": selectModel(prefix + "SampleData/models/CesiumMan/Cesium_Man.glb", 0); break; case "Draco Compressed Model": selectModel(prefix + "SampleData/models/DracoCompressed/CesiumMilkTruck.gltf", 0); break; case "Unlit Box": selectModel(prefix + "Specs/Data/Models/PBR/BoxUnlit/BoxUnlit.gltf", 0); break; case "Drone": selectModel(prefix + "SampleData/models/CesiumDrone/CesiumDrone.glb", 15); break; case "Ground Vehicle": selectModel(prefix + "SampleData/models/GroundVehicle/GroundVehicle.glb", 0); break; case "Instanced Box": selectModel(prefix + "Specs/Data/Models/GltfLoader/BoxInstanced/glTF/box-instanced.gltf", 15); break; default: break; } }); AbsolutePanel aPanel = new AbsolutePanel(); aPanel.add(csVPanel); aPanel.add(listBox, 20, 20); contentPanel.add(new HTML( "<p>Load glTF models using Model Experimental.</p>")); contentPanel.add(aPanel); initWidget(contentPanel); selectModel(GWT.getModuleBaseURL() + "SampleData/models/CesiumBalloon/CesiumBalloon.glb", 15); } @Override public String[] getSourceCodeURLs() { String[] sourceCodeURLs = new String[1]; sourceCodeURLs[0] = GWT.getModuleBaseURL() + "examples/" + "ModelExperimental3DModels.txt"; return sourceCodeURLs; } private void selectModel(String url, double height) { Cartesian3 position = Cartesian3.fromDegrees(-123.0744619, 44.0503706, height); viewer.scene().primitives().removeAll(); ModelExperimentalFromGltfOptions options = ModelExperimentalFromGltfOptions.create(url); options.modelMatrix = Transforms.headingPitchRollToFixedFrame(position, hpr, Ellipsoid.WGS84(), fixedFrameTransform); ModelExperimental model = (ModelExperimental) viewer.scene().primitives().add(ModelExperimental.fromGltf(options)); model.readyPromise().then(nModel -> viewer.camera.lookAt(position, new HeadingPitchRange(Math.toRadians(45), Math.toRadians(-15), model.boundingSphere().radius * 5))); } }
cesiumjs4gwt-showcase/src/main/resources/org/cleanlogic/cesiumjs4gwt/public/Specs/Data/Models/GltfLoader/BoxInstanced/glTF/box-instanced.gltf 0 → 100644 +289 −0 Original line number Diff line number Diff line { "asset": { "version": "2.0" }, "extensionsUsed": [ "EXT_mesh_features", "EXT_mesh_gpu_instancing" ], "extensionsRequired": [ "EXT_mesh_gpu_instancing" ], "extensions": { "EXT_mesh_features": { "schema": { "classes": { "box": { "properties": { "name": { "componentType": "STRING" }, "volume": { "componentType": "FLOAT32" } } }, "section": { "properties": { "name": { "componentType": "STRING" }, "id": { "componentType": "UINT16" } } } } }, "propertyTables": [ { "name": "Box", "class": "box", "count": 4, "properties": { "name": { "stringOffsetType": "UINT16", "bufferView": 7, "stringOffsetBufferView": 8 }, "volume": { "bufferView": 9 } } }, { "name": "Section", "class": "section", "count": 2, "properties": { "name": { "stringOffsetType": "UINT16", "bufferView": 10, "stringOffsetBufferView": 11 }, "id": { "bufferView": 12 } } } ] } }, "scene": 0, "scenes": [ { "nodes": [ 0 ] } ], "nodes": [ { "mesh": 0, "extensions": { "EXT_mesh_gpu_instancing": { "attributes": { "TRANSLATION": 3, "ROTATION": 4, "SCALE": 5, "FEATURE_ID_0": 6 } }, "EXT_mesh_features": { "propertyTables": [ 0, 1 ], "featureIds": [ { "offset": 0, "repeat": 1 }, { "attribute": 0 } ] } } } ], "meshes": [ { "primitives": [ { "attributes": { "POSITION": 0, "NORMAL": 1 }, "indices": 2, "mode": 4 } ] } ], "accessors": [ { "name": "Positions", "bufferView": 0, "byteOffset": 0, "componentType": 5126, "count": 24, "max": [ 0.5, 0.5, 0.5 ], "min": [ -0.5, -0.5, -0.5 ], "type": "VEC3" }, { "name": "Normals", "bufferView": 1, "byteOffset": 0, "componentType": 5126, "count": 24, "type": "VEC3" }, { "name": "Indices", "bufferView": 2, "byteOffset": 0, "componentType": 5123, "count": 36, "type": "SCALAR" }, { "name": "Instance Translations", "bufferView": 3, "byteOffset": 0, "componentType": 5126, "count": 4, "type": "VEC3" }, { "name": "Instance Rotations", "bufferView": 4, "byteOffset": 0, "componentType": 5126, "count": 4, "type": "VEC4" }, { "name": "Instance Scales", "bufferView": 5, "byteOffset": 0, "componentType": 5126, "count": 4, "type": "VEC3" }, { "name": "Instance Feature IDs", "bufferView": 6, "byteOffset": 0, "componentType": 5126, "count": 4, "type": "SCALAR" } ], "bufferViews": [ { "name": "Positions", "buffer": 0, "byteLength": 288, "byteOffset": 0 }, { "name": "Normals", "buffer": 0, "byteLength": 288, "byteOffset": 288 }, { "name": "Indices", "buffer": 0, "byteLength": 72, "byteOffset": 576 }, { "name": "Instance Translations", "buffer": 1, "byteLength": 48, "byteOffset": 0 }, { "name": "Instance Rotations", "buffer": 1, "byteLength": 64, "byteOffset": 48 }, { "name": "Instance Scales", "buffer": 1, "byteLength": 48, "byteOffset": 112 }, { "name": "Instance Feature IDs", "buffer": 1, "byteLength": 16, "byteOffset": 160 }, { "name": "Box Names", "buffer": 2, "byteLength": 40, "byteOffset": 0 }, { "name": "Box Name Offsets", "buffer": 2, "byteLength": 10, "byteOffset": 40 }, { "name": "Box Volumes", "buffer": 2, "byteLength": 16, "byteOffset": 56 }, { "name": "Section Name", "buffer": 2, "byteLength": 9, "byteOffset": 72 }, { "name": "Section Name Offsets", "buffer": 2, "byteLength": 6, "byteOffset": 88 }, { "name": "Section IDs", "buffer": 2, "byteLength": 4, "byteOffset": 96 } ], "buffers": [ { "name": "Geometry Buffer", "byteLength": 648, "uri": "geometry.bin" }, { "name": "Instances Buffer", "byteLength": 176, "uri": "instances.bin" }, { "name": "Metadata Buffer", "byteLength": 104, "uri": "metadata.bin" } ] }
cesiumjs4gwt-showcase/src/main/resources/org/cleanlogic/cesiumjs4gwt/public/Specs/Data/Models/GltfLoader/BoxInstanced/glTF/geometry.bin 0 → 100644 +648 B File added.No diff preview for this file type. View file
cesiumjs4gwt-showcase/src/main/resources/org/cleanlogic/cesiumjs4gwt/public/Specs/Data/Models/GltfLoader/BoxInstanced/glTF/instances.bin 0 → 100644 +176 B File added.No diff preview for this file type. View file