Робота з 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.BonesIList<Bone> кісток у цьому деформері
new Bone(name)Створіть іменовану кістку
bone.SetWeight(vertexIndex, weight)Призначте blend weight вершини
bone.BoneTransformМатриця зсуву у позиції прив’язки для цієї кістки
new MorphTargetDeformer()Створити деформер цільового морфа
morph.ChannelsIList<MorphTargetChannel> змішуваних каналів
new MorphTargetChannel(name)Створити іменований морф-канал
channel.ChannelWeightВага змішування: 0.0 = база, 1.0 = ціль
channel.SetWeight(target, weight)Встановлює вагу змішування для цільової форми (target: Shape, weight: double)
mesh.DeformersКолекція деформерів на сітці

Дивіться також

 Українська