Arbeiten mit Deformern

Arbeiten mit Deformern

Aspose.3D für .NET unterstützt zwei Deformationssysteme: Skelettdeformation via SkinDeformer and Bone, die ein Skelett an ein Mesh für Charakteranimation bindet, und Morphziel-Deformation via MorphTargetDeformer, die zwischen mehreren Mesh-Formen interpoliert.


Skeletale Deformation mit SkinDeformer

Ein SkinDeformer verbindet eine Menge von Bone-Objekten mit einem Mesh. Jeder Knochen definiert ein Gewicht für jeden von ihm beeinflussten Vertex. Das Mesh verformt sich, wenn sich die Transformationen des Knochens ändern.

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-Indizes, die an SetWeight übergeben werden, müssen gültige Indizes im Control-Points-Array des Meshes sein. Gewichte werden typischerweise normalisiert, sodass sie über alle Knochen, die einen Vertex beeinflussen, 1,0 ergeben.


Morph-Target-Deformation

MorphTargetDeformer blendet das Basismesh zu einer oder mehreren Zielformen. Jeder Ziel ist ein separates Mesh mit derselben Topologie, aber unterschiedlichen Vertex-Positionen.

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

MemberBeschreibung
new SkinDeformer()Erstelle einen Skelett-Deformer, den du an ein Mesh anhängst
skin.BonesIList<Bone> von Knochen in diesem Deformer
new Bone(name)Erstelle einen benannten Knochen
bone.SetWeight(vertexIndex, weight)Weise einem Vertex ein Blend-Gewicht zu
bone.BoneTransformBind-Pose-Offset-Matrix für diesen Knochen
new MorphTargetDeformer()Erstelle einen Morph-Target-Deformer
morph.ChannelsIList<MorphTargetChannel> von Blend-Kanälen
new MorphTargetChannel(name)Erstelle einen benannten Morph-Kanal
channel.ChannelWeightBlend-Gewicht: 0.0 = Basis, 1.0 = Ziel
channel.SetWeight(target, weight)Setzt das Blend-Gewicht für eine Zielform (target: Shape, weight: double)
mesh.DeformersSammlung von Deformern auf einem Mesh

Siehe auch

 Deutsch