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.

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à

float

bake_interval

0.2

bool

closed

false

int

point_count

0

Vector3

point_{index}/in

Vector3(0, 0, 0)

Vector3

point_{index}/out

Vector3(0, 0, 0)

Vector3

point_{index}/position

Vector3(0, 0, 0)

float

point_{index}/tilt

0.0

bool

up_vector_enabled

true

Metodi

void

add_point(position: Vector3, in: Vector3 = Vector3(0, 0, 0), out: Vector3 = Vector3(0, 0, 0), index: int = -1)

void

clear_points()

float

get_baked_length() const

PackedVector3Array

get_baked_points() const

PackedFloat32Array

get_baked_tilts() const

PackedVector3Array

get_baked_up_vectors() const

float

get_closest_offset(to_point: Vector3) const

Vector3

get_closest_point(to_point: Vector3) const

Vector3

get_point_in(idx: int) const

Vector3

get_point_out(idx: int) const

Vector3

get_point_position(idx: int) const

float

get_point_tilt(idx: int) const

void

remove_point(idx: int)

Vector3

sample(idx: int, t: float) const

Vector3

sample_baked(offset: float = 0.0, cubic: bool = false) const

Vector3

sample_baked_up_vector(offset: float, apply_tilt: bool = false) const

Transform3D

sample_baked_with_rotation(offset: float = 0.0, cubic: bool = false, apply_tilt: bool = false) const

Vector3

samplef(fofs: float) 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)

PackedVector3Array

tessellate(max_stages: int = 5, tolerance_degrees: float = 4) const

PackedVector3Array

tessellate_even_length(max_stages: int = 5, tolerance_length: float = 0.2) const


Descrizioni delle proprietà

float bake_interval = 0.2 🔗

  • void set_bake_interval(value: float)

  • float get_bake_interval()

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.


bool closed = false 🔗

  • void set_closed(value: bool)

  • bool is_closed()

Se true e la curva ha più di 2 punti di controllo, l'ultimo punto e il primo saranno collegati in un ciclo.


int point_count = 0 🔗

  • void set_point_count(value: int)

  • int get_point_count()

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 🔗

  • void set_up_vector_enabled(value: bool)

  • bool is_up_vector_enabled()

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.


void remove_point(idx: int) 🔗

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.