Files
tgcc-artest/Scripts/multi_mesh_instance_3d.gd
Matteo Sonaglioni f7b334b21c first commit
2026-03-10 23:54:57 +01:00

63 lines
2.1 KiB
GDScript

@tool
extends MultiMeshInstance3D
# Trascina qui la MeshInstance3D che rappresenta il volume della tua chioma
@export var mesh_volume: MeshInstance3D
# Clicca su questa casella nell'Inspector per generare le foglie
@export var genera_foglie: bool = false:
set(val):
if val:
popola_chioma()
genera_foglie = false # Resetta il pulsante
# Scala delle singole foglie
@export var scala_foglie: Vector3 = Vector3(1, 1, 1)
func popola_chioma():
if not mesh_volume or not mesh_volume.mesh:
print("Errore: Assegna una MeshInstance3D valida a 'Mesh Volume'.")
return
if not multimesh:
print("Errore: Il nodo MultiMeshInstance3D non ha una risorsa MultiMesh assegnata.")
return
# Assicurati che il formato sia 3D per posizioni, rotazioni e scale
multimesh.transform_format = MultiMesh.TRANSFORM_3D
var mdt = MeshDataTool.new()
# Crea i dati dalla prima superficie della mesh (indice 0)
mdt.create_from_surface(mesh_volume.mesh, 0)
var numero_facce = mdt.get_face_count()
multimesh.instance_count = numero_facce
print("Generazione di ", numero_facce, " foglie...")
for i in range(numero_facce):
# Ottieni i tre vertici che formano la faccia
var v1 = mdt.get_vertex(mdt.get_face_vertex(i, 0))
var v2 = mdt.get_vertex(mdt.get_face_vertex(i, 1))
var v3 = mdt.get_vertex(mdt.get_face_vertex(i, 2))
# Calcola il centro della faccia
var centro_faccia = (v1 + v2 + v3) / 3.0
# Crea una trasformazione con posizione, rotazione casuale e scala
var transform = Transform3D()
transform.origin = centro_faccia
# Rotazione casuale per un look naturale
transform = transform.rotated(Vector3.UP, randf() * TAU) # Rotazione attorno all'asse Y
transform = transform.rotated(Vector3.RIGHT, randf() * TAU) # Rotazione attorno all'asse X
transform = transform.rotated(Vector3.FORWARD, randf() * TAU) # Rotazione attorno all'asse Z
# Applica la scala
transform = transform.scaled(scala_foglie)
# Imposta la trasformazione per questa istanza nel MultiMesh
multimesh.set_instance_transform(i, transform)
print("Foglie generate con successo!")