ceiling ???
This commit is contained in:
@ -10,6 +10,7 @@ class_name SpaceRegion
|
||||
@export var height: float = 100.0
|
||||
@export var wall_texture: Texture2D
|
||||
@export var floor_texture: Texture2D
|
||||
@export var ceiling_texture: Texture2D
|
||||
|
||||
|
||||
func generate_geometry(space: Space) -> Node3D:
|
||||
@ -43,6 +44,12 @@ func _generate_geometry(space: Space, looked_from_inside: bool) -> Node3D:
|
||||
floor_material.albedo_texture = floor_texture
|
||||
mesh.surface_set_material(1, floor_material)
|
||||
|
||||
mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, _generate_ceiling_arrays(space))
|
||||
var ceiling_material := StandardMaterial3D.new()
|
||||
ceiling_material.albedo_texture = ceiling_texture
|
||||
ceiling_material.cull_mode = BaseMaterial3D.CULL_FRONT # todo: Don't require state change
|
||||
mesh.surface_set_material(2, ceiling_material)
|
||||
|
||||
geometry.mesh = mesh
|
||||
|
||||
for child in get_children():
|
||||
@ -124,3 +131,27 @@ func _generate_floor_arrays(space: Space) -> Array:
|
||||
arrays[Mesh.ARRAY_TEX_UV] = uvs
|
||||
|
||||
return arrays
|
||||
|
||||
|
||||
# todo: Reuse triangulation with the floor
|
||||
func _generate_ceiling_arrays(space: Space) -> Array:
|
||||
var triangulation := Geometry2D.triangulate_polygon(self.polygon)
|
||||
var vertices := PackedVector3Array()
|
||||
var uvs := PackedVector2Array()
|
||||
vertices.resize(triangulation.size())
|
||||
uvs.resize(triangulation.size())
|
||||
|
||||
for i in range(triangulation.size()):
|
||||
vertices[i] = Vector3(
|
||||
self.polygon[triangulation[i]].x * space.unit_scale,
|
||||
(elevation + height) * space.unit_scale,
|
||||
self.polygon[triangulation[i]].y * space.unit_scale,
|
||||
)
|
||||
uvs[i] = self.polygon[triangulation[i]] * space.unit_scale
|
||||
|
||||
var arrays := Array()
|
||||
arrays.resize(Mesh.ARRAY_MAX)
|
||||
arrays[Mesh.ARRAY_VERTEX] = vertices
|
||||
arrays[Mesh.ARRAY_TEX_UV] = uvs
|
||||
|
||||
return arrays
|
||||
|
Reference in New Issue
Block a user