Planet-Miner/godot/PlanetMeshFace.gd

43 lines
1.3 KiB
GDScript

extends MeshInstance3D
@export var normal : Vector3
func regenerate_mesh():
var arrays := []
arrays.resize(Mesh.ARRAY_MAX)
var vertex_array := PackedVector3Array()
var uv_array := PackedVector2Array()
var normal_array := PackedVector3Array()
var index_array := PackedInt32Array()
var resolution := 5
var num_vertices : int = resolution * resolution
var num_indices : int = (resolution-1) * (resolution-1) * 6
vertex_array.resize(num_vertices)
normal_array.resize(num_vertices)
uv_array.resize(num_vertices)
index_array.resize(num_indices)
var tri_index : int = 0
var a_axis := Vector3(normal.y, normal.z, normal.z)
var b_axis : Vector3 = normal.cross(a_axis)
for y in range(resolution):
for x in range(resolution):
var i : int = x + y*resolution
var percent := Vector2(x,y) / (resolution-1)
var point_on_cube : Vector3 = normal + (percent.x - 0.5)*2.0*a_axis + (percent.y - 0.5)*2.0*b_axis
vertex_array[i] = point_on_cube
if x != resolution-1 and y != resolution-1:
index_array[tri_index + 2] = i
index_array[tri_index + 1] = i+resolution+1
index_array[tri_index] = i+resolution
index_array[tri_index + 5] = i
index_array[tri_index + 4] = i+1
index_array[tri_index + 3] = i+resolution+1
tri_index += 6