You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
societer/world/World3d.gd

44 lines
1.7 KiB

extends Spatial
func _ready():
draw_world()
func draw_world():
# for i in range(0, 1, 1):
# print(i)
var st = SurfaceTool.new()
st.begin(Mesh.PRIMITIVE_TRIANGLES)
# st.add_smooth_group(true)
for triangle in Global.terrain.get_triangles():
if not triangle.is_water():
if triangle.get_elevation() < 0:
print(triangle.get_elevation())
var factor = Vector3(1, 120, 1)
for edge in triangle.edges():
if triangle.get_elevation() > edge.opposite_triangle().get_elevation():
st.add_vertex(Vector3(edge.start().point3d().x, triangle.get_elevation(), edge.start().point3d().z) * factor)
st.add_vertex(Vector3(edge.end().point3d().x, triangle.get_elevation(), edge.end().point3d().z) * factor)
st.add_vertex(Vector3(edge.start().point3d().x, edge.opposite_triangle().get_elevation(), edge.start().point3d().z) * factor)
st.add_vertex(Vector3(edge.end().point3d().x, triangle.get_elevation(), edge.end().point3d().z) * factor)
st.add_vertex(Vector3(edge.end().point3d().x, edge.opposite_triangle().get_elevation(), edge.end().point3d().z) * factor)
st.add_vertex(Vector3(edge.start().point3d().x, edge.opposite_triangle().get_elevation(), edge.start().point3d().z) * factor)
for point in triangle.points():
st.add_vertex(Vector3(point.point3d().x, triangle.get_elevation(), point.point3d().z) * factor)
st.generate_normals()
# st.generate_tangents()
st.index()
# Commit to a mesh.
var mesh = st.commit()
var mi = MeshInstance.new()
mi.mesh = mesh
var material = load("res://world/world.material")
mi.set_surface_material(0, material)
mi.create_trimesh_collision()
mi.cast_shadow = GeometryInstance.SHADOW_CASTING_SETTING_ON
print(mi)
add_child(mi)