#pragma once #include "vec3.h" template struct plane { vec3 dir; T dist; plane() : dist(0) {} plane(const vec3& direction, T distance) : dir(direction), dist(distance) { } plane(const vec3& point, const vec3& direction) : dir(direction), dist((T)point.dot(direction)) { } //Creates a plane from a triangle specified in clockwise order (looking at the plane) plane(const vec3& vertA, const vec3& vertB, const vec3& vertC) { vec3 legOne = vertA - vertB, legTwo = vertC - vertB; dir = legOne.cross(legTwo).normalized(); dist = (T)dir.dot(vertA); } double distanceFromPlane(const vec3& point) const { return dir.dot(point) - dist; } bool pointInFront(const vec3& point) const { return distanceFromPlane(point) >= 0.0; } }; typedef plane planed;