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...
HeightMapShape3D
Eredita: Shape3D < Resource < RefCounted < Object
A 3D heightmap shape used for physics collision.
Descrizione
Una forma heightmap 3D, progettata per l'uso in fisica. Solitamente utilizzata per fornire una forma per una CollisionShape3D. Questo tipo è più comunemente utilizzato per terreni con vertici disposti in una griglia a larghezza fissa. Data la natura dell'heightmap, non si può utilizzare per modellare sporgenze o grotte, che richiederebbero più vertici nella stessa posizione verticale. È possibile creare fori assegnando @GDScript.NAN all'altezza dei vertici desiderati (ciò è supportato sia in GodotPhysics3D sia in Jolt Physics). È quindi possibile inserire mesh con una propria collisione separata per creare sporgenze, grotte e così via.
Prestazioni: HeightMapShape3D è più veloce per verificare le collisioni rispetto a ConcavePolygonShape3D, ma è notevolmente più lento di forme primitive come BoxShape3D.
Una forma di collisione heightmap può anche essere creata usando un Image di riferimento:
var heightmap_texture: Texture = ResourceLoader.load("res://heightmap_image.exr")
var heightmap_image: Image = heightmap_texture.get_image()
heightmap_image.convert(Image.FORMAT_RF)
var height_min: float = 0.0
var height_max: float = 10.0
update_map_data_from_image(heightmap_image, height_min, height_max)
Nota: Se è necessario utilizzare una spaziatura diversa da 1 unità, è possibile regolare la Node3D.scale della forma. Tuttavia, tenere presente che GodotPhysics3D non supporta il ridimensionamento non uniforme: bisognerà ridimensionare l'asse Y della stessa quantità degli assi X e Z, il che significa che i valori in map_data dovranno essere pre-scalati dall'inverso di tale scala. Si noti inoltre che GodotPhysics3D non supporta proprio il ridimensionamento per i corpi dinamici (ovvero, nodi RigidBody3D non congelati); per utilizzare un HeightMapShape3D ridimensionato con questi, sarà necessario utilizzare Jolt Physics.
Proprietà
|
||
|
||
|
Metodi
get_max_height() const |
|
get_min_height() const |
|
void |
update_map_data_from_image(image: Image, height_min: float, height_max: float) |
Descrizioni delle proprietà
PackedFloat32Array map_data = PackedFloat32Array(0, 0, 0, 0) 🔗
void set_map_data(value: PackedFloat32Array)
PackedFloat32Array get_map_data()
Heightmap data. The array's size must be equal to map_width multiplied by map_depth.
Note: The returned array is copied and any changes to it will not update the original property value. See PackedFloat32Array for more details.
Number of vertices in the depth of the heightmap. Changing this will resize the map_data.
Number of vertices in the width of the heightmap. Changing this will resize the map_data.
Descrizioni dei metodi
float get_max_height() const 🔗
Restituisce il valore di altezza più grande trovato in map_data. È ricalcolato solo quando map_data cambia.
float get_min_height() const 🔗
Restituisce il valore di altezza più piccolo trovato in map_data. È ricalcolato solo quando map_data cambia.
void update_map_data_from_image(image: Image, height_min: float, height_max: float) 🔗
Aggiorna map_data con i dati letti da un riferimento Image. Ridimensiona automaticamente map_width e map_depth della heightmap per adattarle alla larghezza e all'altezza complete dell'immagine.
L'immagine deve essere in formato Image.FORMAT_RF (32 bit), Image.FORMAT_RH (16 bit) o Image.FORMAT_R8 (8 bit).
Ogni pixel dell'immagine viene letto come float nell'intervallo da 0.0 (pixel nero) a 1.0 (pixel bianco). Questo valore di intervallo viene rimappato da height_min a height_max per formare il valore di altezza finale.
Nota: Si consiglia di utilizzare una heightmap con dati a 16 o 32 bit, memorizzati in formato EXR o HDR. Utilizzare dati di altezza a 8 bit, o in un formato come PNG che Godot importa come 8 bit, risulterà in terreno terrazzato.