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 SetWeight muszą 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

MemberOpis
new SkinDeformer()Utwórz deformator szkieletowy, który można podłączyć do siatki
skin.BonesIList<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.BoneTransformMacierz offsetu w pozycji wiążącej dla tej kości
new MorphTargetDeformer()Utwórz deformator docelowego morfingu
morph.ChannelsIList<MorphTargetChannel> kanałów mieszania
new MorphTargetChannel(name)Utwórz nazwany kanał morph
channel.ChannelWeightWaga mieszania: 0.0 = podstawa, 1.0 = cel
channel.SetWeight(target, weight)Ustawia wagę mieszania dla docelowego kształtu (target: Shape, weight: double)
mesh.DeformersZbiór deformatorów na siatce

Zobacz także

 Polski