使用 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)为顶点分配混合权重
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网格上的变形器集合

另请参阅

 中文