Lavorare con Deformers
Lavorare con i Deformatori
Aspose.3D per .NET supporta due sistemi di deformazione: deformazione scheletrica via SkinDeformer and Bone, che lega uno scheletro a una mesh per l’animazione dei personaggi, e deformazione morph target via MorphTargetDeformer, che sfuma tra più forme della mesh.
Skeletal Deformation con SkinDeformer
Un SkinDeformer collega un insieme di oggetti Bone a una mesh. Ogni osso definisce un peso per ogni vertice che influenza. La mesh si deforma quando le trasformazioni dell’osso cambiano.
using Aspose.ThreeD;
using Aspose.ThreeD.Deformers;
using Aspose.ThreeD.Entities;
var scene = new Scene();
var mesh = new Mesh("body");
Node meshNode = scene.RootNode.CreateChildNode("body", mesh);
// Create a SkinDeformer and attach it to the mesh
var skin = new SkinDeformer();
mesh.Deformers.Add(skin);
// Define a bone and assign per-vertex weights
var bone = new Bone("spine");
bone.BoneTransform = Matrix4.Identity;
bone.SetWeight(0, 1.0);
bone.SetWeight(1, 0.8);
skin.Bones.Add(bone);Gli indici dei vertici passati a
SetWeightdevono essere indici validi nell’array dei punti di controllo della mesh. I pesi sono tipicamente normalizzati in modo che sommino a 1.0 su tutte le ossa che influenzano un vertice.
Deformazione del Morph Target
MorphTargetDeformer sfuma la mesh di base verso una o più forme target. Ogni target è una mesh separata con la stessa topologia ma con diverse posizioni dei vertici.
using Aspose.ThreeD;
using Aspose.ThreeD.Deformers;
using Aspose.ThreeD.Entities;
var scene = new Scene();
var baseMesh = new Mesh("face_neutral");
scene.RootNode.CreateChildNode("face", baseMesh);
// Target shape
var smileMesh = new Shape("face_smile");
// Attach a MorphTargetDeformer
var morph = new MorphTargetDeformer();
baseMesh.Deformers.Add(morph);
// Add a morph channel targeting the smile mesh
var smileChannel = new MorphTargetChannel("smile");
smileChannel.Targets.Add(smileMesh);
morph.Channels.Add(smileChannel);
// At runtime, set the blend weight (0.0 = base, 1.0 = full target)
smileChannel.SetWeight(smileMesh, 0.75);API Quick Reference
| Member | Descrizione |
|---|---|
new SkinDeformer() | Crea un deformatore scheletrico da collegare a una mesh |
skin.Bones | IList<Bone> di ossa in questo deformatore |
new Bone(name) | Crea un osso nominato |
bone.SetWeight(vertexIndex, weight) | Assegna un peso di blend a un vertice |
bone.BoneTransform | Matrice di offset bind-pose per questo osso |
new MorphTargetDeformer() | Crea un deformatore di target morph |
morph.Channels | IList<MorphTargetChannel> di canali di blend |
new MorphTargetChannel(name) | Crea un canale morph denominato |
channel.ChannelWeight | Peso di blend: 0.0 = base, 1.0 = target |
channel.SetWeight(target, weight) | Imposta il peso di blend per una forma target (target: Shape, weight: double) |
mesh.Deformers | Raccolta di deformatori su una mesh |
Vedi anche
- Aspose.3D for .NET — Enterprise Documentation
- Lavorare con le entità della scena — collega i deformatori ai nodi della scena