From 990aceed556799b7f1951c170c20f18acb021b51 Mon Sep 17 00:00:00 2001 From: mige Date: Fri, 8 Aug 2025 15:39:54 +0400 Subject: [PATCH] wip.8 --- sandbox/nestedEntities/nestedEntities.js | 22 +++++++++++++++++----- src/renderer/Renderer.ts | 10 +++++++--- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/sandbox/nestedEntities/nestedEntities.js b/sandbox/nestedEntities/nestedEntities.js index 101b21bf..df68d07e 100644 --- a/sandbox/nestedEntities/nestedEntities.js +++ b/sandbox/nestedEntities/nestedEntities.js @@ -30,10 +30,22 @@ class MyScene extends RenderNode { 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, + //yaw: 45 * Math.PI / 180, pitch: 45 * Math.PI / 180, geoObject: { color: "rgb(90,90,90)", @@ -47,7 +59,7 @@ class MyScene extends RenderNode { let cube2 = new Entity({ cartesian: new Vec3(5, 0, 5), independentPicking: true, - yaw: 45 * Math.PI / 180, + //yaw: 45 * Math.PI / 180, pitch: 45 * Math.PI / 180, geoObject: { color: "rgb(90,90,90)", @@ -59,9 +71,9 @@ class MyScene extends RenderNode { }); let cube3 = new Entity({ - cartesian: new Vec3(-1, 5, 1), + cartesian: new Vec3(-1, 3, 1), independentPicking: true, - yaw: 45 * Math.PI / 180, + //yaw: 45 * Math.PI / 180, pitch: 45 * Math.PI / 180, geoObject: { color: "rgb(90,90,90)", @@ -78,7 +90,7 @@ class MyScene extends RenderNode { collection.addTo(this); - this.renderer.activeCamera.set(new Vec3(-10, 10, 10), new Vec3(0, 0, 0)); + this.renderer.activeCamera.set(new Vec3(0, 10, 10), new Vec3(0, 0, 0)); this.renderer.activeCamera.isOrthographic = true; this.renderer.activeCamera.update(); diff --git a/src/renderer/Renderer.ts b/src/renderer/Renderer.ts index ccfc186a..e1ce100b 100644 --- a/src/renderer/Renderer.ts +++ b/src/renderer/Renderer.ts @@ -1345,10 +1345,14 @@ class Renderer { let screenPos = new Vec4(nx * 2.0 - 1.0, ny * 2.0 - 1.0, depth * 2.0 - 1.0, 1.0); let viewPosition = frustum.inverseProjectionMatrix.mulVec4(screenPos); - let dir = (px as IBaseInputState).direction || camera.unproject(px.x, px.y); - dist = -(viewPosition.z / viewPosition.w) / dir.dot(camera.getForward()); + let zView = -viewPosition.z / viewPosition.w; - return dist; + if (camera.isOrthographic) { + return zView; + } + + let dir = (px as IBaseInputState).direction || camera.unproject(px.x, px.y); + return zView / dir.dot(camera.getForward()); } /**