openglobus/sandbox/nestedEntities2/nestedEntities.js
2025-10-15 16:28:12 +04:00

91 lines
1.9 KiB
JavaScript

import {
Globe,
Vector,
GlobusRgbTerrain,
OpenStreetMap,
Bing,
Object3d,
Vec3,
Entity,
control,
LonLat
} from "../../lib/og.es.js";
let objLayer = new Vector("Obj.Layer", {
scaleByDistance: [50, 50000, 1]
});
let globe = new Globe({
target: "earth",
name: "Earth",
terrain: new GlobusRgbTerrain(),
layers: [new OpenStreetMap(), new Bing(), objLayer],
});
globe.planet.addControls([
new control.GeoObjectEditor(),
new control.LayerSwitcher()
]);
const baseObj = Object3d.createCube(0.4, 2, 0.4)
.translate(new Vec3(0, 1, 0))
.setMaterial({
ambient: "#802727",
diffuse: "#ff5252",
});
const viewObj = Object3d.createFrustum(3, 2, 1)
.setMaterial({
ambient: "#28552b",
diffuse: "#1cdd23",
});
const viewObj2 = Object3d.createFrustum(3, 2, 1)
.setMaterial({
ambient: "#5f2563",
diffuse: "#ef00ff",
});
const pos = new LonLat(-105.6173319876, 39.615583413, 4057.9466);
let parentEntity = new Entity({
lonlat: pos,
independentPicking: true,
geoObject: {
instanced: true,
tag: `baseObj`,
object3d: baseObj,
}
});
let childEntity = new Entity({
cartesian: new Vec3(0, 1, 0),
independentPicking: true,
relativePosition: true,
geoObject: {
instanced: true,
tag: `viewObj`,
object3d: viewObj,
}
});
let childChildEntity = new Entity({
cartesian: new Vec3(0, 3, -1),
independentPicking: true,
relativePosition: true,
geoObject: {
instanced: true,
tag: `viewObj2`,
object3d: viewObj2,
}
});
childEntity.appendChild(childChildEntity);
parentEntity.appendChild(childEntity);
objLayer.add(parentEntity);
globe.planet.camera.setLonLat(
new LonLat(-105.61717175714179, 39.61567256262465, 4064.033358156039),
pos, // look point
);