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
Наследует: Shape3D < Resource < RefCounted < Object
Трехмерная карта высот, используемая для моделирования физических столкновений.
Описание
Трехмерная карта высот, предназначенная для использования в физике в качестве формы для CollisionShape3D. Этот тип чаще всего используется для ландшафта с вершинами, расположенными в сетке фиксированной ширины.
Карта высот представлена в виде двумерной сетки значений высот, которые представляют положение точек сетки по оси Y. Точки сетки расположены на расстоянии 1 единицы друг от друга по осям X и Z, а сетка центрирована в начале координат узла CollisionShape3D. Внутри каждый квадрат сетки разделен на два треугольника.
Из-за особенностей карты высот ее нельзя использовать для моделирования нависаний или пещер, что потребовало бы наличия нескольких вершин в одном и том же вертикальном положении. Проемы можно проделать через столкновение, присвоив @GDScript.NAN высоте нужных вершин (это поддерживается как в GodotPhysics3D, так и в Jolt Physics). Затем можно вставлять сетки с собственными отдельными коллизиями для создания нависающих элементов, пещер и так далее.
Производительность: HeightMapShape3D быстрее проверяет коллизии, чем ConcavePolygonShape3D, но значительно медленнее, чем примитивные формы, такие как BoxShape3D.
Форму коллизии карты высот также можно создать, используя ссылку на 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)
Примечание: Если вам нужно использовать интервал, отличный от 1 единицы, вы можете настроить Node3D.scale фигуры. Однако имейте в виду, что GodotPhysics3D не поддерживает неравномерное масштабирование: вам потребуется масштабировать ось Y на ту же величину, что и оси X и Z, а это значит, что значения в map_data должны быть предварительно масштабированы на величину, обратную этому масштабу. Также обратите внимание, что GodotPhysics3D вообще не поддерживает масштабирование для динамических тел (то есть, незамороженных узлов RigidBody3D); чтобы использовать масштабированный HeightMapShape3D с ними, вам потребуется использовать Jolt Physics.
Свойства
|
||
|
||
|
Методы
get_max_height() const |
|
get_min_height() const |
|
void |
update_map_data_from_image(image: Image, height_min: float, height_max: float) |
Описания свойств
PackedFloat32Array map_data = PackedFloat32Array(0, 0, 0, 0) 🔗
void set_map_data(value: PackedFloat32Array)
PackedFloat32Array get_map_data()
Данные карты высот. Размер массива должен быть равен map_width умноженному на 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.
Количество вершин в глубине карты высот. Изменение этого параметра приведет к изменению размера map_data.
Количество вершин в ширине карты высот. Изменение этого параметра приведет к изменению размера map_data.
Описания метода
float get_max_height() const 🔗
Возвращает наибольшее значение высоты, найденное в map_data. Пересчитывает только при изменении map_data.
float get_min_height() const 🔗
Возвращает наименьшее значение высоты, найденное в map_data. Пересчитывает только при изменении map_data.
void update_map_data_from_image(image: Image, height_min: float, height_max: float) 🔗
Обновляет map_data данными, считанными из ссылки Image. Автоматически изменяет размер карты высот map_width и map_depth для соответствия полной ширине и высоте изображения.
Изображение должно быть в Image.FORMAT_RF (32 бита), Image.FORMAT_RH (16 бит) или Image.FORMAT_R8 (8 бит).
Каждый пиксель изображения считывается как число с плавающей точкой в диапазоне от 0.0 (черный пиксель) до 1.0 (белый пиксель). Это значение диапазона переназначается на height_min и height_max для формирования окончательного значения высоты.
Примечание: Рекомендуется использовать карту высот с 16-битными или 32-битными данными, сохраненными в формате EXR или HDR. Использование 8-битных данных о высоте или формата, подобного PNG, который Godot импортирует как 8-битный, приведет к созданию террасного рельефа.