Attention: Here be dragons

This is the `latest` (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

Geometry3D¶

Inherits: Object

Helper node to calculate generic geometry operations in 3D space.

Description¶

Geometry3D provides users with a set of helper functions to create geometric shapes, compute intersections between shapes, and process various other geometric operations.

Methods¶

 Plane[] build_box_planes ( Vector3 extents ) Plane[] build_capsule_planes ( float radius, float height, int sides, int lats, Vector3.Axis axis=2 ) Plane[] build_cylinder_planes ( float radius, float height, int sides, Vector3.Axis axis=2 ) PackedVector3Array clip_polygon ( PackedVector3Array points, Plane plane ) Vector3 get_closest_point_to_segment ( Vector3 point, Vector3 s1, Vector3 s2 ) Vector3 PackedVector3Array Variant ray_intersects_triangle ( Vector3 from, Vector3 dir, Vector3 a, Vector3 b, Vector3 c ) PackedVector3Array segment_intersects_convex ( Vector3 from, Vector3 to, Plane[] planes ) PackedVector3Array segment_intersects_cylinder ( Vector3 from, Vector3 to, float height, float radius ) PackedVector3Array segment_intersects_sphere ( Vector3 from, Vector3 to, Vector3 sphere_position, float sphere_radius ) Variant

Method Descriptions¶

Plane[] build_box_planes ( Vector3 extents )

Returns an array with 6 Planes that describe the sides of a box centered at the origin. The box size is defined by `extents`, which represents one (positive) corner of the box (i.e. half its actual size).

Plane[] build_capsule_planes ( float radius, float height, int sides, int lats, Vector3.Axis axis=2 )

Returns an array of Planes closely bounding a faceted capsule centered at the origin with radius `radius` and height `height`. The parameter `sides` defines how many planes will be generated for the side part of the capsule, whereas `lats` gives the number of latitudinal steps at the bottom and top of the capsule. The parameter `axis` describes the axis along which the capsule is oriented (0 for X, 1 for Y, 2 for Z).

Plane[] build_cylinder_planes ( float radius, float height, int sides, Vector3.Axis axis=2 )

Returns an array of Planes closely bounding a faceted cylinder centered at the origin with radius `radius` and height `height`. The parameter `sides` defines how many planes will be generated for the round part of the cylinder. The parameter `axis` describes the axis along which the cylinder is oriented (0 for X, 1 for Y, 2 for Z).

PackedVector3Array clip_polygon ( PackedVector3Array points, Plane plane )

Clips the polygon defined by the points in `points` against the `plane` and returns the points of the clipped polygon.

Vector3 get_closest_point_to_segment ( Vector3 point, Vector3 s1, Vector3 s2 )

Returns the 3D point on the 3D segment (`s1`, `s2`) that is closest to `point`. The returned point will always be inside the specified segment.

Vector3 get_closest_point_to_segment_uncapped ( Vector3 point, Vector3 s1, Vector3 s2 )

Returns the 3D point on the 3D line defined by (`s1`, `s2`) that is closest to `point`. The returned point can be inside the segment (`s1`, `s2`) or outside of it, i.e. somewhere on the line extending from the segment.

PackedVector3Array get_closest_points_between_segments ( Vector3 p1, Vector3 p2, Vector3 q1, Vector3 q2 )

Given the two 3D segments (`p1`, `p2`) and (`q1`, `q2`), finds those two points on the two segments that are closest to each other. Returns a PackedVector3Array that contains this point on (`p1`, `p2`) as well the accompanying point on (`q1`, `q2`).

Variant ray_intersects_triangle ( Vector3 from, Vector3 dir, Vector3 a, Vector3 b, Vector3 c )

Tests if the 3D ray starting at `from` with the direction of `dir` intersects the triangle specified by `a`, `b` and `c`. If yes, returns the point of intersection as Vector3. If no intersection takes place, returns `null`.

PackedVector3Array segment_intersects_convex ( Vector3 from, Vector3 to, Plane[] planes )

Given a convex hull defined though the Planes in the array `planes`, tests if the segment (`from`, `to`) intersects with that hull. If an intersection is found, returns a PackedVector3Array containing the point the intersection and the hull's normal. Otherwise, returns an empty array.

PackedVector3Array segment_intersects_cylinder ( Vector3 from, Vector3 to, float height, float radius )

Checks if the segment (`from`, `to`) intersects the cylinder with height `height` that is centered at the origin and has radius `radius`. If no, returns an empty PackedVector3Array. If an intersection takes place, the returned array contains the point of intersection and the cylinder's normal at the point of intersection.

PackedVector3Array segment_intersects_sphere ( Vector3 from, Vector3 to, Vector3 sphere_position, float sphere_radius )

Checks if the segment (`from`, `to`) intersects the sphere that is located at `sphere_position` and has radius `sphere_radius`. If no, returns an empty PackedVector3Array. If yes, returns a PackedVector3Array containing the point of intersection and the sphere's normal at the point of intersection.

Variant segment_intersects_triangle ( Vector3 from, Vector3 to, Vector3 a, Vector3 b, Vector3 c )

Tests if the segment (`from`, `to`) intersects the triangle `a`, `b`, `c`. If yes, returns the point of intersection as Vector3. If no intersection takes place, returns `null`.