Praca z Deformers
Praca z deformatorami
Aspose.3D dla .NET obsługuje dwa systemy deformacji: deformacja szkieletowa via SkinDeformer and Bone, które wiążą szkielet z siatką do animacji postaci, i deformacja docelowa morph via MorphTargetDeformer, które interpoluje pomiędzy wieloma kształtami siatki.
Deformacja szkieletowa przy użyciu SkinDeformer
SkinDeformer łączy zestaw obiektów Bone z siatką. Każda kość definiuje wagę dla każdego wierzchołka, na który ma wpływ. Siatka deformuje się, gdy zmieniają się przekształcenia kości.
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);Indeksy wierzchołków przekazywane do
SetWeightmuszą być prawidłowymi indeksami w tablicy punktów kontrolnych siatki. Wagi są zazwyczaj normalizowane tak, aby ich suma wynosiła 1,0 dla wszystkich kości wpływających na wierzchołek.
Deformacja docelowa morfingu
MorphTargetDeformer miesza bazową siatkę w kierunku jednego lub więcej kształtów docelowych. Każdy cel jest oddzielną siatką o tej samej topologii, ale z innymi pozycjami wierzchołków.
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 | Opis |
|---|---|
new SkinDeformer() | Utwórz deformator szkieletowy, który można podłączyć do siatki |
skin.Bones | IList<Bone> kości w tym deformatorze |
new Bone(name) | Utwórz kość o nazwie |
bone.SetWeight(vertexIndex, weight) | Przypisz blend weight do wierzchołka |
bone.BoneTransform | Macierz offsetu w pozycji wiążącej dla tej kości |
new MorphTargetDeformer() | Utwórz deformator docelowego morfingu |
morph.Channels | IList<MorphTargetChannel> kanałów mieszania |
new MorphTargetChannel(name) | Utwórz nazwany kanał morph |
channel.ChannelWeight | Waga mieszania: 0.0 = podstawa, 1.0 = cel |
channel.SetWeight(target, weight) | Ustawia wagę mieszania dla docelowego kształtu (target: Shape, weight: double) |
mesh.Deformers | Zbiór deformatorów na siatce |
Zobacz także
- Aspose.3D for .NET — Enterprise Documentation
- Praca z jednostkami sceny — dołącz deformatory do węzłów sceny