Bekerja dengan Deformers

Bekerja dengan Deformers

Bekerja dengan Deformers

Aspose.3D untuk .NET mendukung dua sistem deformasi: deformasi rangka via SkinDeformer and Bone, yang mengikat rangka ke mesh untuk animasi karakter, dan deformasi target morf via MorphTargetDeformer, yang mencampur antara beberapa bentuk mesh.


Skeletal Deformation dengan SkinDeformer

Sebuah SkinDeformer menempelkan sekumpulan objek Bone ke sebuah mesh. Setiap tulang mendefinisikan bobot untuk setiap vertex yang dipengaruhinya. Mesh akan terdeformasi ketika transformasi tulang berubah.

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

Indeks verteks yang diberikan ke SetWeight harus merupakan indeks yang valid dalam array control-points mesh. Bobot biasanya dinormalisasi sehingga jumlahnya menjadi 1.0 di seluruh tulang yang memengaruhi sebuah verteks.


Deformasi Target Morf

MorphTargetDeformer menggabungkan mesh dasar menuju satu atau lebih bentuk target. Setiap target adalah mesh terpisah dengan topologi yang sama tetapi posisi vertex yang berbeda.

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

MemberDeskripsi
new SkinDeformer()Buat deformer rangka untuk dilampirkan ke mesh
skin.BonesIList<Bone> dari tulang di deformer ini
new Bone(name)Buat tulang bernama
bone.SetWeight(vertexIndex, weight)Tetapkan bobot blend ke sebuah vertex
bone.BoneTransformMatriks offset bind-pose untuk tulang ini
new MorphTargetDeformer()Buat deformer target morph
morph.ChannelsIList<MorphTargetChannel> dari saluran blend
new MorphTargetChannel(name)Buat saluran morph bernama
channel.ChannelWeightBobot blend: 0.0 = dasar, 1.0 = target
channel.SetWeight(target, weight)Mengatur bobot blend untuk bentuk target (target: Shape, weight: double)
mesh.DeformersKoleksi deformers pada mesh

Lihat Juga

 Bahasa Indonesia