Physics Simulation & Visualization Tool 0.1
A C++ physics simulation engine with real-time 3D visualization
Loading...
Searching...
No Matches
TranslateHandle.cpp
Go to the documentation of this file.
1#include "TranslateHandle.h"
2
3#include <iostream>
4#include <glm/ext/matrix_transform.hpp>
5#include <glm/gtc/type_ptr.hpp>
7
8TranslateHandle::TranslateHandle(SceneObject *tgt, Axis ax) : target(tgt), axis(ax) {}
9
11 glm::mat4 model(1.0f);
12 model = glm::translate(model, target->getPosition());
13 model = model * rotateFromYToAxis(axis);
14 model = glm::scale(model, glm::vec3(thickness, length, thickness));
15 return model;
16}
17
19 glm::vec3 axisDirection = axisDir(axis);
20 // To solve for t, minimize the quantity || (rayOrig + rayDir * t) - initialHitPoint ||
21 float t = glm::dot(-(ray.origin - initialHitPoint), ray.dir);
22
23 glm::vec3 delta = (ray.origin + ray.dir * t) - initialHitPoint;
24 // apply translation only along the axis direction component:
25 float moveAmount = glm::dot(delta, axisDirection);
26 target->setPosition(originalPosition + axisDirection * moveAmount);
27}
28
29void TranslateHandle::setDragState(glm::vec3 initHitPos) {
30 initialHitPoint = initHitPos;
31 originalPosition = target->getPosition();
32}
Axis
Cardinal axes for handle orientation.
Definition Axis.h:7
constexpr glm::vec3 axisDir(Axis a)
Converts an axis enum to its corresponding unit vector.
Definition IHandle.h:17
static glm::mat4 rotateFromYToAxis(Axis axis)
Computes rotation matrix to align mesh from +Y to target axis.
Definition IHandle.h:127
glm::vec3 getPosition() const
void setPosition(const glm::vec3 &pos)
TranslateHandle(SceneObject *tgt, Axis ax)
void setDragState(glm::vec3 initHitPos) override
Initializes the drag operation state.
void onDrag(const Math::Ray &ray) override
Handles continuous dragging motion.
glm::mat4 getModelMatrix() const override
Gets the model transformation matrix for rendering this handle.
glm::vec3 origin
Starting point of the ray in world space.
Definition Ray.h:12
glm::vec3 dir
Direction vector (should be normalized)
Definition Ray.h:13
Represents a ray in 3D space.
Definition Ray.h:11