first commit
This commit is contained in:
62
Scripts/multi_mesh_instance_3d.gd
Normal file
62
Scripts/multi_mesh_instance_3d.gd
Normal file
@@ -0,0 +1,62 @@
|
||||
@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!")
|
||||
Reference in New Issue
Block a user