Trabalhando com Deformers
Trabalhando com Deformadores
Aspose.3D para .NET suporta dois sistemas de deformação: deformação esquelética via SkinDeformer and Bone, que liga um esqueleto a uma malha para animação de personagens, e deformação de alvo morph via MorphTargetDeformer, que mescla entre várias formas de malha.
Deformação Esquelética com SkinDeformer
Um SkinDeformer anexa um conjunto de objetos Bone a uma malha. Cada osso define um peso para cada vértice que influencia. A malha se deforma quando as transformações do osso mudam.
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);Os índices de vértice passados para
SetWeightdevem ser índices válidos no array de pontos de controle da malha. Os pesos são tipicamente normalizados de modo que somem 1.0 em todos os ossos que influenciam um vértice.
Deformação de Alvo Morph
MorphTargetDeformer mescla a malha base em direção a uma ou mais formas alvo. Cada alvo é uma malha separada com a mesma topologia, mas com posições de vértices diferentes.
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 | Descrição |
|---|---|
new SkinDeformer() | Crie um deformador esquelético para anexar a uma malha |
skin.Bones | IList<Bone> de ossos neste deformador |
new Bone(name) | Crie um osso nomeado |
bone.SetWeight(vertexIndex, weight) | Atribua um blend weight a um vértice |
bone.BoneTransform | Matriz de deslocamento da pose de ligação para este osso |
new MorphTargetDeformer() | Criar um deformador de morph target |
morph.Channels | IList<MorphTargetChannel> de canais de mesclagem |
new MorphTargetChannel(name) | Criar um canal morph nomeado |
channel.ChannelWeight | Peso de mesclagem: 0.0 = base, 1.0 = alvo |
channel.SetWeight(target, weight) | Define o peso de mesclagem para uma forma alvo (target: Shape, weight: double) |
mesh.Deformers | Coleção de deformadores em uma malha |
Ver também
- Aspose.3D for .NET — Enterprise Documentation
- Trabalhando com Entidades de Cena — anexar deformadores aos nós da cena