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.
Checking the stable version of the documentation...
Curve3D
Hérite de : Resource < RefCounted < Object
Décrit une courbe de Bézier dans l’espace 3D.
Description
Cette classe décrit une courbe de Bézier dans l'espace 3D. Elle est principalement utilisée pour donner une forme à un Path3D, mais peut être échantillonnée manuellement à d'autres fins.
Elle conserve un cache des points précalculés le long de la courbe, pour accélérer les calculs suivants.
Propriétés
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
Méthodes
void |
add_point(position: Vector3, in: Vector3 = Vector3(0, 0, 0), out: Vector3 = Vector3(0, 0, 0), index: int = -1) |
void |
|
get_baked_length() const |
|
get_baked_points() const |
|
get_baked_tilts() const |
|
get_baked_up_vectors() const |
|
get_closest_offset(to_point: Vector3) const |
|
get_closest_point(to_point: Vector3) const |
|
get_point_in(idx: int) const |
|
get_point_out(idx: int) const |
|
get_point_position(idx: int) const |
|
get_point_tilt(idx: int) const |
|
void |
remove_point(idx: int) |
sample_baked(offset: float = 0.0, cubic: bool = false) const |
|
sample_baked_up_vector(offset: float, apply_tilt: bool = false) const |
|
sample_baked_with_rotation(offset: float = 0.0, cubic: bool = false, apply_tilt: bool = false) const |
|
void |
set_point_in(idx: int, position: Vector3) |
void |
set_point_out(idx: int, position: Vector3) |
void |
set_point_position(idx: int, position: Vector3) |
void |
set_point_tilt(idx: int, tilt: float) |
tessellate(max_stages: int = 5, tolerance_degrees: float = 4) const |
|
tessellate_even_length(max_stages: int = 5, tolerance_length: float = 0.2) const |
Descriptions des propriétés
La distance en unités entre deux points de cache adjacents. Le changement force le cache à être recalculé la prochaine fois que la fonction get_baked_points() ou get_baked_length() sera appelée. Plus la distance est petite, plus il y aura de points dans le cache, et plus ça utilisera de mémoire, à utiliser donc avec soin.
Si true et que la courbe a plus de 2 points de contrôle, le dernier et le premier point seront connectés en une boucle.
Le nombre de points décrivant la courbe.
Vector3 point_{index}/in = Vector3(0, 0, 0) 🔗
The position of the control point leading to the vertex at index.
Note: index is a value in the 0 .. point_count - 1 range.
Vector3 point_{index}/out = Vector3(0, 0, 0) 🔗
The position of the control point leading out of the vertex at index.
Note: index is a value in the 0 .. point_count - 1 range.
Vector3 point_{index}/position = Vector3(0, 0, 0) 🔗
The position of for the vertex at index.
Note: index is a value in the 0 .. point_count - 1 range.
float point_{index}/tilt = 0.0 🔗
The tilt angle in radians for the point at index.
Note: index is a value in the 0 .. point_count - 1 range.
bool up_vector_enabled = true 🔗
Si true, la courbe pré-calcule les vecteurs utilisés pour l'orientation. Ceci est utilisé lorsque PathFollow3D.rotation_mode est défini à PathFollow3D.ROTATION_ORIENTED. Le changer force le cache à être recalculé.
Descriptions des méthodes
void add_point(position: Vector3, in: Vector3 = Vector3(0, 0, 0), out: Vector3 = Vector3(0, 0, 0), index: int = -1) 🔗
Ajoute un point avec la position spécifiée relative à la propre position de la courbe, avec des points de contrôle d'entrée in et de sortie out. Ajoute le nouveau point à la fin de la liste des points.
Si index est spécifié, le point est inséré juste avant le point existant à l'index identifié par index. Chaque point existant commençant à l'index index est décalé d'un vers le fond vers la liste des points. L'index doit être supérieur ou égal à 0 et ne doit pas dépasser le nombre de points existants dans la ligne. Voir point_count.
void clear_points() 🔗
Supprime tous les points de la courbe.
float get_baked_length() const 🔗
Renvoie la longueur totale de la courbe, à partir de la distance entre les points mis en cache. Si la densité est suffisante (voir bake_interval), cette longeur devrait être une approximation suffisante.
PackedVector3Array get_baked_points() const 🔗
Renvoie le cache des points en tant que PackedVector3Array.
PackedFloat32Array get_baked_tilts() const 🔗
Renvoie le cache des inclinaisons en tant que PackedFloat32Array.
PackedVector3Array get_baked_up_vectors() const 🔗
Renvoie le cache des vecteurs haut dans un PackedVector3Array.
Si up_vector_enabled vaut false, le cache sera vide.
float get_closest_offset(to_point: Vector3) const 🔗
Renvoie le décalage le plus proche de to_point. Ce décalage est destiné à être utilisé dans sample_baked() ou sample_baked_up_vector().
to_point doit être dans l'espace local de cette courbe.
Vector3 get_closest_point(to_point: Vector3) const 🔗
Renvoie le point en cache le plus proche (dans l'espace local de la courbe) de to_point.
to_point doit être dans l'espace local de la courbe.
Vector3 get_point_in(idx: int) const 🔗
Renvoie la position du point de contrôle menant au sommet d'index idx. La position renvoyée est relative au sommet d'index idx. Si l'index est hors limites, la fonction affiche une erreur dans la console, et renvoie (0, 0, 0).
Vector3 get_point_out(idx: int) const 🔗
Renvoie la position du point de contrôle partant du sommet d'index idx. La position renvoyée est relative au sommet d'index idx. Si l'index est hors limites, la fonction affiche une erreur dans la console, et renvoie (0, 0, 0).
Vector3 get_point_position(idx: int) const 🔗
Renvoie la position du sommet d'index idx. Si l'index est hors des limites, la fonction affiche une erreur dans la console, et renvoie (0, 0, 0).
float get_point_tilt(idx: int) const 🔗
Renvoie l'angle d'inclinaison en radians pour le point à l'index idx. Si l'index est hors des limites, la fonction affiche une erreur dans la console, et renvoie 0.
Supprime le point d'index idx de la courbe. Affiche une erreur dans la console si idx est hors limites.
Vector3 sample(idx: int, t: float) const 🔗
Renvoie la position entre le sommet d'index idx et le sommet d'index idx + 1, où t contrôle si le point est le premier sommet (t = 0,0), le dernier sommet (t = 1.0), ou entre ces deux valeurs. Les valeurs de t en dehors de l'intervalle (0.0 >= t <=1) donnent des résultats inattendus, mais prévisibles.
Si idx est hors limites, il est tronqué au premier ou au dernier sommet, et t est ignoré. Si la courbe n'a pas de points, la fonction affiche une erreur dans la console, et renvoie (0, 0, 0).
Vector3 sample_baked(offset: float = 0.0, cubic: bool = false) const 🔗
Renvoie un point dans la courbe à la position offset, où offset est mesuré en unités 3D le long de la courbe. Pour cela, elle trouve les deux points dans le cache où le offset se situe entre, puis interpole les valeurs. Cette interpolation est cubique si cubic vaut true, ou linéaire s'il vaut false.
L'interpolation cubique tend à mieux suivre les courbes, mais l'interpolation linéaire est plus rapide (et souvent bien assez précise).
Vector3 sample_baked_up_vector(offset: float, apply_tilt: bool = false) const 🔗
Renvoie un vecteur haut dans la courbe à la position offset, où offset est mesuré en unités 3D le long de la courbe. Pour cela, il trouve les deux vecteurs haut dans le cache où le offset se situe entre, puis interpole les valeurs. Si apply_tilt vaut true, une inclinaison interpolée est aussi appliquée au vecteur haut interpolé.
Si la courbe n'a pas de vecteurs, la fonction affiche une erreur dans la console, et renvoie (0, 1, 0).
Transform3D sample_baked_with_rotation(offset: float = 0.0, cubic: bool = false, apply_tilt: bool = false) const 🔗
Renvoie une Transform3D avec origin comme position du point, basis.x comme vecteur de côté, basis.y comme vecteur haut, basis.z comme vecteur avant. Lorsque la longueur de la courbe est de 0, il n'y a aucun moyen raisonnable de calculer la rotation, tous les vecteurs étant alignés sur les axes spatiaux globaux. Voir aussi sample_baked().
Vector3 samplef(fofs: float) const 🔗
Renvoie la position au sommet fofs. Cela appelle sample() en utilisant la partie entière de fofs pour idx, et sa partie décimale pour t.
void set_point_in(idx: int, position: Vector3) 🔗
Définit la position du point de contrôle menant au sommet d'index idx. Si l'index est hors des limites, la fonction affiche une erreur dans la console. La position est relative au sommet.
void set_point_out(idx: int, position: Vector3) 🔗
Définit la position du point de contrôle partant du sommet d'index idx. Si l'index est hors des limites, la fonction affiche une erreur dans la console. La position est relative au sommet.
void set_point_position(idx: int, position: Vector3) 🔗
Définit la position pour le sommet d'index idx. Si l'index est hors des limites, la fonction affiche une erreur dans la console.
void set_point_tilt(idx: int, tilt: float) 🔗
Définit l'angle d'inclinaison en radians pour le point d'index idx. Si l'index est hors limites, la fonction affiche une erreur dans la console.
L'inclinaison contrôle la rotation le long de l'axe avant qu'un objet parcourant la courbe aurait. Dans le cas d'une courbe contrôlant un PathFollow3D, cette inclinaison est un décalage sur l'inclinaison naturelle que calcule le PathFollow3D.
PackedVector3Array tessellate(max_stages: int = 5, tolerance_degrees: float = 4) const 🔗
Renvoie une liste de points le long de la courbe, avec une densité de point contrôlée par sa courbure. C'est-à-dire que les virages de la courbe auront plus de points que les segments bien droits.
Cette approximation génère des segments droits entre chaque point, puis divise ces segments jusqu'à ce que la nouvelle forme soit assez proche.
L'argument max_stages contrôle le nombre de divisions qu'un segment de courbe peut avoir avant qu'il soit considéré comme assez proche. Chaque division découpe le segment en deux, de sorte que les 5 étapes par défaut peuvent atteindre 32 divisions par segment de la courbe. Soyez donc prudent si vous augmentez cette valeur !
L'argument tolerance_degrees contrôle de quel angle, en degrés, le point du milieu d'un segment peut s'éloigner de la vraie courbe avant que le segment ne soit divisé.
PackedVector3Array tessellate_even_length(max_stages: int = 5, tolerance_length: float = 0.2) const 🔗
Renvoie une liste de points le long de la courbe, avec une densité presque uniforme. max_stages contrôle le nombre de subdivisions qu'un segment de courbe peut avoir avant qu'il ne soit considéré comme assez approximé. Chaque subdivision divise le segment en deux, de sorte que les 5 étapes par défaut peuvent atteindre jusqu'à 32 subdivisions par segment de courbe. À accroître avec soin !
tolerance_length contrôle la distance maximale entre deux points voisins, avant que le segment ne soit subdivisé.