first commit
This commit is contained in:
47
Scripts/Leaf_Test1.gd
Normal file
47
Scripts/Leaf_Test1.gd
Normal file
@@ -0,0 +1,47 @@
|
||||
@tool
|
||||
extends MultiMeshInstance3D
|
||||
|
||||
@export var mesh_volume: MeshInstance3D : # Trascina qui il tuo volume low poly
|
||||
set(val):
|
||||
mesh_volume = val
|
||||
generate_leaves()
|
||||
|
||||
@export var scale_multiplier: float = 1.5 # Per rendere i piani grandi come in foto
|
||||
|
||||
func generate_leaves():
|
||||
if not mesh_volume or not mesh_volume.mesh:
|
||||
return
|
||||
|
||||
var mdt = MeshDataTool.new()
|
||||
mdt.create_from_surface(mesh_volume.mesh, 0)
|
||||
|
||||
var face_count = mdt.get_face_count()
|
||||
|
||||
# Inizializza il MultiMesh
|
||||
multimesh.instance_count = face_count
|
||||
|
||||
for i in range(face_count):
|
||||
# 1. Trova il centro della 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))
|
||||
var center = (v1 + v2 + v3) / 3.0
|
||||
|
||||
# 2. Ottieni la normale della faccia per orientare il piano
|
||||
var normal = mdt.get_face_normal(i)
|
||||
|
||||
# 3. Crea la trasformazione
|
||||
# Usiamo 'look_at' per far sì che il piano sia parallelo alla faccia
|
||||
var pos = center
|
||||
var target = pos + normal
|
||||
var xform = Transform3D().looking_at(normal, Vector3.UP)
|
||||
|
||||
# Applichiamo posizione e scala
|
||||
xform.origin = pos
|
||||
xform = xform.scaled(Vector3.ONE * scale_multiplier)
|
||||
|
||||
# 4. Applica al MultiMesh
|
||||
multimesh.set_instance_transform(i, xform)
|
||||
|
||||
# Opzionale: nascondi il volume originale se vuoi vedere solo i piani
|
||||
# mesh_volume.visible = false
|
||||
Reference in New Issue
Block a user