Робота з 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 для всіх кісток, що впливають на вершину.
Деформація цільових морфів
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) | Призначте blend weight вершини |
bone.BoneTransform | Матриця зсуву у позиції прив’язки для цієї кістки |
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
- Робота з об’єктами сцени — прикріпити деформери до вузлів сцени