diff --git a/engine/core/CMakeLists.txt b/engine/core/CMakeLists.txt index a40046f..f275ce0 100755 --- a/engine/core/CMakeLists.txt +++ b/engine/core/CMakeLists.txt @@ -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 diff --git a/engine/core/include/components.hpp b/engine/core/include/components.hpp index 025b139..e49aced 100755 --- a/engine/core/include/components.hpp +++ b/engine/core/include/components.hpp @@ -1,6 +1,9 @@ #pragma once #include "assetptr.hpp" +#include "object.hpp" +#include "quaternion.hpp" +#include "matrix.hpp" class btCollisionShape; class btRigidBody; diff --git a/engine/math/include/plane.hpp b/engine/math/include/plane.hpp index beca248..d59dade 100755 --- a/engine/math/include/plane.hpp +++ b/engine/math/include/plane.hpp @@ -1,5 +1,9 @@ #pragma once +#include + +#include "vector.hpp" + struct Plane { float a = 0.0, b = 0.0, c = 0.0, d = 0.0; }; diff --git a/engine/renderer/CMakeLists.txt b/engine/renderer/CMakeLists.txt index 914f9ee..d320051 100755 --- a/engine/renderer/CMakeLists.txt +++ b/engine/renderer/CMakeLists.txt @@ -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 diff --git a/engine/renderer/include/frustum.hpp b/engine/renderer/include/frustum.hpp new file mode 100755 index 0000000..1729cbe --- /dev/null +++ b/engine/renderer/include/frustum.hpp @@ -0,0 +1,26 @@ +#pragma once + +#include + +#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 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); diff --git a/engine/core/include/frustum.hpp b/engine/renderer/src/frustum.cpp old mode 100755 new mode 100644 similarity index 82% rename from engine/core/include/frustum.hpp rename to engine/renderer/src/frustum.cpp index 200337f..b70f272 --- a/engine/core/include/frustum.hpp +++ b/engine/renderer/src/frustum.cpp @@ -1,10 +1,8 @@ -#pragma once +#include "frustum.hpp" -struct CameraFrustum { - std::array 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(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;