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

MemberBeschrijving
new SkinDeformer()Maak een skeletdeformer om aan een mesh te koppelen
skin.BonesIList<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.BoneTransformBind-pose offset matrix voor dit bot
new MorphTargetDeformer()Maak een morph target deformer
morph.ChannelsIList<MorphTargetChannel> of blend channels
new MorphTargetChannel(name)Maak een genoemde morph channel
channel.ChannelWeightBlend weight: 0.0 = basis, 1.0 = doel
channel.SetWeight(target, weight)Stelt het blend weight in voor een doelvorm (target: Shape, weight: double)
mesh.DeformersCollectie van deformers op een mesh

Zie ook

 Nederlands