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 SetWeight må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

MemberBeskrivning
new SkinDeformer()Skapa en skelettdeformer för att fästa på ett mesh
skin.BonesIList<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.BoneTransformBind-pose offsetmatris för detta ben
new MorphTargetDeformer()Skapa en morph-mål-deformer
morph.ChannelsIList<MorphTargetChannel> av blandningskanaler
new MorphTargetChannel(name)Skapa en namngiven morph-kanal
channel.ChannelWeightBlend 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.DeformersSamling av deformers på ett mesh

Se även

 Svenska