From f8e6a2d868a5522bb7af8cf9737dcc56a117a55c Mon Sep 17 00:00:00 2001 From: Emanuel Rabina Date: Sun, 9 Jun 2024 22:01:06 +1200 Subject: [PATCH] Fix jittery repositioning --- .../redhorizon/engine/scenegraph/Node.groovy | 15 +++++++++------ .../engine/scenegraph/nodes/Camera.groovy | 2 +- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/redhorizon-engine/source/nz/net/ultraq/redhorizon/engine/scenegraph/Node.groovy b/redhorizon-engine/source/nz/net/ultraq/redhorizon/engine/scenegraph/Node.groovy index a9e49e02..d729a4e7 100644 --- a/redhorizon-engine/source/nz/net/ultraq/redhorizon/engine/scenegraph/Node.groovy +++ b/redhorizon-engine/source/nz/net/ultraq/redhorizon/engine/scenegraph/Node.groovy @@ -22,6 +22,8 @@ import org.joml.FrustumIntersection import org.joml.Matrix4f import org.joml.Vector3f import org.joml.primitives.Rectanglef +import org.slf4j.Logger +import org.slf4j.LoggerFactory import java.util.concurrent.CopyOnWriteArrayList @@ -32,6 +34,8 @@ import java.util.concurrent.CopyOnWriteArrayList */ class Node implements SceneEvents, Scriptable, Visitable { + private static final Logger logger = LoggerFactory.getLogger(Node) + final Matrix4f transform = new Matrix4f() final Rectanglef bounds = new Rectanglef() @@ -39,7 +43,6 @@ class Node implements SceneEvents, Scriptable, Visitable { Node parent CopyOnWriteArrayList children = new CopyOnWriteArrayList<>() - private final Vector3f position = new Vector3f() private final Vector3f scale = new Vector3f(1, 1, 1) private final Matrix4f globalTransform = new Matrix4f() private final Vector3f globalPosition = new Vector3f() @@ -168,12 +171,12 @@ class Node implements SceneEvents, Scriptable, Visitable { */ void position(Vector3f newPosition) { - var currentPosition = getPosition(position) var currentScale = getScale(scale) - transform.translate( - (currentPosition.x - newPosition.x) * currentScale.x as float, - (currentPosition.y - newPosition.y) * currentScale.y as float, - (currentPosition.z - newPosition.z) * currentScale.z as float) + transform.setTranslation( + -newPosition.x * currentScale.x as float, + -newPosition.y * currentScale.y as float, + -newPosition.z * currentScale.z as float + ) } /** diff --git a/redhorizon-engine/source/nz/net/ultraq/redhorizon/engine/scenegraph/nodes/Camera.groovy b/redhorizon-engine/source/nz/net/ultraq/redhorizon/engine/scenegraph/nodes/Camera.groovy index 6e445b75..0ab61c89 100644 --- a/redhorizon-engine/source/nz/net/ultraq/redhorizon/engine/scenegraph/nodes/Camera.groovy +++ b/redhorizon-engine/source/nz/net/ultraq/redhorizon/engine/scenegraph/nodes/Camera.groovy @@ -76,7 +76,7 @@ class Camera extends Node { */ Matrix4f getViewProjection(Matrix4f dest) { - return projection.mulOrthoAffine(transform, dest) + return projection.mulOrthoAffine(getView(), dest) } @Override