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
Hereda: Shape3D < Resource < RefCounted < Object
Una forma de mapa de altura 3D utilizada para la colisión física.
Descripción
Una forma de mapa de altura 3D, destinada a ser utilizada en físicas para proporcionar una forma a un CollisionShape3D. Este tipo se utiliza con mayor frecuencia para terrenos con vértices colocados en una cuadrícula de ancho fijo.
El mapa de altura se representa como una cuadrícula 2D de valores de altura, que representan la posición de los puntos de la cuadrícula en el eje Y. Los puntos de la cuadrícula están espaciados 1 unidad en los ejes X y Z, y la cuadrícula está centrada en el origen del nodo CollisionShape3D. Internamente, cada cuadrado de la cuadrícula se divide en dos triángulos.
Debido a la naturaleza del mapa de altura, no puede utilizarse para modelar salientes o cuevas, lo que requeriría múltiples vértices en la misma ubicación vertical. Se pueden hacer agujeros a través de la colisión asignando @GDScript.NAN a la altura de los vértices deseados (esto es compatible tanto con GodotPhysics3D como con Jolt Physics). Luego podrías insertar mallas con su propia colisión separada para proporcionar salientes, cuevas, etc.
Rendimiento: HeightMapShape3D es más rápido para comprobar colisiones que ConcavePolygonShape3D, pero es significativamente más lento que formas primitivas como BoxShape3D.
Una forma de colisión de mapa de altura también se puede construir utilizando una referencia Image:
var heightmap_texture = ResourceLoader.load("res://heightmap_image.exr")
var heightmap_image = heightmap_texture.get_image()
heightmap_image.convert(Image.FORMAT_RF)
var height_min = 0.0
var height_max = 10.0
update_map_data_from_image(heightmap_image, height_min, height_max)
Nota: Si necesitas usar un espaciado diferente a 1 unidad, puedes ajustar la Node3D.scale de la forma. Sin embargo, ten en cuenta que GodotPhysics3D no soporta el escalado no uniforme: necesitarás escalar el eje Y por la misma cantidad que los ejes X y Z, lo que significa que los valores en map_data deberán ser pre-escalados por el inverso de esa escala. También ten en cuenta que GodotPhysics3D no soporta escalado en absoluto para cuerpos dinámicos (es decir, nodos RigidBody3D no congelados); para usar un HeightMapShape3D escalado con estos, necesitarás usar Jolt Physics.
Propiedades
|
||
|
||
|
Métodos
get_max_height() const |
|
get_min_height() const |
|
void |
update_map_data_from_image(image: Image, height_min: float, height_max: float) |
Descripciones de Propiedades
PackedFloat32Array map_data = PackedFloat32Array(0, 0, 0, 0) 🔗
void set_map_data(value: PackedFloat32Array)
PackedFloat32Array get_map_data()
Datos del mapa de altura. El tamaño del array debe ser igual a map_width multiplicado por 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.
Número de vértices en la profundidad del mapa de altura. Cambiar esto redimensionará map_data.
Número de vértices en el ancho del mapa de altura. Cambiar esto redimensionará map_data.
Descripciones de Métodos
float get_max_height() const 🔗
Devuelve el valor de altura más grande encontrado en map_data. Se vuelve a calcular solo cuando cambia map_data.
float get_min_height() const 🔗
Devuelve el valor de altura más pequeño encontrado en map_data. Se vuelve a calcular solo cuando cambia map_data.
void update_map_data_from_image(image: Image, height_min: float, height_max: float) 🔗
Actualiza map_data con datos leídos de una referencia Image. Redimensiona automáticamente el mapa de altura map_width y map_depth para ajustarse al ancho y alto completo de la imagen.
La imagen debe estar en Image.FORMAT_RF (32 bits), Image.FORMAT_RH (16 bits) o Image.FORMAT_R8 (8 bits).
Cada píxel de la imagen se lee como un flotante en el rango de 0.0 (píxel negro) a 1.0 (píxel blanco). Este valor de rango se reasigna a height_min y height_max para formar el valor de altura final.
Nota: Se recomienda usar un mapa de altura con datos de 16 o 32 bits, almacenado en formato EXR o HDR. Usar datos de altura de 8 bits, o un formato como PNG que Godot importa como 8 bits, resultará en un terreno aterrazado.