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

MemberAçıklama
new SkinDeformer()Bir mesh’e bağlamak için iskelet deformer’ı oluşturun
skin.BonesBu 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.BoneTransformBu kemik için bind-pose offset matrisi
new MorphTargetDeformer()Bir morph target deformer oluştur
morph.ChannelsIList<MorphTargetChannel> blend kanallarının
new MorphTargetChannel(name)Adlandırılmış bir morph kanal oluştur
channel.ChannelWeightKarış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.DeformersMesh üzerindeki deformers koleksiyonu

Ayrıca Bakınız

 Türkçe