Skip to content

Bugfix/bounding box bracket iteration#9

Open
Ikreb1 wants to merge 12 commits into
mainfrom
bugfix/BoundingBoxBracket-iteration
Open

Bugfix/bounding box bracket iteration#9
Ikreb1 wants to merge 12 commits into
mainfrom
bugfix/BoundingBoxBracket-iteration

Conversation

@Ikreb1

@Ikreb1 Ikreb1 commented Jun 26, 2026

Copy link
Copy Markdown
Member

Bounding-box bracket projection rework

https://fenriscreations.atlassian.net/browse/PLAT-11557

Summary

Rewrites Tr2ProjectBoundingBoxBracket from screen-space clamping to clip-space projection with proper near-plane clipping, fixing brackets vanishing when the tracked object's bounds cross the near plane. Also:

  • Adds projection-state outputs (extendsOffscreen, coversViewport, containsCamera), reusing the EveProjectBracket convention).
  • Implements ITr2BoundingBox on EveTransform, EvePlanet, EveEffectRoot2 (Blue-exposed, plus EveRootTransform) so more scene objects can be bracket-tracked.
  • Tr2InteriorPlaceable::IsBoundingBoxReady() accounts for modified bounds.
  • EveTransform::GetLocalToWorldTransform now returns m_worldTransform instead of identity.

Backwards incompatibility with EVE Online?

This might change the behavior in eve but I think not since my changes are behind flags and here is the only instance it is used:

  • eve/client/script/ui/login/charcreation_new/.../dollSelectionContainer.py: the character-creation doll-selection screen subclasses it with default_screenMargin = 10.0.

@Ikreb1 Ikreb1 left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thermo-nuclear code-quality review

The near-plane clipping rewrite is sound and the clip-space helpers (TransformPointToClip/AddNearPlaneIntersection/ProjectClipPoint/DistanceTo*Plane) are clean, correct, and the right fix for the vanishing-bracket bug — matrix order and the y-flipped viewport transform match the engine's row-vector convention and EveProjectBracket. m_bracketUpdateCallback correctly reuses the existing EveProjectBracket convention, and the EveRootTransform Blue mapping is valid (inherits via EveTransform).

Blocking concerns are structural, not in the math:

  1. Bounds-accumulation helpers triplicated across EveTransform.cpp, EveEffectRoot2.cpp, and the bracket file — with inconsistent finiteness invariants (a latent NaN bug). Collapse to one shared accumulator (CcpMath::AxisAlignedBox / Utilities/BoundingBox.h).
  2. EveTransform walks m_children 4x with the same dynamic_cast + sphere-fallback; extract one helper.
  3. screenMargin is now a silent READWRITE no-op — resolve loudly.
  4. EveEffectRoot2.cpp crosses 1k lines as a direct result of (1).

Land the shared accumulator + single traversal first (deletes complexity, fixes the NaN issue by construction, keeps the file under 1k), then this is a clean approve. Inline comments below.

Verification: test in probe with a large object straddling the near plane and then engulfing the camera — that is the regression this targets and it needs a visual. Also grep the monolith for screenMargin and the new extendsOffscreen/coversViewport flags.

Comment thread trinity/Eve/EveTransform.cpp Outdated
Comment thread trinity/Eve/EveTransform.cpp
Comment thread trinity/Eve/EveTransform.cpp Outdated
Comment thread trinity/Tr2ProjectBoundingBoxBracket_Blue.cpp Outdated
Comment thread trinity/Tr2ProjectBoundingBoxBracket.cpp
Comment thread trinity/Eve/EveEffectRoot2.cpp Outdated
Comment thread trinity/Tr2ProjectBoundingBoxBracket.cpp Outdated
Comment thread trinity/Eve/EveEffectRoot2.cpp
Comment thread trinity/Eve/EveTransform.h Outdated
# Conflicts:
#	trinity/Eve/EveEffectRoot2.cpp
#	trinity/Eve/EvePlanet_Blue.cpp
#	trinity/Eve/EveTransform.h
#	trinity/Interior/Tr2InteriorPlaceable.cpp
#	trinity/Tr2ProjectBoundingBoxBracket.cpp
#	trinity/Tr2ProjectBoundingBoxBracket_Blue.cpp
Copilot AI review requested due to automatic review settings July 14, 2026 14:11

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR improves bracket projection robustness by replacing the previous screen-space clamping approach with a clip-space based bounding-box projection (including near-plane handling), and expands bounding-box support across several Eve/Interior objects via ITr2BoundingBox so they can participate in bracket-style tracking.

Changes:

  • Reworked Tr2ProjectBoundingBoxBracket projection to compute a projected rect from clip-space points and added projection state outputs + an update callback.
  • Implemented/exposed ITr2BoundingBox on additional scene objects (EveTransform, EvePlanet, EveEffectRoot2) and surfaced the interface to Blue.
  • Adjusted Tr2InteriorPlaceable::IsBoundingBoxReady() to account for modified bounds.

Reviewed changes

Copilot reviewed 14 out of 14 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
trinity/Tr2ProjectBoundingBoxBracket.h Adds projection state flags and a Blue callback; adds UpdateBracket() helper.
trinity/Tr2ProjectBoundingBoxBracket.cpp Replaces projection logic with clip-space projection + near-plane intersection handling; centralizes bracket updates and invokes callback.
trinity/Tr2ProjectBoundingBoxBracket_Blue.cpp Updates Blue exposure, deprecates screenMargin, exposes new projection state flags and callback.
trinity/Interior/Tr2InteriorPlaceable.cpp Treats locally-modified bounding boxes as “ready” even if resources aren’t.
trinity/Eve/EveTransform.h Makes EveTransform implement ITr2BoundingBox; fixes local-to-world transform to use m_worldTransform.
trinity/Eve/EveTransform.cpp Implements local/world bounding box aggregation (including children) and readiness checks.
trinity/Eve/EveTransform_Blue.cpp Exposes ITr2BoundingBox to Blue for EveTransform.
trinity/Eve/EveRootTransform_Blue.cpp Exposes ITr2BoundingBox to Blue for EveRootTransform (via inheritance).
trinity/Eve/EvePlanet.h Declares ITr2BoundingBox support for EvePlanet.
trinity/Eve/EvePlanet.cpp Implements GetWorldBoundingBox()/IsBoundingBoxReady() for EvePlanet.
trinity/Eve/EvePlanet_Blue.cpp Exposes ITr2BoundingBox to Blue for EvePlanet.
trinity/Eve/EveEffectRoot2.h Declares ITr2BoundingBox support for EveEffectRoot2.
trinity/Eve/EveEffectRoot2.cpp Implements world bounding box aggregation using root + child bounding spheres with validation.
trinity/Eve/EveEffectRoot2_Blue.cpp Exposes ITr2BoundingBox to Blue for EveEffectRoot2.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread trinity/Tr2ProjectBoundingBoxBracket.cpp
Comment thread trinity/Tr2ProjectBoundingBoxBracket.cpp
void GetLocalToWorldTransform( Matrix & transform ) const override
{
transform = IdentityMatrix();
transform = m_worldTransform;

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I need this changed but maybe it affects some other object I can't find a reason but maybe someone else knows

@Ikreb1
Ikreb1 marked this pull request as ready for review July 17, 2026 13:40

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cpp-linter Review

Used clang-format v20.1.2

Click here for the full clang-format patch
diff --git a/trinity/Eve/EveEffectRoot2.h b/trinity/Eve/EveEffectRoot2.h
index d9c6003..ff0cd82 100644
--- a/trinity/Eve/EveEffectRoot2.h
+++ b/trinity/Eve/EveEffectRoot2.h
@@ -95 +95 @@ public:
-	bool GetWorldBoundingBox( Vector3& min, Vector3& max ) const override;
+	bool GetWorldBoundingBox( Vector3 & min, Vector3 & max ) const override;

Have any feedback or feature suggestions? Share it here.


/////////////////////////////////////////////////////////////////////////////////////
// ITr2BoundingBox
bool GetWorldBoundingBox( Vector3& min, Vector3& max ) const override;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

clang-format suggestion

Suggested change
bool GetWorldBoundingBox( Vector3& min, Vector3& max ) const override;
bool GetWorldBoundingBox( Vector3 & min, Vector3 & max ) const override;

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants