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