Lucrul cu Deformers

Lucrul cu Deformeri

Aspose.3D pentru .NET acceptă două sisteme de deformare: deformare scheletică via SkinDeformer and Bone, care leagă un schelet de un mesh pentru animația personajului, și deformare morph target via MorphTargetDeformer, care face tranziții între mai multe forme de mesh.


Deformare scheletică cu SkinDeformer

Un SkinDeformer atașează un set de obiecte Bone la o rețea. Fiecare os definește o greutate pentru fiecare vârf pe care îl influențează. Rețeaua se deformează când transformările osului se schimbă.

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);

Indicele de vârf transmise către SetWeight trebuie să fie indici valide în matricea de puncte de control a mesh-ului. Greutățile sunt de obicei normalizate astfel încât să însumeze 1.0 pentru toate oasele care influențează un vârf.


Deformare prin țintă morfă

MorphTargetDeformer amestecă rețeaua de bază spre una sau mai multe forme țintă. Fiecare țintă este o rețea separată cu aceeași topologie, dar cu poziții de vârf diferite.

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

MemberDescriere:
new SkinDeformer()Creează un deformer scheletic pentru a fi atașat la un mesh
skin.BonesIList<Bone> de oase în acest deformer
new Bone(name)Creează un os numit
bone.SetWeight(vertexIndex, weight)Atribuie o greutate de amestecare unui vertex
bone.BoneTransformMatricea de offset a poziției de legare pentru acest os
new MorphTargetDeformer()Creează un deformator de morph target
morph.ChannelsIList<MorphTargetChannel> de canale de amestecare
new MorphTargetChannel(name)Creează un canal morph numit
channel.ChannelWeightGreutate de amestecare: 0.0 = bază, 1.0 = țintă
channel.SetWeight(target, weight)Setează greutatea de amestecare pentru o formă țintă (target: Shape, weight: double)
mesh.DeformersColecție de deformatoare pe un mesh

Vezi și:

 Română