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-битный, приведет к созданию террасного рельефа.