123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204 |
- <?xml version="1.0" encoding="UTF-8" ?>
- <class name="Curve3D" inherits="Resource" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
- <brief_description>
- Describes a Bézier curve in 3D space.
- </brief_description>
- <description>
- This class describes a Bézier curve in 3D space. It is mainly used to give a shape to a [Path], but can be manually sampled for other purposes.
- It keeps a cache of precalculated points along the curve, to speed up further calculations.
- </description>
- <tutorials>
- </tutorials>
- <methods>
- <method name="add_point">
- <return type="void" />
- <argument index="0" name="position" type="Vector3" />
- <argument index="1" name="in" type="Vector3" default="Vector3( 0, 0, 0 )" />
- <argument index="2" name="out" type="Vector3" default="Vector3( 0, 0, 0 )" />
- <argument index="3" name="index" type="int" default="-1" />
- <description>
- Adds a point with the specified [code]position[/code] relative to the curve's own position, with control points [code]in[/code] and [code]out[/code]. Appends the new point at the end of the point list.
- If [code]index[/code] is given, the new point is inserted before the existing point identified by index [code]index[/code]. Every existing point starting from [code]index[/code] is shifted further down the list of points. The index must be greater than or equal to [code]0[/code] and must not exceed the number of existing points in the line. See [method get_point_count].
- </description>
- </method>
- <method name="clear_points">
- <return type="void" />
- <description>
- Removes all points from the curve.
- </description>
- </method>
- <method name="get_baked_length" qualifiers="const">
- <return type="float" />
- <description>
- Returns the total length of the curve, based on the cached points. Given enough density (see [member bake_interval]), it should be approximate enough.
- </description>
- </method>
- <method name="get_baked_points" qualifiers="const">
- <return type="PoolVector3Array" />
- <description>
- Returns the cache of points as a [PoolVector3Array].
- </description>
- </method>
- <method name="get_baked_tilts" qualifiers="const">
- <return type="PoolRealArray" />
- <description>
- Returns the cache of tilts as a [PoolRealArray].
- </description>
- </method>
- <method name="get_baked_up_vectors" qualifiers="const">
- <return type="PoolVector3Array" />
- <description>
- Returns the cache of up vectors as a [PoolVector3Array].
- If [member up_vector_enabled] is [code]false[/code], the cache will be empty.
- </description>
- </method>
- <method name="get_closest_offset" qualifiers="const">
- <return type="float" />
- <argument index="0" name="to_point" type="Vector3" />
- <description>
- Returns the closest offset to [code]to_point[/code]. This offset is meant to be used in [method interpolate_baked] or [method interpolate_baked_up_vector].
- [code]to_point[/code] must be in this curve's local space.
- </description>
- </method>
- <method name="get_closest_point" qualifiers="const">
- <return type="Vector3" />
- <argument index="0" name="to_point" type="Vector3" />
- <description>
- Returns the closest baked point (in curve's local space) to [code]to_point[/code].
- [code]to_point[/code] must be in this curve's local space.
- </description>
- </method>
- <method name="get_point_count" qualifiers="const">
- <return type="int" />
- <description>
- Returns the number of points describing the curve.
- </description>
- </method>
- <method name="get_point_in" qualifiers="const">
- <return type="Vector3" />
- <argument index="0" name="idx" type="int" />
- <description>
- Returns the position of the control point leading to the vertex [code]idx[/code]. The returned position is relative to the vertex [code]idx[/code]. If the index is out of bounds, the function sends an error to the console, and returns [code](0, 0, 0)[/code].
- </description>
- </method>
- <method name="get_point_out" qualifiers="const">
- <return type="Vector3" />
- <argument index="0" name="idx" type="int" />
- <description>
- Returns the position of the control point leading out of the vertex [code]idx[/code]. The returned position is relative to the vertex [code]idx[/code]. If the index is out of bounds, the function sends an error to the console, and returns [code](0, 0, 0)[/code].
- </description>
- </method>
- <method name="get_point_position" qualifiers="const">
- <return type="Vector3" />
- <argument index="0" name="idx" type="int" />
- <description>
- Returns the position of the vertex [code]idx[/code]. If the index is out of bounds, the function sends an error to the console, and returns [code](0, 0, 0)[/code].
- </description>
- </method>
- <method name="get_point_tilt" qualifiers="const">
- <return type="float" />
- <argument index="0" name="idx" type="int" />
- <description>
- Returns the tilt angle in radians for the point [code]idx[/code]. If the index is out of bounds, the function sends an error to the console, and returns [code]0[/code].
- </description>
- </method>
- <method name="interpolate" qualifiers="const">
- <return type="Vector3" />
- <argument index="0" name="idx" type="int" />
- <argument index="1" name="t" type="float" />
- <description>
- Returns the position between the vertex [code]idx[/code] and the vertex [code]idx + 1[/code], where [code]t[/code] controls if the point is the first vertex ([code]t = 0.0[/code]), the last vertex ([code]t = 1.0[/code]), or in between. Values of [code]t[/code] outside the range ([code]0.0 >= t <=1[/code]) give strange, but predictable results.
- If [code]idx[/code] is out of bounds it is truncated to the first or last vertex, and [code]t[/code] is ignored. If the curve has no points, the function sends an error to the console, and returns [code](0, 0, 0)[/code].
- </description>
- </method>
- <method name="interpolate_baked" qualifiers="const">
- <return type="Vector3" />
- <argument index="0" name="offset" type="float" />
- <argument index="1" name="cubic" type="bool" default="false" />
- <description>
- Returns a point within the curve at position [code]offset[/code], where [code]offset[/code] is measured as a distance in 3D units along the curve.
- To do that, it finds the two cached points where the [code]offset[/code] lies between, then interpolates the values. This interpolation is cubic if [code]cubic[/code] is set to [code]true[/code], or linear if set to [code]false[/code].
- Cubic interpolation tends to follow the curves better, but linear is faster (and often, precise enough).
- </description>
- </method>
- <method name="interpolate_baked_up_vector" qualifiers="const">
- <return type="Vector3" />
- <argument index="0" name="offset" type="float" />
- <argument index="1" name="apply_tilt" type="bool" default="false" />
- <description>
- Returns an up vector within the curve at position [code]offset[/code], where [code]offset[/code] is measured as a distance in 3D units along the curve.
- To do that, it finds the two cached up vectors where the [code]offset[/code] lies between, then interpolates the values. If [code]apply_tilt[/code] is [code]true[/code], an interpolated tilt is applied to the interpolated up vector.
- If the curve has no up vectors, the function sends an error to the console, and returns [code](0, 1, 0)[/code].
- </description>
- </method>
- <method name="interpolatef" qualifiers="const">
- <return type="Vector3" />
- <argument index="0" name="fofs" type="float" />
- <description>
- Returns the position at the vertex [code]fofs[/code]. It calls [method interpolate] using the integer part of [code]fofs[/code] as [code]idx[/code], and its fractional part as [code]t[/code].
- </description>
- </method>
- <method name="remove_point">
- <return type="void" />
- <argument index="0" name="idx" type="int" />
- <description>
- Deletes the point [code]idx[/code] from the curve. Sends an error to the console if [code]idx[/code] is out of bounds.
- </description>
- </method>
- <method name="set_point_in">
- <return type="void" />
- <argument index="0" name="idx" type="int" />
- <argument index="1" name="position" type="Vector3" />
- <description>
- Sets the position of the control point leading to the vertex [code]idx[/code]. If the index is out of bounds, the function sends an error to the console. The position is relative to the vertex.
- </description>
- </method>
- <method name="set_point_out">
- <return type="void" />
- <argument index="0" name="idx" type="int" />
- <argument index="1" name="position" type="Vector3" />
- <description>
- Sets the position of the control point leading out of the vertex [code]idx[/code]. If the index is out of bounds, the function sends an error to the console. The position is relative to the vertex.
- </description>
- </method>
- <method name="set_point_position">
- <return type="void" />
- <argument index="0" name="idx" type="int" />
- <argument index="1" name="position" type="Vector3" />
- <description>
- Sets the position for the vertex [code]idx[/code]. If the index is out of bounds, the function sends an error to the console.
- </description>
- </method>
- <method name="set_point_tilt">
- <return type="void" />
- <argument index="0" name="idx" type="int" />
- <argument index="1" name="tilt" type="float" />
- <description>
- Sets the tilt angle in radians for the point [code]idx[/code]. If the index is out of bounds, the function sends an error to the console.
- The tilt controls the rotation along the look-at axis an object traveling the path would have. In the case of a curve controlling a [PathFollow], this tilt is an offset over the natural tilt the [PathFollow] calculates.
- </description>
- </method>
- <method name="tessellate" qualifiers="const">
- <return type="PoolVector3Array" />
- <argument index="0" name="max_stages" type="int" default="5" />
- <argument index="1" name="tolerance_degrees" type="float" default="4" />
- <description>
- Returns a list of points along the curve, with a curvature controlled point density. That is, the curvier parts will have more points than the straighter parts.
- This approximation makes straight segments between each point, then subdivides those segments until the resulting shape is similar enough.
- [code]max_stages[/code] controls how many subdivisions a curve segment may face before it is considered approximate enough. Each subdivision splits the segment in half, so the default 5 stages may mean up to 32 subdivisions per curve segment. Increase with care!
- [code]tolerance_degrees[/code] controls how many degrees the midpoint of a segment may deviate from the real curve, before the segment has to be subdivided.
- </description>
- </method>
- </methods>
- <members>
- <member name="bake_interval" type="float" setter="set_bake_interval" getter="get_bake_interval" default="0.2">
- The distance in meters between two adjacent cached points. Changing it forces the cache to be recomputed the next time the [method get_baked_points] or [method get_baked_length] function is called. The smaller the distance, the more points in the cache and the more memory it will consume, so use with care.
- </member>
- <member name="up_vector_enabled" type="bool" setter="set_up_vector_enabled" getter="is_up_vector_enabled" default="true">
- If [code]true[/code], the curve will bake up vectors used for orientation. This is used when [member PathFollow.rotation_mode] is set to [constant PathFollow.ROTATION_ORIENTED]. Changing it forces the cache to be recomputed.
- </member>
- </members>
- <constants>
- </constants>
- </class>
|