HeightMapShape3D
继承: Shape3D < Resource < RefCounted < Object
3D 高度图形状,用于物理碰撞。
描述
3D 高度图形状,旨在用于物理。常用于为 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)
属性
|
||
|
||
|
方法
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) 🔗
使用从 Image 引用读取的数据更新 map_data。自动调整高度图的宽度 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 位的格式,将导致阶梯状地形。