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
Eredita: Resource < RefCounted < Object
Descrive una curva di Bézier nello spazio 3D.
Descrizione
Questa classe descrive una curva di Bézier nello spazio 3D. È usata principalmente per dare una forma a un Path3D, ma può essere campionata manualmente per altri motivi.
Mantiene una cache di punti precalcolati lungo la curva, per velocizzare ulteriori calcoli.
Proprietà
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
Metodi
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 |
Descrizioni delle proprietà
La distanza in metri tra due punti adiacenti memorizzati nella cache. Modificandola, la cache verrà ricalcolata la prossima volta che verrà chiamata la funzione get_baked_points() o get_baked_length(). Minore è la distanza, più punti ci saranno nella cache e più memoria consumerà, quindi usala con cautela.
Se true e la curva ha più di 2 punti di controllo, l'ultimo punto e il primo saranno collegati in un ciclo.
Il numero di punti che descrivono la curva.
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 🔗
Se true, la curva precalcolerà i vettori usati per l'orientamento. Questo viene usato quando PathFollow3D.rotation_mode è impostato su PathFollow3D.ROTATION_ORIENTED. Modificandolo, si forza il ricalcolo della cache.
Descrizioni dei metodi
void add_point(position: Vector3, in: Vector3 = Vector3(0, 0, 0), out: Vector3 = Vector3(0, 0, 0), index: int = -1) 🔗
Aggiunge un punto con la posizione position, relativa alla posizione della curva, con punti di controllo d'ingresso in e d'uscita out. Aggiunge il nuovo punto alla fine della lista dei punti.
Se viene specificato index, il nuovo punto viene inserito prima del punto esistente, identificato dall'indice index. Ogni punto esistente a partire da index viene spostato più in basso nella lista dei punti. L'indice deve essere maggiore o uguale a 0 e non deve superare il numero di punti esistenti nella riga. Vedi point_count.
void clear_points() 🔗
Rimuove tutti i punti dalla curva.
float get_baked_length() const 🔗
Restituisce la lunghezza totale della curva, in base ai punti memorizzati nella cache. Con una densità sufficiente (vedi bake_interval), dovrebbe essere abbastanza approssimativa.
PackedVector3Array get_baked_points() const 🔗
Restituisce i punti memorizzati nella cache come PackedVector3Array.
PackedFloat32Array get_baked_tilts() const 🔗
Restituisce le inclinazioni memorizzate nella cache come PackedFloat32Array.
PackedVector3Array get_baked_up_vectors() const 🔗
Restituisce i vettori alti memorizzati nella cache come PackedVector3Array.
Se up_vector_enabled è false, la cache sarà vuota.
float get_closest_offset(to_point: Vector3) const 🔗
Restituisce l'offset più vicino a to_point. Questo offset è pensato per essere utilizzato in sample_baked() o sample_baked_up_vector().
to_point deve essere nello spazio locale di questa curva.
Vector3 get_closest_point(to_point: Vector3) const 🔗
Restituisce il punto più vicino sui segmenti precalcolati (nello spazio locale della curva) a to_point.
to_point deve essere nello spazio locale di questa curva.
Vector3 get_point_in(idx: int) const 🔗
Restituisce la posizione del punto di controllo che porta verso il vertice all'indice idx. La posizione è relativa al vertice all'indice idx. Se l'indice è fuori dai limiti, la funzione invia un errore alla console e restituisce (0, 0, 0).
Vector3 get_point_out(idx: int) const 🔗
Restituisce la posizione del punto di controllo che porta fuori dal vertice all'indice idx. La posizione è relativa al vertice. Se l'indice è fuori dai limiti, la funzione invia un errore alla console e restituisce (0, 0, 0).
Vector3 get_point_position(idx: int) const 🔗
Restituisce la posizione del vertice all'indice idx. Se l'indice è fuori dai limiti, la funzione invia un errore alla console e restituisce (0, 0, 0).
float get_point_tilt(idx: int) const 🔗
Restituisce l'angolo di inclinazione in radianti per il punto all'indice idx. Se l'indice è fuori dai limiti, la funzione invia un errore alla console e restituisce 0.
Elimina il punto all'indice idx dalla curva. Invia un errore alla console se idx è fuori dai limiti.
Vector3 sample(idx: int, t: float) const 🔗
Restituisce la posizione tra il vertice all'indice idx e il vertice idx + 1, dove t controlla se il punto è il primo vertice (t = 0,0), l'ultimo vertice (t = 1,0) o intermedio. I valori di t al di fuori dell'intervallo (0,0 >= t <=1) danno risultati strani, ma prevedibili.
Se idx è fuori dai limiti, viene troncato al primo o all'ultimo vertice e t viene ignorato. Se la curva non ha punti, la funzione invia un errore alla console e restituisce (0, 0, 0).
Vector3 sample_baked(offset: float = 0.0, cubic: bool = false) const 🔗
Restituisce un punto all'interno della curva nella posizione offset, dove offset è misurato come distanza in unità 3D lungo la curva. Per farlo, trova i due punti memorizzati nella cache tra cui si trova offset, quindi interpola i valori. Questa interpolazione è cubica se cubic è impostato su true, o lineare se impostato su false.
L'interpolazione cubica tende a seguire meglio le curve, ma quella lineare è più veloce (e spesso, precisa abbastanza).
Vector3 sample_baked_up_vector(offset: float, apply_tilt: bool = false) const 🔗
Restituisce un vettore verso l'alto all'interno della curva nella posizione offset, dove offset è misurato come distanza in unità 3D lungo la curva. Per farlo, trova i due vettori up memorizzati nella cache tra cui si trova offset, quindi interpola i valori. Se apply_tilt è true, un'inclinazione interpolata viene applicata al vettore verso l'alto interpolato.
Se la curva non ha vettori verso l'alto, la funzione invia un errore alla console e restituisce (0, 1, 0).
Transform3D sample_baked_with_rotation(offset: float = 0.0, cubic: bool = false, apply_tilt: bool = false) const 🔗
Restituisce un Transform3D con origin come posizione del punto, basis.x come vettore laterale, basis.y come vettore verso l'alto, basis.z come vettore in avanti. Quando la lunghezza della curva è 0, non esiste un modo ragionevole per calcolare la rotazione, tutti i vettori sono allineati con gli assi dello spazio globale. Vedi anche sample_baked().
Vector3 samplef(fofs: float) const 🔗
Restituisce la posizione sul vertice fofs. Chiama sample() utilizzando la parte intera di fofs come indice (idx) e la sua parte frazionaria come t.
void set_point_in(idx: int, position: Vector3) 🔗
Imposta la posizione del punto di controllo che porta verso il vertice all'indice idx. Se l'indice è fuori dai limiti, la funzione invia un errore alla console. La posizione è relativa al vertice.
void set_point_out(idx: int, position: Vector3) 🔗
Imposta la posizione del punto di controllo che porta fuori dal vertice all'indice idx. Se l'indice è fuori dai limiti, la funzione invia un errore alla console. La posizione è relativa al vertice.
void set_point_position(idx: int, position: Vector3) 🔗
Imposta la posizione per il vertice all'indice idx. Se l'indice è fuori dai limiti, la funzione invia un errore alla console.
void set_point_tilt(idx: int, tilt: float) 🔗
Imposta l'angolo di inclinazione in radianti per il punto all'indice idx. Se l'indice è fuori dai limiti, la funzione invia un errore alla console.
L'inclinazione controlla la rotazione lungo l'asse di osservazione che avrebbe un oggetto percorrendo il percorso. Nel caso di una curva che controlla un PathFollow3D, questa inclinazione è una deviazione relativa all'inclinazione naturale calcolata dal PathFollow3D.
PackedVector3Array tessellate(max_stages: int = 5, tolerance_degrees: float = 4) const 🔗
Restituisce una lista di punti lungo la curva, con una densità di punti controllata dalla curvatura. Ovvero, le parti più curve avranno più punti rispetto alle parti più dritte.
Questa approssimazione crea segmenti dritti tra ogni punto, quindi suddivide tali segmenti finché la forma risultante non è abbastanza simile.
max_stages controlla quante suddivisioni può incontrare un segmento della curva prima di essere considerato abbastanza approssimativo. Ogni suddivisione divide il segmento a metà, quindi le 5 fasi predefinite possono significare fino a 32 suddivisioni per segmento della curva. Aumentare con cautela!
tolerance_degrees controlla di quanti gradi il punto medio di un segmento può deviare dalla curva reale, prima che il segmento debba essere suddiviso.
PackedVector3Array tessellate_even_length(max_stages: int = 5, tolerance_length: float = 0.2) const 🔗
Restituisce una lista di punti lungo la curva, con densità quasi uniforme. max_stages controlla quante suddivisioni può avere un segmento di curva prima di essere considerato abbastanza approssimativo. Ogni suddivisione divide il segmento a metà, quindi le 5 fasi predefiniti possono significare fino a 32 suddivisioni per segmento della curva. Aumentare con cautela!
tolerance_length controlla la distanza massima tra due punti adiacenti, prima che il segmento debba essere suddiviso.