使用 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) | 为顶点分配混合权重 |
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
- 使用场景实体 — 将变形器附加到场景节点