Werken met Deformers
Werken met Deformers
Aspose.3D voor .NET ondersteunt twee deformatiesystemen: skeletdeformatie via SkinDeformer and Bone, die een skelet aan een mesh bindt voor karakteranimatie, en morph-doel deformatie via MorphTargetDeformer, die mengt tussen meerdere meshvormen.
Skeletdeformatie met SkinDeformer
Een SkinDeformer koppelt een set van Bone objecten aan een mesh. Elk bot definieert een gewicht voor elke vertex die het beïnvloedt. De mesh vervormt wanneer de transformaties van het bot veranderen.
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);Vertex-indexen die aan
SetWeightworden doorgegeven, moeten geldige indexen zijn in de array met controlepunten van de mesh. Gewichten worden doorgaans genormaliseerd zodat ze optellen tot 1,0 over alle botten die een vertex beïnvloeden.
Morph-doeldeformatie
MorphTargetDeformer mengt de basismesh naar een of meer doelvormen. Elk doel is een aparte mesh met dezelfde topologie maar verschillende vertexposities.
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 | Beschrijving |
|---|---|
new SkinDeformer() | Maak een skeletdeformer om aan een mesh te koppelen |
skin.Bones | IList<Bone> van botten in deze deformer |
new Bone(name) | Maak een benoemd bot |
bone.SetWeight(vertexIndex, weight) | Wijs een blend weight toe aan een vertex |
bone.BoneTransform | Bind-pose offset matrix voor dit bot |
new MorphTargetDeformer() | Maak een morph target deformer |
morph.Channels | IList<MorphTargetChannel> of blend channels |
new MorphTargetChannel(name) | Maak een genoemde morph channel |
channel.ChannelWeight | Blend weight: 0.0 = basis, 1.0 = doel |
channel.SetWeight(target, weight) | Stelt het blend weight in voor een doelvorm (target: Shape, weight: double) |
mesh.Deformers | Collectie van deformers op een mesh |
Zie ook
- Aspose.3D for .NET — Enterprise Documentation
- Werken met Scene Entities — attach deformers aan scene nodes