Physics Simulation & Visualization Tool 0.1
A C++ physics simulation engine with real-time 3D visualization
Loading...
Searching...
No Matches
ScaleHandle.cpp
Go to the documentation of this file.
1#include "ScaleHandle.h"
3#include <iostream>
4
5ScaleHandle::ScaleHandle(SceneObject *tgt, Axis ax) : target(tgt), axis(ax) {}
6
7void ScaleHandle::onDrag(const Math::Ray& ray) {
8 glm::vec3 axisDirection = axisDir(axis);
9 glm::vec3 localAxisDirection = target->getRotationQuat() * axisDirection;
10 // To solve for t, minimize the quantity || (rayOrig + rayDir * t) - initialHitPoint ||
11 float t = glm::dot(-(ray.origin - initialHitPoint), ray.dir);
12
13 glm::vec3 delta = (ray.origin + ray.dir * t) - initialHitPoint;
14
15 float scaleAmount = glm::dot(delta, localAxisDirection);
16 target->setScale(originalScale + axisDirection * scaleAmount);
17}
18
19void ScaleHandle::setDragState(glm::vec3 initHitPos) {
20 initialHitPoint = initHitPos;
21 originalScale = target->getScale();
22}
23
24glm::mat4 ScaleHandle::getModelMatrix() const {
25 glm::mat4 model(1.0f);
26 model = glm::translate(model, target->getPosition());
27 model = model * glm::mat4_cast(target->getRotationQuat());
28 model = model * rotateFromYToAxis(axis);
29 model = glm::scale(model, glm::vec3(thickness, length, thickness));
30 return model;
31}
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
void setDragState(glm::vec3 initHitPos) override
Initializes the drag operation state.
void onDrag(const Math::Ray &ray) override
Handles continuous dragging motion.
ScaleHandle(SceneObject *tgt, Axis ax)
glm::mat4 getModelMatrix() const override
Gets the model transformation matrix for rendering this handle.
void setScale(const glm::vec3 &scl)
glm::vec3 getPosition() const
glm::vec3 getScale() const
glm::quat getRotationQuat() const
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