Работа с Deformers
Работа с деформаторами
Aspose.3D для .NET поддерживает две системы деформации: скелетная деформация via SkinDeformer and Bone, которые привязывают скелет к сетке для анимации персонажа, и морф-таргет деформация via MorphTargetDeformer, которая смешивает несколько форм сетки.
Скелетная деформация с SkinDeformer
SkinDeformer присоединяет набор объектов Bone к сетке. Каждая кость задаёт вес для каждой вершины, которую она влияет. Сетка деформируется, когда трансформы кости меняются.
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);Индексы вершин, передаваемые в
SetWeight, должны быть действительными индексами в массиве контрольных точек сетки. Веса обычно нормализуются так, чтобы их сумма была 1.0 для всех костей, влияющих на вершину.
Деформация Morph Target
MorphTargetDeformer смешивает базовую сетку к одной или нескольким целевым формам. Каждый целевой объект представляет собой отдельную сетку с той же топологией, но с другими позициями вершин.
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 | Описание: |
|---|---|
new SkinDeformer() | Создайте скелетный деформер для присоединения к мешу |
skin.Bones | IList<Bone> костей в этом деформере |
new Bone(name) | Создайте именованную кость |
bone.SetWeight(vertexIndex, weight) | Назначьте вес смешивания вершине |
bone.BoneTransform | Матрица смещения bind-pose для этой кости |
new MorphTargetDeformer() | Создать деформер целевого морфа |
morph.Channels | IList<MorphTargetChannel> каналов смешивания |
new MorphTargetChannel(name) | Создать именованный морф-канал |
channel.ChannelWeight | Вес смешения: 0.0 = базовый, 1.0 = целевой |
channel.SetWeight(target, weight) | Устанавливает вес смешивания для целевой формы (target: Shape, weight: double) |
mesh.Deformers | Коллекция деформеров на сетке |
См. также:
- Aspose.3D for .NET — Enterprise Documentation
- Работа с объектами сцены — присоединять деформеры к узлам сцены