Move frustum class into renderer
This commit is contained in:
parent
6927dee9d7
commit
9af4c2f2c4
6 changed files with 45 additions and 13 deletions
|
@ -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
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
#pragma once
|
||||
|
||||
#include "assetptr.hpp"
|
||||
#include "object.hpp"
|
||||
#include "quaternion.hpp"
|
||||
#include "matrix.hpp"
|
||||
|
||||
class btCollisionShape;
|
||||
class btRigidBody;
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
|
|
@ -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
|
||||
|
|
26
engine/renderer/include/frustum.hpp
Executable file
26
engine/renderer/include/frustum.hpp
Executable 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);
|
20
engine/core/include/frustum.hpp → engine/renderer/src/frustum.cpp
Executable file → Normal file
20
engine/core/include/frustum.hpp → engine/renderer/src/frustum.cpp
Executable file → Normal 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;
|
Reference in a new issue