openglobus/sandbox/nestedEntities/nestedEntities.js
2025-08-08 15:39:54 +04:00

108 lines
2.8 KiB
JavaScript

import {
control,
Entity,
Object3d,
Renderer,
Vec3,
Mat4,
RenderNode,
EntityCollection,
scene,
} from "../../lib/og.es.js";
let renderer = new Renderer("frame", {
msaa: 8,
controls: [new control.SimpleNavigation({ speed: 0.01 }), new control.GeoObjectEditor()],
autoActivate: true
});
window.renderer = renderer;
class MyScene extends RenderNode {
constructor() {
super("MyScene");
}
init() {
const baseObj = Object3d.createCube(1, 1, 1).translate(new Vec3(0, 0, 0)).setMaterial({
ambient: "#c2c2c2",
diffuse: "#ffffff",
shininess: 1
});
window.test = () => {
parentEntity.setPitch(0);
cube2.setPitch(0);
cube3.setPitch(0);
parentEntity.setYaw(0);
cube2.setYaw(0);
cube3.setYaw(0);
this.renderer.activeCamera.set(new Vec3(10.5, 0, 0), new Vec3(0, 0, 0), new Vec3(0, 1, 0));
}
let parentEntity = new Entity({
cartesian: new Vec3(0, 0, 0),
independentPicking: true,
//yaw: 45 * Math.PI / 180,
pitch: 45 * Math.PI / 180,
geoObject: {
color: "rgb(90,90,90)",
scale: 1,
instanced: true,
tag: `baseObj`,
object3d: baseObj
}
});
let cube2 = new Entity({
cartesian: new Vec3(5, 0, 5),
independentPicking: true,
//yaw: 45 * Math.PI / 180,
pitch: 45 * Math.PI / 180,
geoObject: {
color: "rgb(90,90,90)",
scale: 1,
instanced: true,
tag: `baseObj`,
object3d: baseObj
}
});
let cube3 = new Entity({
cartesian: new Vec3(-1, 3, 1),
independentPicking: true,
//yaw: 45 * Math.PI / 180,
pitch: 45 * Math.PI / 180,
geoObject: {
color: "rgb(90,90,90)",
scale: 1,
instanced: true,
tag: `baseObj`,
object3d: baseObj
}
});
let collection = new EntityCollection({
entities: [parentEntity, cube2, cube3]
});
collection.addTo(this);
this.renderer.activeCamera.set(new Vec3(0, 10, 10), new Vec3(0, 0, 0));
this.renderer.activeCamera.isOrthographic = true;
this.renderer.activeCamera.update();
this.renderer.events.on("rclick", (e) => {
//let dist = this.renderer.getDistanceFromPixel(e.pos);
//let dir = this.renderer.activeCamera.unproject(e.x, e.y, dist);
//console.log(dir);
})
}
}
renderer.addNodes([new scene.Axes(), new MyScene()]);