Archived
1
Fork 0

Move frustum class into renderer

This commit is contained in:
redstrate 2020-08-19 22:09:14 -04:00
parent 6927dee9d7
commit 9af4c2f2c4
6 changed files with 45 additions and 13 deletions

View file

@ -21,7 +21,6 @@ set(SRC
include/platform.hpp
include/file.hpp
include/imgui_utility.hpp
include/frustum.hpp
src/file.cpp
src/engine.cpp

View file

@ -1,6 +1,9 @@
#pragma once
#include "assetptr.hpp"
#include "object.hpp"
#include "quaternion.hpp"
#include "matrix.hpp"
class btCollisionShape;
class btRigidBody;

View file

@ -1,5 +1,9 @@
#pragma once
#include <cmath>
#include "vector.hpp"
struct Plane {
float a = 0.0, b = 0.0, c = 0.0, d = 0.0;
};

View file

@ -9,6 +9,7 @@ set(SRC
include/scenecapture.hpp
include/materialcompiler.hpp
include/dofpass.hpp
include/frustum.hpp
src/renderer.cpp
src/gaussianhelper.cpp
@ -17,7 +18,8 @@ set(SRC
src/smaapass.cpp
src/scenecapture.cpp
src/materialcompiler.cpp
src/dofpass.cpp)
src/dofpass.cpp
src/frustum.cpp)
add_library(Renderer STATIC ${SRC})
target_link_libraries(Renderer

View file

@ -0,0 +1,26 @@
#pragma once
#include <array>
#include "plane.hpp"
#include "components.hpp"
#include "matrix.hpp"
#include "aabb.hpp"
#include "object.hpp"
#include "asset_types.hpp"
class Scene;
struct CameraFrustum {
std::array<Plane, 6> planes;
};
CameraFrustum extract_frustum(const Matrix4x4 combined);
CameraFrustum camera_extract_frustum(Scene& scene, Object cam);
CameraFrustum normalize_frustum(const CameraFrustum& frustum);
bool test_point_plane(const Plane& plane, const Vector3& point);
bool test_point_frustum(const CameraFrustum& frustum, const Vector3& point);
bool test_aabb_frustum(const CameraFrustum& frustum, const AABB& aabb);
AABB get_aabb_for_part(const Transform& transform, const Mesh::Part& part);

View file

@ -1,10 +1,8 @@
#pragma once
#include "frustum.hpp"
struct CameraFrustum {
std::array<Plane, 6> planes;
};
#include "scene.hpp"
inline CameraFrustum extract_frustum(const Matrix4x4 combined) {
CameraFrustum extract_frustum(const Matrix4x4 combined) {
CameraFrustum frustum;
// left plane
@ -46,14 +44,14 @@ inline CameraFrustum extract_frustum(const Matrix4x4 combined) {
return frustum;
}
inline CameraFrustum camera_extract_frustum(Scene& scene, Object cam) {
CameraFrustum camera_extract_frustum(Scene& scene, Object cam) {
const auto camera_component = scene.get<Camera>(cam);
const Matrix4x4 combined = camera_component.perspective * camera_component.view;
return extract_frustum(combined);
}
inline CameraFrustum normalize_frustum(const CameraFrustum& frustum) {
CameraFrustum normalize_frustum(const CameraFrustum& frustum) {
CameraFrustum normalized_frustum;
for(int i = 0; i < 6; i++)
normalized_frustum.planes[i] = normalize(frustum.planes[i]);
@ -61,11 +59,11 @@ inline CameraFrustum normalize_frustum(const CameraFrustum& frustum) {
return normalized_frustum;
}
inline bool test_point_plane(const Plane& plane, const Vector3& point) {
bool test_point_plane(const Plane& plane, const Vector3& point) {
return distance_to_point(plane, point) > 0.0;
}
inline bool test_point_frustum(const CameraFrustum& frustum, const Vector3& point) {
bool test_point_frustum(const CameraFrustum& frustum, const Vector3& point) {
bool inside_frustum = false;
for(int i = 0; i < 6; i++)
@ -74,7 +72,7 @@ inline bool test_point_frustum(const CameraFrustum& frustum, const Vector3& poin
return !inside_frustum;
}
inline bool test_aabb_frustum(const CameraFrustum& frustum, const AABB& aabb) {
bool test_aabb_frustum(const CameraFrustum& frustum, const AABB& aabb) {
for(int i = 0; i < 6; i++) {
int out = 0;
@ -88,7 +86,7 @@ inline bool test_aabb_frustum(const CameraFrustum& frustum, const AABB& aabb) {
return true;
}
inline AABB get_aabb_for_part(const Transform& transform, const Mesh::Part& part) {
AABB get_aabb_for_part(const Transform& transform, const Mesh::Part& part) {
AABB aabb = {};
aabb.min = part.aabb.min - transform.get_world_position();
aabb.max = transform.get_world_position() + part.aabb.max;