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 SetWeight devono 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

MemberDescrizione
new SkinDeformer()Crea un deformatore scheletrico da collegare a una mesh
skin.BonesIList<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.BoneTransformMatrice di offset bind-pose per questo osso
new MorphTargetDeformer()Crea un deformatore di target morph
morph.ChannelsIList<MorphTargetChannel> di canali di blend
new MorphTargetChannel(name)Crea un canale morph denominato
channel.ChannelWeightPeso 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.DeformersRaccolta di deformatori su una mesh

Vedi anche

 Italiano