Deformers ile Çalışma
Deformerlara Çalışmak
Aspose.3D for .NET iki deformasyon sistemi destekler: iskelet deformasyonu via SkinDeformer and Bone, bir iskeleti karakter animasyonu için bir mesh’e bağlayan ve morf hedef deformasyonu via MorphTargetDeformer, birden fazla mesh şekli arasında karıştıran.
SkinDeformer ile Skeletal Deformation
Bir SkinDeformer, bir dizi Bone nesnesini bir mesh’e bağlar. Her kemik, etkilediği her vertex için bir ağırlık tanımlar. Kemik dönüşümleri değiştiğinde mesh deform olur.
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);Vertex indeksleri
SetWeight‘a gönderildiğinde, mesh’in control-points dizisinde geçerli indeksler olmalıdır. Weights genellikle normalize edilir, böylece bir verteksi etkileyen tüm kemikler arasında toplamı 1.0 olur.
Morf Hedef Deformasyonu
MorphTargetDeformer, temel mesh’i bir veya daha fazla hedef şekle doğru karıştırır. Her hedef, aynı topolojiye sahip ancak farklı vertex konumlarına sahip ayrı bir mesh’tir.
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 | Açıklama |
|---|---|
new SkinDeformer() | Bir mesh’e bağlamak için iskelet deformer’ı oluşturun |
skin.Bones | Bu deformer’daki kemiklerin IList<Bone> |
new Bone(name) | İsimli bir kemik oluştur |
bone.SetWeight(vertexIndex, weight) | Bir vertex’e blend ağırlığı ata |
bone.BoneTransform | Bu kemik için bind-pose offset matrisi |
new MorphTargetDeformer() | Bir morph target deformer oluştur |
morph.Channels | IList<MorphTargetChannel> blend kanallarının |
new MorphTargetChannel(name) | Adlandırılmış bir morph kanal oluştur |
channel.ChannelWeight | Karıştırma ağırlığı: 0.0 = temel, 1.0 = hedef |
channel.SetWeight(target, weight) | Bir hedef şekil için karıştırma ağırlığını ayarlar (target: Shape, weight: double) |
mesh.Deformers | Mesh üzerindeki deformers koleksiyonu |
Ayrıca Bakınız
- Aspose.3D for .NET — Enterprise Documentation
- Scene Entities ile çalışmak — deformers’ı scene node’lara ekle