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
| Member | Beschreibung |
|---|---|
new SkinDeformer() | Erstelle einen Skelett-Deformer, den du an ein Mesh anhängst |
skin.Bones | IList<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.BoneTransform | Bind-Pose-Offset-Matrix für diesen Knochen |
new MorphTargetDeformer() | Erstelle einen Morph-Target-Deformer |
morph.Channels | IList<MorphTargetChannel> von Blend-Kanälen |
new MorphTargetChannel(name) | Erstelle einen benannten Morph-Kanal |
channel.ChannelWeight | Blend-Gewicht: 0.0 = Basis, 1.0 = Ziel |
channel.SetWeight(target, weight) | Setzt das Blend-Gewicht für eine Zielform (target: Shape, weight: double) |
mesh.Deformers | Sammlung von Deformern auf einem Mesh |
Siehe auch
- Aspose.3D for .NET — Enterprise Documentation
- Arbeiten mit Szenen-Entitäten — Deformer an Szenenknoten anhängen