Avoid unqualified-id "near" and "far" in Node3DEditor/Viewport

This commit is contained in:
Silc Lizard (Tokage) Renew 2024-02-13 14:19:23 +09:00
parent 9050ee1542
commit 67e38709fd
8 changed files with 55 additions and 75 deletions

View File

@ -117,11 +117,6 @@ AABB AABB::intersection(const AABB &p_aabb) const {
return AABB(min, max - min); return AABB(min, max - min);
} }
#ifdef MINGW_ENABLED
#undef near
#undef far
#endif
bool AABB::intersects_ray(const Vector3 &p_from, const Vector3 &p_dir, Vector3 *r_clip, Vector3 *r_normal) const { bool AABB::intersects_ray(const Vector3 &p_from, const Vector3 &p_dir, Vector3 *r_clip, Vector3 *r_normal) const {
#ifdef MATH_CHECKS #ifdef MATH_CHECKS
if (unlikely(size.x < 0 || size.y < 0 || size.z < 0)) { if (unlikely(size.x < 0 || size.y < 0 || size.z < 0)) {
@ -130,8 +125,8 @@ bool AABB::intersects_ray(const Vector3 &p_from, const Vector3 &p_dir, Vector3 *
#endif #endif
Vector3 c1, c2; Vector3 c1, c2;
Vector3 end = position + size; Vector3 end = position + size;
real_t near = -1e20; real_t depth_near = -1e20;
real_t far = 1e20; real_t depth_far = 1e20;
int axis = 0; int axis = 0;
for (int i = 0; i < 3; i++) { for (int i = 0; i < 3; i++) {
@ -146,14 +141,14 @@ bool AABB::intersects_ray(const Vector3 &p_from, const Vector3 &p_dir, Vector3 *
if (c1[i] > c2[i]) { if (c1[i] > c2[i]) {
SWAP(c1, c2); SWAP(c1, c2);
} }
if (c1[i] > near) { if (c1[i] > depth_near) {
near = c1[i]; depth_near = c1[i];
axis = i; axis = i;
} }
if (c2[i] < far) { if (c2[i] < depth_far) {
far = c2[i]; depth_far = c2[i];
} }
if ((near > far) || (far < 0)) { if ((depth_near > depth_far) || (depth_far < 0)) {
return false; return false;
} }
} }

View File

@ -943,13 +943,13 @@ void Node3DEditorViewport::_select_region() {
} }
} }
Plane near(-_get_camera_normal(), cam_pos); Plane near_plane = Plane(-_get_camera_normal(), cam_pos);
near.d -= get_znear(); near_plane.d -= get_znear();
frustum.push_back(near); frustum.push_back(near_plane);
Plane far = -near; Plane far_plane = -near_plane;
far.d += get_zfar(); far_plane.d += get_zfar();
frustum.push_back(far); frustum.push_back(far_plane);
if (spatial_editor->get_single_selected_node()) { if (spatial_editor->get_single_selected_node()) {
Node3D *single_selected = spatial_editor->get_single_selected_node(); Node3D *single_selected = spatial_editor->get_single_selected_node();

View File

@ -254,7 +254,7 @@ namespace Godot
/// <param name="near">The near clipping distance.</param> /// <param name="near">The near clipping distance.</param>
/// <param name="far">The far clipping distance.</param> /// <param name="far">The far clipping distance.</param>
/// <returns>The created projection.</returns> /// <returns>The created projection.</returns>
public static Projection CreateFrustum(real_t left, real_t right, real_t bottom, real_t top, real_t near, real_t far) public static Projection CreateFrustum(real_t left, real_t right, real_t bottom, real_t top, real_t depth_near, real_t depth_far)
{ {
if (right <= left) if (right <= left)
{ {
@ -264,18 +264,18 @@ namespace Godot
{ {
throw new ArgumentException("top is less or equal to bottom."); throw new ArgumentException("top is less or equal to bottom.");
} }
if (far <= near) if (depth_far <= depth_near)
{ {
throw new ArgumentException("far is less or equal to near."); throw new ArgumentException("far is less or equal to near.");
} }
real_t x = 2 * near / (right - left); real_t x = 2 * depth_near / (right - left);
real_t y = 2 * near / (top - bottom); real_t y = 2 * depth_near / (top - bottom);
real_t a = (right + left) / (right - left); real_t a = (right + left) / (right - left);
real_t b = (top + bottom) / (top - bottom); real_t b = (top + bottom) / (top - bottom);
real_t c = -(far + near) / (far - near); real_t c = -(depth_far + depth_near) / (depth_far - depth_near);
real_t d = -2 * far * near / (far - near); real_t d = -2 * depth_far * depth_near / (depth_far - depth_near);
return new Projection( return new Projection(
new Vector4(x, 0, 0, 0), new Vector4(x, 0, 0, 0),
@ -297,13 +297,13 @@ namespace Godot
/// <param name="far">The far clipping distance.</param> /// <param name="far">The far clipping distance.</param>
/// <param name="flipFov">If the field of view is flipped over the projection's diagonal.</param> /// <param name="flipFov">If the field of view is flipped over the projection's diagonal.</param>
/// <returns>The created projection.</returns> /// <returns>The created projection.</returns>
public static Projection CreateFrustumAspect(real_t size, real_t aspect, Vector2 offset, real_t near, real_t far, bool flipFov) public static Projection CreateFrustumAspect(real_t size, real_t aspect, Vector2 offset, real_t depth_near, real_t depth_far, bool flipFov)
{ {
if (!flipFov) if (!flipFov)
{ {
size *= aspect; size *= aspect;
} }
return CreateFrustum(-size / 2 + offset.X, +size / 2 + offset.X, -size / aspect / 2 + offset.Y, +size / aspect / 2 + offset.Y, near, far); return CreateFrustum(-size / 2 + offset.X, +size / 2 + offset.X, -size / aspect / 2 + offset.Y, +size / aspect / 2 + offset.Y, depth_near, depth_far);
} }
/// <summary> /// <summary>

View File

@ -72,11 +72,6 @@ void SceneDebugger::deinitialize() {
} }
} }
#ifdef MINGW_ENABLED
#undef near
#undef far
#endif
#ifdef DEBUG_ENABLED #ifdef DEBUG_ENABLED
Error SceneDebugger::parse_message(void *p_user, const String &p_msg, const Array &p_args, bool &r_captured) { Error SceneDebugger::parse_message(void *p_user, const String &p_msg, const Array &p_args, bool &r_captured) {
SceneTree *scene_tree = SceneTree::get_singleton(); SceneTree *scene_tree = SceneTree::get_singleton();
@ -124,12 +119,12 @@ Error SceneDebugger::parse_message(void *p_user, const String &p_msg, const Arra
Transform3D transform = p_args[0]; Transform3D transform = p_args[0];
bool is_perspective = p_args[1]; bool is_perspective = p_args[1];
float size_or_fov = p_args[2]; float size_or_fov = p_args[2];
float near = p_args[3]; float depth_near = p_args[3];
float far = p_args[4]; float depth_far = p_args[4];
if (is_perspective) { if (is_perspective) {
scene_tree->get_root()->set_camera_3d_override_perspective(size_or_fov, near, far); scene_tree->get_root()->set_camera_3d_override_perspective(size_or_fov, depth_near, depth_far);
} else { } else {
scene_tree->get_root()->set_camera_3d_override_orthogonal(size_or_fov, near, far); scene_tree->get_root()->set_camera_3d_override_orthogonal(size_or_fov, depth_near, depth_far);
} }
scene_tree->get_root()->set_camera_3d_override_transform(transform); scene_tree->get_root()->set_camera_3d_override_transform(transform);
#endif // _3D_DISABLED #endif // _3D_DISABLED

View File

@ -896,13 +896,13 @@ void Viewport::_process_picking() {
if (camera_3d) { if (camera_3d) {
Vector3 from = camera_3d->project_ray_origin(pos); Vector3 from = camera_3d->project_ray_origin(pos);
Vector3 dir = camera_3d->project_ray_normal(pos); Vector3 dir = camera_3d->project_ray_normal(pos);
real_t far = camera_3d->get_far(); real_t depth_far = camera_3d->get_far();
PhysicsDirectSpaceState3D *space = PhysicsServer3D::get_singleton()->space_get_direct_state(find_world_3d()->get_space()); PhysicsDirectSpaceState3D *space = PhysicsServer3D::get_singleton()->space_get_direct_state(find_world_3d()->get_space());
if (space) { if (space) {
PhysicsDirectSpaceState3D::RayParameters ray_params; PhysicsDirectSpaceState3D::RayParameters ray_params;
ray_params.from = from; ray_params.from = from;
ray_params.to = from + dir * far; ray_params.to = from + dir * depth_far;
ray_params.collide_with_areas = true; ray_params.collide_with_areas = true;
ray_params.pick_ray = true; ray_params.pick_ray = true;

View File

@ -373,11 +373,6 @@ real_t CameraAttributesPhysical::get_fov() const {
return frustum_fov; return frustum_fov;
} }
#ifdef MINGW_ENABLED
#undef near
#undef far
#endif
void CameraAttributesPhysical::_update_frustum() { void CameraAttributesPhysical::_update_frustum() {
//https://en.wikipedia.org/wiki/Circle_of_confusion#Circle_of_confusion_diameter_limit_based_on_d/1500 //https://en.wikipedia.org/wiki/Circle_of_confusion#Circle_of_confusion_diameter_limit_based_on_d/1500
Vector2i sensor_size = Vector2i(36, 24); // Matches high-end DSLR, could be made variable if there is demand. Vector2i sensor_size = Vector2i(36, 24); // Matches high-end DSLR, could be made variable if there is demand.
@ -393,12 +388,12 @@ void CameraAttributesPhysical::_update_frustum() {
// that it is not picked up by the camera sensors. // that it is not picked up by the camera sensors.
// To be properly physically-based, we would run the DoF shader at all depths. To be efficient, we are only running it where the CoC // To be properly physically-based, we would run the DoF shader at all depths. To be efficient, we are only running it where the CoC
// will be visible, this introduces some value shifts in the near field that we have to compensate for below. // will be visible, this introduces some value shifts in the near field that we have to compensate for below.
float near = ((hyperfocal_length * u) / (hyperfocal_length + (u - frustum_focal_length))) / 1000.0; // In meters. float depth_near = ((hyperfocal_length * u) / (hyperfocal_length + (u - frustum_focal_length))) / 1000.0; // In meters.
float far = ((hyperfocal_length * u) / (hyperfocal_length - (u - frustum_focal_length))) / 1000.0; // In meters. float depth_far = ((hyperfocal_length * u) / (hyperfocal_length - (u - frustum_focal_length))) / 1000.0; // In meters.
float scale = (frustum_focal_length / (u - frustum_focal_length)) * (frustum_focal_length / exposure_aperture); float scale = (frustum_focal_length / (u - frustum_focal_length)) * (frustum_focal_length / exposure_aperture);
bool use_far = (far < frustum_far) && (far > 0.0); bool use_far = (depth_far < frustum_far) && (depth_far > 0.0);
bool use_near = near > frustum_near; bool use_near = depth_near > frustum_near;
#ifdef DEBUG_ENABLED #ifdef DEBUG_ENABLED
if (OS::get_singleton()->get_current_rendering_method() == "gl_compatibility") { if (OS::get_singleton()->get_current_rendering_method() == "gl_compatibility") {
// Force disable DoF in editor builds to suppress warnings. // Force disable DoF in editor builds to suppress warnings.

View File

@ -47,11 +47,6 @@ void RendererSceneRender::CameraData::set_camera(const Transform3D p_transform,
taa_jitter = p_taa_jitter; taa_jitter = p_taa_jitter;
} }
#ifdef MINGW_ENABLED
#undef near
#undef far
#endif
void RendererSceneRender::CameraData::set_multiview_camera(uint32_t p_view_count, const Transform3D *p_transforms, const Projection *p_projections, bool p_is_orthogonal, bool p_vaspect) { void RendererSceneRender::CameraData::set_multiview_camera(uint32_t p_view_count, const Transform3D *p_transforms, const Projection *p_projections, bool p_is_orthogonal, bool p_vaspect) {
ERR_FAIL_COND_MSG(p_view_count != 2, "Incorrect view count for stereoscopic view"); ERR_FAIL_COND_MSG(p_view_count != 2, "Incorrect view count for stereoscopic view");
@ -90,7 +85,7 @@ void RendererSceneRender::CameraData::set_multiview_camera(uint32_t p_view_count
// 5. figure out far plane, this could use some improvement, we may have our far plane too close like this, not sure if this matters // 5. figure out far plane, this could use some improvement, we may have our far plane too close like this, not sure if this matters
Vector3 far_center = (planes[0][Projection::PLANE_FAR].get_center() + planes[1][Projection::PLANE_FAR].get_center()) * 0.5; Vector3 far_center = (planes[0][Projection::PLANE_FAR].get_center() + planes[1][Projection::PLANE_FAR].get_center()) * 0.5;
Plane far(-z, far_center); Plane far_plane = Plane(-z, far_center);
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// Figure out our top/bottom planes // Figure out our top/bottom planes
@ -98,9 +93,9 @@ void RendererSceneRender::CameraData::set_multiview_camera(uint32_t p_view_count
// 6. Intersect far and left planes with top planes from both eyes, save the point with highest y as top_left. // 6. Intersect far and left planes with top planes from both eyes, save the point with highest y as top_left.
Vector3 top_left, other; Vector3 top_left, other;
ERR_FAIL_COND_MSG( ERR_FAIL_COND_MSG(
!far.intersect_3(planes[0][Projection::PLANE_LEFT], planes[0][Projection::PLANE_TOP], &top_left), "Can't determine left camera far/left/top vector"); !far_plane.intersect_3(planes[0][Projection::PLANE_LEFT], planes[0][Projection::PLANE_TOP], &top_left), "Can't determine left camera far/left/top vector");
ERR_FAIL_COND_MSG( ERR_FAIL_COND_MSG(
!far.intersect_3(planes[1][Projection::PLANE_LEFT], planes[1][Projection::PLANE_TOP], &other), "Can't determine right camera far/left/top vector"); !far_plane.intersect_3(planes[1][Projection::PLANE_LEFT], planes[1][Projection::PLANE_TOP], &other), "Can't determine right camera far/left/top vector");
if (y.dot(top_left) < y.dot(other)) { if (y.dot(top_left) < y.dot(other)) {
top_left = other; top_left = other;
} }
@ -108,9 +103,9 @@ void RendererSceneRender::CameraData::set_multiview_camera(uint32_t p_view_count
// 7. Intersect far and left planes with bottom planes from both eyes, save the point with lowest y as bottom_left. // 7. Intersect far and left planes with bottom planes from both eyes, save the point with lowest y as bottom_left.
Vector3 bottom_left; Vector3 bottom_left;
ERR_FAIL_COND_MSG( ERR_FAIL_COND_MSG(
!far.intersect_3(planes[0][Projection::PLANE_LEFT], planes[0][Projection::PLANE_BOTTOM], &bottom_left), "Can't determine left camera far/left/bottom vector"); !far_plane.intersect_3(planes[0][Projection::PLANE_LEFT], planes[0][Projection::PLANE_BOTTOM], &bottom_left), "Can't determine left camera far/left/bottom vector");
ERR_FAIL_COND_MSG( ERR_FAIL_COND_MSG(
!far.intersect_3(planes[1][Projection::PLANE_LEFT], planes[1][Projection::PLANE_BOTTOM], &other), "Can't determine right camera far/left/bottom vector"); !far_plane.intersect_3(planes[1][Projection::PLANE_LEFT], planes[1][Projection::PLANE_BOTTOM], &other), "Can't determine right camera far/left/bottom vector");
if (y.dot(other) < y.dot(bottom_left)) { if (y.dot(other) < y.dot(bottom_left)) {
bottom_left = other; bottom_left = other;
} }
@ -118,9 +113,9 @@ void RendererSceneRender::CameraData::set_multiview_camera(uint32_t p_view_count
// 8. Intersect far and right planes with top planes from both eyes, save the point with highest y as top_right. // 8. Intersect far and right planes with top planes from both eyes, save the point with highest y as top_right.
Vector3 top_right; Vector3 top_right;
ERR_FAIL_COND_MSG( ERR_FAIL_COND_MSG(
!far.intersect_3(planes[0][Projection::PLANE_RIGHT], planes[0][Projection::PLANE_TOP], &top_right), "Can't determine left camera far/right/top vector"); !far_plane.intersect_3(planes[0][Projection::PLANE_RIGHT], planes[0][Projection::PLANE_TOP], &top_right), "Can't determine left camera far/right/top vector");
ERR_FAIL_COND_MSG( ERR_FAIL_COND_MSG(
!far.intersect_3(planes[1][Projection::PLANE_RIGHT], planes[1][Projection::PLANE_TOP], &other), "Can't determine right camera far/right/top vector"); !far_plane.intersect_3(planes[1][Projection::PLANE_RIGHT], planes[1][Projection::PLANE_TOP], &other), "Can't determine right camera far/right/top vector");
if (y.dot(top_right) < y.dot(other)) { if (y.dot(top_right) < y.dot(other)) {
top_right = other; top_right = other;
} }
@ -128,9 +123,9 @@ void RendererSceneRender::CameraData::set_multiview_camera(uint32_t p_view_count
// 9. Intersect far and right planes with bottom planes from both eyes, save the point with lowest y as bottom_right. // 9. Intersect far and right planes with bottom planes from both eyes, save the point with lowest y as bottom_right.
Vector3 bottom_right; Vector3 bottom_right;
ERR_FAIL_COND_MSG( ERR_FAIL_COND_MSG(
!far.intersect_3(planes[0][Projection::PLANE_RIGHT], planes[0][Projection::PLANE_BOTTOM], &bottom_right), "Can't determine left camera far/right/bottom vector"); !far_plane.intersect_3(planes[0][Projection::PLANE_RIGHT], planes[0][Projection::PLANE_BOTTOM], &bottom_right), "Can't determine left camera far/right/bottom vector");
ERR_FAIL_COND_MSG( ERR_FAIL_COND_MSG(
!far.intersect_3(planes[1][Projection::PLANE_RIGHT], planes[1][Projection::PLANE_BOTTOM], &other), "Can't determine right camera far/right/bottom vector"); !far_plane.intersect_3(planes[1][Projection::PLANE_RIGHT], planes[1][Projection::PLANE_BOTTOM], &other), "Can't determine right camera far/right/bottom vector");
if (y.dot(other) < y.dot(bottom_right)) { if (y.dot(other) < y.dot(bottom_right)) {
bottom_right = other; bottom_right = other;
} }
@ -145,29 +140,29 @@ void RendererSceneRender::CameraData::set_multiview_camera(uint32_t p_view_count
// Figure out our near plane points // Figure out our near plane points
// 12. Create a near plane using -camera z and the eye further along in that axis. // 12. Create a near plane using -camera z and the eye further along in that axis.
Plane near; Plane near_plane;
Vector3 neg_z = -z; Vector3 neg_z = -z;
if (neg_z.dot(p_transforms[1].origin) < neg_z.dot(p_transforms[0].origin)) { if (neg_z.dot(p_transforms[1].origin) < neg_z.dot(p_transforms[0].origin)) {
near = Plane(neg_z, p_transforms[0].origin); near_plane = Plane(neg_z, p_transforms[0].origin);
} else { } else {
near = Plane(neg_z, p_transforms[1].origin); near_plane = Plane(neg_z, p_transforms[1].origin);
} }
// 13. Intersect near plane with bottm/left planes, to obtain min_vec then top/right to obtain max_vec // 13. Intersect near plane with bottm/left planes, to obtain min_vec then top/right to obtain max_vec
Vector3 min_vec; Vector3 min_vec;
ERR_FAIL_COND_MSG( ERR_FAIL_COND_MSG(
!near.intersect_3(bottom, planes[0][Projection::PLANE_LEFT], &min_vec), "Can't determine left camera near/left/bottom vector"); !near_plane.intersect_3(bottom, planes[0][Projection::PLANE_LEFT], &min_vec), "Can't determine left camera near/left/bottom vector");
ERR_FAIL_COND_MSG( ERR_FAIL_COND_MSG(
!near.intersect_3(bottom, planes[1][Projection::PLANE_LEFT], &other), "Can't determine right camera near/left/bottom vector"); !near_plane.intersect_3(bottom, planes[1][Projection::PLANE_LEFT], &other), "Can't determine right camera near/left/bottom vector");
if (x.dot(other) < x.dot(min_vec)) { if (x.dot(other) < x.dot(min_vec)) {
min_vec = other; min_vec = other;
} }
Vector3 max_vec; Vector3 max_vec;
ERR_FAIL_COND_MSG( ERR_FAIL_COND_MSG(
!near.intersect_3(top, planes[0][Projection::PLANE_RIGHT], &max_vec), "Can't determine left camera near/right/top vector"); !near_plane.intersect_3(top, planes[0][Projection::PLANE_RIGHT], &max_vec), "Can't determine left camera near/right/top vector");
ERR_FAIL_COND_MSG( ERR_FAIL_COND_MSG(
!near.intersect_3(top, planes[1][Projection::PLANE_RIGHT], &other), "Can't determine right camera near/right/top vector"); !near_plane.intersect_3(top, planes[1][Projection::PLANE_RIGHT], &other), "Can't determine right camera near/right/top vector");
if (x.dot(max_vec) < x.dot(other)) { if (x.dot(max_vec) < x.dot(other)) {
max_vec = other; max_vec = other;
} }
@ -177,8 +172,8 @@ void RendererSceneRender::CameraData::set_multiview_camera(uint32_t p_view_count
Vector3 local_max_vec = main_transform_inv.xform(max_vec); Vector3 local_max_vec = main_transform_inv.xform(max_vec);
// 15. get x and y from these to obtain left, top, right bottom for the frustum. Get the distance from near plane to camera origin to obtain near, and the distance from the far plane to the camer origin to obtain far. // 15. get x and y from these to obtain left, top, right bottom for the frustum. Get the distance from near plane to camera origin to obtain near, and the distance from the far plane to the camer origin to obtain far.
float z_near = -near.distance_to(main_transform.origin); float z_near = -near_plane.distance_to(main_transform.origin);
float z_far = -far.distance_to(main_transform.origin); float z_far = -far_plane.distance_to(main_transform.origin);
// 16. Use this to build the combined camera matrix. // 16. Use this to build the combined camera matrix.
main_projection.set_frustum(local_min_vec.x, local_max_vec.x, local_min_vec.y, local_max_vec.y, z_near, z_far); main_projection.set_frustum(local_min_vec.x, local_max_vec.x, local_min_vec.y, local_max_vec.y, z_near, z_far);

View File

@ -65,17 +65,17 @@ TEST_CASE("[SceneTree][Camera3D] Getters and setters") {
} }
SUBCASE("Camera frustum properties") { SUBCASE("Camera frustum properties") {
constexpr float near = 0.2f; constexpr float depth_near = 0.2f;
constexpr float far = 995.0f; constexpr float depth_far = 995.0f;
constexpr float fov = 120.0f; constexpr float fov = 120.0f;
constexpr float size = 7.0f; constexpr float size = 7.0f;
constexpr float h_offset = 1.1f; constexpr float h_offset = 1.1f;
constexpr float v_offset = -1.6f; constexpr float v_offset = -1.6f;
const Vector2 frustum_offset(5, 7); const Vector2 frustum_offset(5, 7);
test_camera->set_near(near); test_camera->set_near(depth_near);
CHECK(test_camera->get_near() == near); CHECK(test_camera->get_near() == depth_near);
test_camera->set_far(far); test_camera->set_far(depth_far);
CHECK(test_camera->get_far() == far); CHECK(test_camera->get_far() == depth_far);
test_camera->set_fov(fov); test_camera->set_fov(fov);
CHECK(test_camera->get_fov() == fov); CHECK(test_camera->get_fov() == fov);
test_camera->set_size(size); test_camera->set_size(size);