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 SetWeight devem 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

MemberDescrição
new SkinDeformer()Crie um deformador esquelético para anexar a uma malha
skin.BonesIList<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.BoneTransformMatriz de deslocamento da pose de ligação para este osso
new MorphTargetDeformer()Criar um deformador de morph target
morph.ChannelsIList<MorphTargetChannel> de canais de mesclagem
new MorphTargetChannel(name)Criar um canal morph nomeado
channel.ChannelWeightPeso 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.DeformersColeção de deformadores em uma malha

Ver também

 Português