mirror of
https://github.com/openglobus/openglobus.git
synced 2025-12-08 19:25:27 +00:00
183 lines
5.7 KiB
JavaScript
Executable File
183 lines
5.7 KiB
JavaScript
Executable File
import {
|
|
Globe,
|
|
control,
|
|
GlobusRgbTerrain,
|
|
Vector,
|
|
OpenStreetMap,
|
|
Entity,
|
|
Bing,
|
|
Object3d,
|
|
input,
|
|
Vec3
|
|
} from "../../lib/@openglobus/og.esm.js";
|
|
|
|
window.Vec3 = Vec3;
|
|
|
|
let cranesLayer = new Vector("crane", {
|
|
scaleByDistance: [1, 1, 1]
|
|
});
|
|
|
|
async function main() {
|
|
|
|
let sat = new Bing();
|
|
let osm = new OpenStreetMap();
|
|
|
|
const base = Object3d.createCube(0.4, 2, 0.4).translate(new Vec3(0, 1, 0));
|
|
const view = Object3d.createFrustum(3, 2, 1);
|
|
//const view2 = Object3d.createFrustum(3, 2, 1);
|
|
|
|
// let parentEntity = new Entity({
|
|
// cartesian: new Vec3(1, 1, 1),
|
|
// independentPicking: true,
|
|
// geoObject: {
|
|
// scale: 1,
|
|
// instanced: true,
|
|
// tag: `base`,
|
|
// object3d: base
|
|
// }
|
|
// });
|
|
//
|
|
// let childEntity = new Entity({
|
|
// cartesian: new Vec3(0, 1, 0),
|
|
// independentPicking: true,
|
|
// relativePosition: true,
|
|
// geoObject: {
|
|
// instanced: true,
|
|
// tag: `view`,
|
|
// object3d: view,
|
|
// }
|
|
// });
|
|
//
|
|
// let childChildEntity = new Entity({
|
|
// cartesian: new Vec3(0, 3, -1),
|
|
// independentPicking: true,
|
|
// relativePosition: true,
|
|
// geoObject: {
|
|
// instanced: true,
|
|
// tag: `view`,
|
|
// object3d: view
|
|
// }
|
|
// });
|
|
//
|
|
// childEntity.appendChild(childChildEntity);
|
|
// parentEntity.appendChild(childEntity);
|
|
|
|
|
|
const globus = new Globe({
|
|
//frustums: [[0.01, 0.1 + 0.0075], [0.1, 1 + 0.075], [1, 100 + 0.075], [100, 1000 + 0.075], [1000, 1e6 + 10000], [1e6, 1e9]],
|
|
target: "earth",
|
|
name: "Earth",
|
|
terrain: new GlobusRgbTerrain(),
|
|
layers: [sat, osm, cranesLayer],
|
|
//atmosphereEnabled: true,
|
|
fontsSrc: "../../res/fonts",
|
|
sun: {
|
|
stopped: false
|
|
},
|
|
//viewExtent: [33.1758537, 69.0755299, 33.2251571, 69.08960050]
|
|
});
|
|
//
|
|
globus.planet.addControl(new control.DebugInfo());
|
|
globus.planet.addControl(new control.KeyboardNavigation());
|
|
globus.planet.addControl(new control.LayerSwitcher());
|
|
globus.planet.addControl(new control.TimelineControl());
|
|
globus.planet.addControl(new control.GeoObjectEditor());
|
|
globus.planet.addControl(new control.ToggleWireframe());
|
|
|
|
globus.planet.addControl(new control.Lighting());
|
|
|
|
let cubeLayer = new Vector("Cubes", {
|
|
scaleByDistance: [20, 590000, 1]
|
|
//scaleByDistance: [1, 1, 1]
|
|
});
|
|
|
|
cubeLayer.addTo(globus.planet);
|
|
|
|
globus.renderer.events.on("mousemove", (e) => {
|
|
if (globus.renderer.events.isKeyPressed(input.KEY_SHIFT)) {
|
|
let cart = globus.planet.getCartesianFromMouseTerrain();
|
|
let lonLat1 = globus.planet.ellipsoid.cartesianToLonLat(cart);
|
|
|
|
let entities = cubeLayer.getEntities();
|
|
for (let i = 0; i < entities.length; i++) {
|
|
let childEntity = entities[i].childEntities[0];
|
|
let childEntity2 = childEntity.childEntities[0];
|
|
|
|
childEntity.setLook3v(cart);
|
|
// let lonLat0 = childEntity.getLonLat();
|
|
//
|
|
// let inv = globus.planet.ellipsoid.inverse(lonLat0, lonLat1);
|
|
// childEntity.setAbsoluteYaw(inv.initialAzimuth);
|
|
//
|
|
// let pitch = childEntity.getAbsoluteCartesian().normal().negateTo().angle(cart.sub(childEntity.getAbsoluteCartesian()).normalize()) * 180 / Math.PI;
|
|
// childEntity.setAbsolutePitch(-90 + pitch);
|
|
//
|
|
// pitch = childEntity2.getAbsoluteCartesian().normal().negateTo().angle(cart.sub(childEntity2.getAbsoluteCartesian()).normalize()) * 180 / Math.PI;
|
|
// childEntity2.setAbsolutePitch(-90 + pitch);
|
|
}
|
|
|
|
}
|
|
});
|
|
|
|
globus.renderer.events.on("lclick", (e) => {
|
|
//if (e.pickingObject.geoObject) return;
|
|
|
|
let cart = globus.planet.getCartesianFromMouseTerrain();
|
|
|
|
if (cart) {
|
|
globus.renderer.setRelativeCenter(globus.planet.camera.eye);
|
|
|
|
if (globus.renderer.events.isKeyPressed(input.KEY_CTRL)) {
|
|
|
|
let parentEntity = new Entity({
|
|
cartesian: cart,
|
|
independentPicking: true,
|
|
geoObject: {
|
|
scale: 1,
|
|
instanced: true,
|
|
tag: `base`,
|
|
object3d: base,
|
|
}
|
|
});
|
|
|
|
let childEntity = new Entity({
|
|
cartesian: new Vec3(0, 1, 0),
|
|
independentPicking: true,
|
|
relativePosition: true,
|
|
geoObject: {
|
|
instanced: true,
|
|
tag: `view`,
|
|
object3d: view,
|
|
}
|
|
});
|
|
|
|
let childChildEntity = new Entity({
|
|
cartesian: new Vec3(0, 3, -1),
|
|
independentPicking: true,
|
|
relativePosition: true,
|
|
geoObject: {
|
|
instanced: true,
|
|
tag: `view`,
|
|
object3d: view,
|
|
}
|
|
});
|
|
|
|
childEntity.appendChild(childChildEntity);
|
|
parentEntity.appendChild(childEntity);
|
|
|
|
cubeLayer.add(parentEntity);
|
|
|
|
// let counter = 0;
|
|
// globus.planet.renderer.events.on("draw", () => {
|
|
// childEntity.setYaw(-counter);
|
|
// childChildEntity.setYaw(counter);
|
|
// counter += 0.4;
|
|
// })
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|
|
main();
|
|
|