Lucrul cu Deformers
Lucrul cu Deformeri
Aspose.3D pentru .NET acceptă două sisteme de deformare: deformare scheletică via SkinDeformer and Bone, care leagă un schelet de un mesh pentru animația personajului, și deformare morph target via MorphTargetDeformer, care face tranziții între mai multe forme de mesh.
Deformare scheletică cu SkinDeformer
Un SkinDeformer atașează un set de obiecte Bone la o rețea. Fiecare os definește o greutate pentru fiecare vârf pe care îl influențează. Rețeaua se deformează când transformările osului se schimbă.
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);Indicele de vârf transmise către
SetWeighttrebuie să fie indici valide în matricea de puncte de control a mesh-ului. Greutățile sunt de obicei normalizate astfel încât să însumeze 1.0 pentru toate oasele care influențează un vârf.
Deformare prin țintă morfă
MorphTargetDeformer amestecă rețeaua de bază spre una sau mai multe forme țintă. Fiecare țintă este o rețea separată cu aceeași topologie, dar cu poziții de vârf diferite.
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 | Descriere: |
|---|---|
new SkinDeformer() | Creează un deformer scheletic pentru a fi atașat la un mesh |
skin.Bones | IList<Bone> de oase în acest deformer |
new Bone(name) | Creează un os numit |
bone.SetWeight(vertexIndex, weight) | Atribuie o greutate de amestecare unui vertex |
bone.BoneTransform | Matricea de offset a poziției de legare pentru acest os |
new MorphTargetDeformer() | Creează un deformator de morph target |
morph.Channels | IList<MorphTargetChannel> de canale de amestecare |
new MorphTargetChannel(name) | Creează un canal morph numit |
channel.ChannelWeight | Greutate de amestecare: 0.0 = bază, 1.0 = țintă |
channel.SetWeight(target, weight) | Setează greutatea de amestecare pentru o formă țintă (target: Shape, weight: double) |
mesh.Deformers | Colecție de deformatoare pe un mesh |
Vezi și:
- Aspose.3D for .NET — Enterprise Documentation
- Lucrul cu entitățile scenei — atașează deformatoare la nodurile scenei