Cogs.Core
Projection.h
1#pragma once
2
3#include <glm/vec3.hpp>
4
5namespace Cogs
6{
7 namespace Geometry
8 {
9
10 inline bool projectToPlane(glm::vec3 rayOrigin, glm::vec3 rayDir, glm::vec3 planeOrigin, glm::vec3 planeDir, glm::vec3 & coordinates, float * pT = nullptr)
11 {
12 rayDir = glm::normalize(rayDir);
13 planeDir = glm::normalize(planeDir);
14
15 float planeRayDot = glm::dot(rayDir, planeDir);
16
17 if (glm::abs(planeRayDot) < std::numeric_limits<float>::epsilon()) {
18 return false;
19 }
20
21 float distance = glm::dot(-planeDir, planeOrigin);
22
23 float t = -(glm::dot(rayOrigin, planeDir) + distance) / planeRayDot;
24
25 if (pT) *pT = t;
26
27 coordinates = rayOrigin + rayDir * t;
28
29 return true;
30 }
31
32 }
33}
@ Geometry
Store entity vector fields (vector<vec3>, vector<vec2>, vector<int>, vector<float>).
Contains all Cogs related functionality.
Definition: FieldSetter.h:23