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.

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à

PackedFloat32Array

map_data

PackedFloat32Array(0, 0, 0, 0)

int

map_depth

2

int

map_width

2

Metodi

float

get_max_height() const

float

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) 🔗

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.


int map_depth = 2 🔗

  • void set_map_depth(value: int)

  • int get_map_depth()

Number of vertices in the depth of the heightmap. Changing this will resize the map_data.


int map_width = 2 🔗

  • void set_map_width(value: int)

  • int get_map_width()

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.