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
Фігура 3D-карти висот, що використовується для фізичних зіткнень.
Опис
Фігура 3D-карти висот, призначена для використання у фізиці для надання форми CollisionShape3D. Цей тип найчастіше використовується для рельєфу з вершинами, розміщеними в сітці фіксованої ширини.
Карта висот представлена як 2D-сітка значень висоти, які відображають положення точок сітки на осі 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.
Властивості
PackedFloat32Array |
|
|
|
||
|
Методи
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-бітний, призведе до терасованого рельєфу.