1
0
forked from josh/j3ml

Adding more Mat4x4 functionality

This commit is contained in:
2024-01-30 13:13:09 -05:00
parent 32577f79b8
commit 21ceca62dc
7 changed files with 100 additions and 36 deletions

View File

@@ -4,6 +4,7 @@
#pragma once
#include "Plane.h"
#include <J3ML/LinearAlgebra/CoordinateFrame.h>
namespace Geometry
{
@@ -32,11 +33,10 @@ namespace Geometry
Plane LeftFace;
Plane FarFace;
Plane NearFace;
static Frustum CreateFrustumFromCamera(const Camera& cam, float aspect, float fovY, float zNear, float zFar);
static Frustum CreateFrustumFromCamera(const CoordinateFrame& cam, float aspect, float fovY, float zNear, float zFar);
};
Frustum Frustum::CreateFrustumFromCamera(const Camera &cam, float aspect, float fovY, float zNear, float zFar) {
Frustum Frustum::CreateFrustumFromCamera(const CoordinateFrame &cam, float aspect, float fovY, float zNear, float zFar) {
Frustum frustum;
const float halfVSide = zFar * tanf(fovY * 0.5f);
const float halfHSide = halfVSide * aspect;
@@ -51,5 +51,4 @@ namespace Geometry
frustum.BottomFace = Plane{cam.Position, Vector3::Cross(frontMultFar + cam.Up * halfVSide, cam.Right)};
return frustum;
}
}

View File

@@ -4,6 +4,7 @@
namespace Geometry
{
using LinearAlgebra::Vector3;
class LineSegment
{
Vector3 A;

View File

@@ -1,9 +1,8 @@
#pragma once
#include <J3ML/Geometry/AABB.h>
#include "Polyhedron.h"
#include <J3ML/Geometry/LineSegment.h>
#include <J3ML/Geometry/Polyhedron.h>
namespace Geometry {
class OBB
@@ -18,14 +17,14 @@ namespace Geometry {
OBB() {}
OBB(const Vector3& pos, const Vector3& radii, const Vector3& axis0, const Vector3& axis1, const Vector3& axis2);
OBB(const AABB& aabb);
OBB(const Geometry::AABB& aabb);
inline static int NumFaces() { return 6; }
inline static int NumEdges() { return 12; }
inline static int NumVertices() { return 8; }
Polyhedron ToPolyhedron() const;
AABB MinimalEnclosingAABB() const;
Geometry::AABB MinimalEnclosingAABB() const;
Sphere MinimalEnclosingSphere() const;
Sphere MaximalContainedSphere() const;
@@ -42,7 +41,7 @@ namespace Geometry {
float Volume();
float SurfaceArea();
LineSegment Edge(int edgeIndex) const;
Geometry::LineSegment Edge(int edgeIndex) const;
Vector3 CornerPoint(int cornerIndex) const;
};
}