Class TBaseTrianglesOctree
Unit
Declaration
type TBaseTrianglesOctree = class(TOctree)
Description
Abstract class for octrees that can check and return collisions with TTriangle.
Octree node class used by this must be a TBaseTrianglesOctreeNode descendant.
In a simple case, this is an ancestor of TTriangleOctree, that is just an octree storing TTriangle. But it's also an ancestor of TShapeOctree, since each shape has also a triangle octree. This way, TShapeOctree can calculate collisions with TTriangle, even though it doesn't directly store TTriangle items.
Hierarchy
- TObject
- TOctree
- TBaseTrianglesOctree
Overview
Methods
![]() |
function SegmentCollision( out Intersection: TVector3; out IntersectionDistance: Single; const pos1, pos2: TVector3; const ReturnClosestIntersection: boolean; const TriangleToIgnore: PTriangle; const IgnoreMarginAtStart: boolean; const TrianglesToIgnoreFunc: TTriangleIgnoreFunc): PTriangle; overload; |
![]() |
function SegmentCollision( out Intersection: TVector3; const pos1, pos2: TVector3; const ReturnClosestIntersection: boolean; const TriangleToIgnore: PTriangle; const IgnoreMarginAtStart: boolean; const TrianglesToIgnoreFunc: TTriangleIgnoreFunc): PTriangle; overload; |
![]() |
function SegmentCollision( out IntersectionDistance: Single; const pos1, pos2: TVector3; const ReturnClosestIntersection: boolean; const TriangleToIgnore: PTriangle; const IgnoreMarginAtStart: boolean; const TrianglesToIgnoreFunc: TTriangleIgnoreFunc): PTriangle; overload; |
![]() |
function SegmentCollision( const pos1, pos2: TVector3; const ReturnClosestIntersection: boolean; const TriangleToIgnore: PTriangle; const IgnoreMarginAtStart: boolean; const TrianglesToIgnoreFunc: TTriangleIgnoreFunc): PTriangle; overload; |
![]() |
function IsSegmentCollision( const pos1, pos2: TVector3; const TriangleToIgnore: PTriangle; const IgnoreMarginAtStart: boolean; const TrianglesToIgnoreFunc: TTriangleIgnoreFunc): boolean; |
![]() |
function SphereCollision(const pos: TVector3; const Radius: Single; const TriangleToIgnore: PTriangle; const TrianglesToIgnoreFunc: TTriangleIgnoreFunc): PTriangle; |
![]() |
function IsSphereCollision(const pos: TVector3; const Radius: Single; const TriangleToIgnore: PTriangle; const TrianglesToIgnoreFunc: TTriangleIgnoreFunc): boolean; |
![]() |
function SphereCollision2D(const pos: TVector2; const Radius: Single; const TriangleToIgnore: PTriangle; const TrianglesToIgnoreFunc: TTriangleIgnoreFunc): PTriangle; |
![]() |
function IsSphereCollision2D(const pos: TVector2; const Radius: Single; const TriangleToIgnore: PTriangle; const TrianglesToIgnoreFunc: TTriangleIgnoreFunc): boolean; |
![]() |
function PointCollision2D(const Point: TVector2; const TriangleToIgnore: PTriangle; const TrianglesToIgnoreFunc: TTriangleIgnoreFunc): PTriangle; |
![]() |
function IsPointCollision2D(const Point: TVector2; const TriangleToIgnore: PTriangle; const TrianglesToIgnoreFunc: TTriangleIgnoreFunc): boolean; |
![]() |
function BoxCollision(const ABox: TBox3D; const TriangleToIgnore: PTriangle; const TrianglesToIgnoreFunc: TTriangleIgnoreFunc): PTriangle; |
![]() |
function IsBoxCollision(const ABox: TBox3D; const TriangleToIgnore: PTriangle; const TrianglesToIgnoreFunc: TTriangleIgnoreFunc): boolean; |
![]() |
function RayCollision( out Intersection: TVector3; out IntersectionDistance: Single; const RayOrigin, RayDirection: TVector3; const ReturnClosestIntersection: boolean; const TriangleToIgnore: PTriangle; const IgnoreMarginAtStart: boolean; const TrianglesToIgnoreFunc: TTriangleIgnoreFunc): PTriangle; overload; |
![]() |
function RayCollision( out Intersection: TVector3; const RayOrigin, RayDirection: TVector3; const ReturnClosestIntersection: boolean; const TriangleToIgnore: PTriangle; const IgnoreMarginAtStart: boolean; const TrianglesToIgnoreFunc: TTriangleIgnoreFunc): PTriangle; overload; |
![]() |
function RayCollision( out IntersectionDistance: Single; const RayOrigin, RayDirection: TVector3; const ReturnClosestIntersection: boolean; const TriangleToIgnore: PTriangle; const IgnoreMarginAtStart: boolean; const TrianglesToIgnoreFunc: TTriangleIgnoreFunc): PTriangle; overload; |
![]() |
function RayCollision(const RayOrigin, RayDirection: TVector3; const ReturnClosestIntersection: boolean; const TriangleToIgnore: PTriangle; const IgnoreMarginAtStart: boolean; const TrianglesToIgnoreFunc: TTriangleIgnoreFunc): PTriangle; overload; |
![]() |
function IsRayCollision( const RayOrigin, RayDirection: TVector3; const TriangleToIgnore: PTriangle; const IgnoreMarginAtStart: boolean; const TrianglesToIgnoreFunc: TTriangleIgnoreFunc): boolean; |
![]() |
function MoveCollision( const OldPos, NewPos: TVector3; const IsRadius: boolean; const Radius: Single; const OldBox, NewBox: TBox3D; const TriangleToIgnore: PTriangle = nil; const TrianglesToIgnoreFunc: TTriangleIgnoreFunc = nil): boolean; |
![]() |
function MoveCollision( const OldPos, ProposedNewPos: TVector3; out NewPos: TVector3; const IsRadius: boolean; const Radius: Single; const OldBox, NewBox: TBox3D; const TriangleToIgnore: PTriangle = nil; const TrianglesToIgnoreFunc: TTriangleIgnoreFunc = nil): boolean; |
![]() |
function HeightCollision( const Position, GravityUp: TVector3; out AboveHeight: Single; out AboveGround: PTriangle; const TriangleToIgnore: PTriangle; const TrianglesToIgnoreFunc: TTriangleIgnoreFunc): boolean; |
![]() |
class function IgnoreTransparentItem( const Sender: TObject; const Triangle: PTriangle): boolean; |
![]() |
class function IgnoreForShadowRays( const Sender: TObject; const Triangle: PTriangle): boolean; |
![]() |
function LightNotBlocked(const Light: TLightInstance; const LightedPoint, LightedPointPlane, RenderDir: TVector3; const TriangleToIgnore: PTriangle; const IgnoreMarginAtStart: boolean): boolean; |
![]() |
procedure EnumerateTriangles(EnumerateTriangleFunc: TEnumerateTriangleFunc); virtual; abstract; |
![]() |
function TrianglesCount: Cardinal; virtual; abstract; |
Description
Methods
![]() |
function SegmentCollision( out Intersection: TVector3; out IntersectionDistance: Single; const pos1, pos2: TVector3; const ReturnClosestIntersection: boolean; const TriangleToIgnore: PTriangle; const IgnoreMarginAtStart: boolean; const TrianglesToIgnoreFunc: TTriangleIgnoreFunc): PTriangle; overload; |
|
Collision checking using the octree. SegmentCollision checks for collision between a line segment and tree items. SphereCollision checks for collision with a sphere. BoxCollision checks for collision with a box (axis-aligned, TBox3D type). RayCollision checks for collision with a ray. All there methods return nil if there is no collision, or a pointer to colliding item.
Parameters
| |
![]() |
function SegmentCollision( out Intersection: TVector3; const pos1, pos2: TVector3; const ReturnClosestIntersection: boolean; const TriangleToIgnore: PTriangle; const IgnoreMarginAtStart: boolean; const TrianglesToIgnoreFunc: TTriangleIgnoreFunc): PTriangle; overload; |
![]() |
function SegmentCollision( out IntersectionDistance: Single; const pos1, pos2: TVector3; const ReturnClosestIntersection: boolean; const TriangleToIgnore: PTriangle; const IgnoreMarginAtStart: boolean; const TrianglesToIgnoreFunc: TTriangleIgnoreFunc): PTriangle; overload; |
![]() |
function SegmentCollision( const pos1, pos2: TVector3; const ReturnClosestIntersection: boolean; const TriangleToIgnore: PTriangle; const IgnoreMarginAtStart: boolean; const TrianglesToIgnoreFunc: TTriangleIgnoreFunc): PTriangle; overload; |
![]() |
function IsSegmentCollision( const pos1, pos2: TVector3; const TriangleToIgnore: PTriangle; const IgnoreMarginAtStart: boolean; const TrianglesToIgnoreFunc: TTriangleIgnoreFunc): boolean; |
![]() |
function SphereCollision(const pos: TVector3; const Radius: Single; const TriangleToIgnore: PTriangle; const TrianglesToIgnoreFunc: TTriangleIgnoreFunc): PTriangle; |
![]() |
function IsSphereCollision(const pos: TVector3; const Radius: Single; const TriangleToIgnore: PTriangle; const TrianglesToIgnoreFunc: TTriangleIgnoreFunc): boolean; |
![]() |
function SphereCollision2D(const pos: TVector2; const Radius: Single; const TriangleToIgnore: PTriangle; const TrianglesToIgnoreFunc: TTriangleIgnoreFunc): PTriangle; |
![]() |
function IsSphereCollision2D(const pos: TVector2; const Radius: Single; const TriangleToIgnore: PTriangle; const TrianglesToIgnoreFunc: TTriangleIgnoreFunc): boolean; |
![]() |
function PointCollision2D(const Point: TVector2; const TriangleToIgnore: PTriangle; const TrianglesToIgnoreFunc: TTriangleIgnoreFunc): PTriangle; |
![]() |
function IsPointCollision2D(const Point: TVector2; const TriangleToIgnore: PTriangle; const TrianglesToIgnoreFunc: TTriangleIgnoreFunc): boolean; |
![]() |
function BoxCollision(const ABox: TBox3D; const TriangleToIgnore: PTriangle; const TrianglesToIgnoreFunc: TTriangleIgnoreFunc): PTriangle; |
![]() |
function IsBoxCollision(const ABox: TBox3D; const TriangleToIgnore: PTriangle; const TrianglesToIgnoreFunc: TTriangleIgnoreFunc): boolean; |
![]() |
function RayCollision( out Intersection: TVector3; out IntersectionDistance: Single; const RayOrigin, RayDirection: TVector3; const ReturnClosestIntersection: boolean; const TriangleToIgnore: PTriangle; const IgnoreMarginAtStart: boolean; const TrianglesToIgnoreFunc: TTriangleIgnoreFunc): PTriangle; overload; |
![]() |
function RayCollision( out Intersection: TVector3; const RayOrigin, RayDirection: TVector3; const ReturnClosestIntersection: boolean; const TriangleToIgnore: PTriangle; const IgnoreMarginAtStart: boolean; const TrianglesToIgnoreFunc: TTriangleIgnoreFunc): PTriangle; overload; |
![]() |
function RayCollision( out IntersectionDistance: Single; const RayOrigin, RayDirection: TVector3; const ReturnClosestIntersection: boolean; const TriangleToIgnore: PTriangle; const IgnoreMarginAtStart: boolean; const TrianglesToIgnoreFunc: TTriangleIgnoreFunc): PTriangle; overload; |
![]() |
function RayCollision(const RayOrigin, RayDirection: TVector3; const ReturnClosestIntersection: boolean; const TriangleToIgnore: PTriangle; const IgnoreMarginAtStart: boolean; const TrianglesToIgnoreFunc: TTriangleIgnoreFunc): PTriangle; overload; |
![]() |
function IsRayCollision( const RayOrigin, RayDirection: TVector3; const TriangleToIgnore: PTriangle; const IgnoreMarginAtStart: boolean; const TrianglesToIgnoreFunc: TTriangleIgnoreFunc): boolean; |
![]() |
function MoveCollision( const OldPos, NewPos: TVector3; const IsRadius: boolean; const Radius: Single; const OldBox, NewBox: TBox3D; const TriangleToIgnore: PTriangle = nil; const TrianglesToIgnoreFunc: TTriangleIgnoreFunc = nil): boolean; |
|
Check is move allowed. This is the perfect (precise, using triangle mesh, and fast) implementation of TCastleTransform.MoveCollision interface. TriangleToIgnore and TrianglesToIgnoreFunc meaning is just like for RayCollision. This can be used to allow camera to walk thorugh some surfaces (e.g. through water surface, or to allow player to walk through some "fake wall" and discover secret room in game etc.). | |
![]() |
function MoveCollision( const OldPos, ProposedNewPos: TVector3; out NewPos: TVector3; const IsRadius: boolean; const Radius: Single; const OldBox, NewBox: TBox3D; const TriangleToIgnore: PTriangle = nil; const TrianglesToIgnoreFunc: TTriangleIgnoreFunc = nil): boolean; |
![]() |
function HeightCollision( const Position, GravityUp: TVector3; out AboveHeight: Single; out AboveGround: PTriangle; const TriangleToIgnore: PTriangle; const TrianglesToIgnoreFunc: TTriangleIgnoreFunc): boolean; |
|
For given camera position and up vector, calculate camera height above the ground. This is comfortable for cooperation with TWalkCamera.OnHeight. See TCastleTransform.Height for specification. TriangleToIgnore and TrianglesToIgnoreFunc meaning is just like for RayCollision. | |
![]() |
class function IgnoreTransparentItem( const Sender: TObject; const Triangle: PTriangle): boolean; |
|
Ignore (return This is suitable for TTriangleIgnoreFunc function, you can pass this to RayCollision and such. | |
![]() |
class function IgnoreForShadowRays( const Sender: TObject; const Triangle: PTriangle): boolean; |
|
Ignore (return This is suitable for TTriangleIgnoreFunc function, you can pass this to RayCollision and such. | |
![]() |
function LightNotBlocked(const Light: TLightInstance; const LightedPoint, LightedPointPlane, RenderDir: TVector3; const TriangleToIgnore: PTriangle; const IgnoreMarginAtStart: boolean): boolean; |
|
Checks whether VRML Light (point or directional) lights at scene point LightedPoint. "Lights at scene" means that the light is turned on (field "on" is TriangleToIgnore and IgnoreMarginAtStart work just like for SegmentCollision. You should usually set TriangleToIgnore to the triangle containing your LightedPoint and IgnoreMarginAtStart to | |
![]() |
procedure EnumerateTriangles(EnumerateTriangleFunc: TEnumerateTriangleFunc); virtual; abstract; |
|
Enumerate every triangle of this octree. It passes to EnumerateTriangleFunc callback a Triangle. Triangle is passed as a pointer (never Every triangle is guaranteed to have it's World coordinates updated (to put it simply, when this is used on TShapeOctree, then we call UpdateWorld on each triangle). | |
![]() |
function TrianglesCount: Cardinal; virtual; abstract; |
|
Number of triangles within the octree. This counts all triangles returned by EnumerateTriangles. | |
Generated by PasDoc 0.16.0.
