floor meshing
This commit is contained in:
@ -17,6 +17,28 @@ func _generate_geometry(space: Space, looked_from_inside: bool) -> Node3D:
|
||||
var geometry := MeshInstance3D.new()
|
||||
geometry.name = name
|
||||
|
||||
var mesh := ArrayMesh.new()
|
||||
mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, _generate_wall_arrays(space, looked_from_inside))
|
||||
mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, _generate_floor_arrays(space))
|
||||
|
||||
var wall_material := StandardMaterial3D.new()
|
||||
wall_material.albedo_texture = wall_texture
|
||||
mesh.surface_set_material(0, wall_material)
|
||||
|
||||
var floor_material := StandardMaterial3D.new()
|
||||
floor_material.albedo_texture = floor_texture
|
||||
mesh.surface_set_material(1, floor_material)
|
||||
|
||||
geometry.mesh = mesh
|
||||
|
||||
for child in get_children():
|
||||
if child is SpaceRegion:
|
||||
geometry.add_child(child._generate_geometry(space, not looked_from_inside))
|
||||
|
||||
return geometry
|
||||
|
||||
|
||||
func _generate_wall_arrays(space: Space, looked_from_inside: bool) -> Array:
|
||||
var polygon = self.polygon
|
||||
var polygon_pairs = Array()
|
||||
for i in range(-1, polygon.size() - 1):
|
||||
@ -31,22 +53,8 @@ func _generate_geometry(space: Space, looked_from_inside: bool) -> Node3D:
|
||||
arrays.resize(Mesh.ARRAY_MAX)
|
||||
arrays[Mesh.ARRAY_VERTEX] = vertices
|
||||
arrays[Mesh.ARRAY_TEX_UV] = uvs
|
||||
|
||||
var mesh := ArrayMesh.new()
|
||||
mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, arrays)
|
||||
|
||||
var new_material := preload("res://Scenes/RegionMaterial.tres")
|
||||
new_material.albedo_texture = wall_texture
|
||||
|
||||
mesh.surface_set_material(0, new_material)
|
||||
|
||||
geometry.mesh = mesh
|
||||
|
||||
for child in get_children():
|
||||
if child is SpaceRegion:
|
||||
geometry.add_child(child._generate_geometry(space, not looked_from_inside))
|
||||
|
||||
return geometry
|
||||
|
||||
return arrays
|
||||
|
||||
|
||||
func _push_line(space: Space,
|
||||
@ -79,3 +87,26 @@ func _push_line(space: Space,
|
||||
uvs.append(Vector2(1, 0))
|
||||
uvs.append(Vector2(0, 1))
|
||||
uvs.append(Vector2(0, 0))
|
||||
|
||||
|
||||
func _generate_floor_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 * 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