Arbeta med Deformers
Arbeta med Deformers
Aspose.3D för .NET stöder två deformationssystem: skeletald deformation via SkinDeformer and Bone, som binder ett skelett till ett mesh för karaktärsanimering, och morphmåldeformation via MorphTargetDeformer, som blandar mellan flera meshformer.
Skelettdeformation med SkinDeformer
En SkinDeformer fäster en uppsättning Bone-objekt till ett mesh. Varje ben definierar en vikt för varje vertex den påverkar. Meshen deformeras när benens transformationer förändras.
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);Vertexindex som skickas till
SetWeightmåste vara giltiga index i meshens kontrollpunktsarray. Vikter normaliseras vanligtvis så att de summerar till 1.0 över alla ben som påverkar en vertex.
Morph Target-deformation
MorphTargetDeformer blandar bas-meshen mot en eller flera målformer. Varje mål är ett separat mesh med samma topologi men olika vertex-positioner.
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 | Beskrivning |
|---|---|
new SkinDeformer() | Skapa en skelettdeformer för att fästa på ett mesh |
skin.Bones | IList<Bone> av ben i den här deformeraren |
new Bone(name) | Skapa ett namngivet ben |
bone.SetWeight(vertexIndex, weight) | Tilldela en blend weight till en vertex |
bone.BoneTransform | Bind-pose offsetmatris för detta ben |
new MorphTargetDeformer() | Skapa en morph-mål-deformer |
morph.Channels | IList<MorphTargetChannel> av blandningskanaler |
new MorphTargetChannel(name) | Skapa en namngiven morph-kanal |
channel.ChannelWeight | Blend weight: 0.0 = bas, 1.0 = mål |
channel.SetWeight(target, weight) | Ställer in blend weight för en målform (target: Shape, weight: double) |
mesh.Deformers | Samling av deformers på ett mesh |
Se även
- Aspose.3D for .NET — Enterprise Documentation
- Arbeta med scenentiteter — fäst deformers på scen-noder