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
SetWeightharus 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
| Member | Deskripsi |
|---|---|
new SkinDeformer() | Buat deformer rangka untuk dilampirkan ke mesh |
skin.Bones | IList<Bone> dari tulang di deformer ini |
new Bone(name) | Buat tulang bernama |
bone.SetWeight(vertexIndex, weight) | Tetapkan bobot blend ke sebuah vertex |
bone.BoneTransform | Matriks offset bind-pose untuk tulang ini |
new MorphTargetDeformer() | Buat deformer target morph |
morph.Channels | IList<MorphTargetChannel> dari saluran blend |
new MorphTargetChannel(name) | Buat saluran morph bernama |
channel.ChannelWeight | Bobot blend: 0.0 = dasar, 1.0 = target |
channel.SetWeight(target, weight) | Mengatur bobot blend untuk bentuk target (target: Shape, weight: double) |
mesh.Deformers | Koleksi deformers pada mesh |
Lihat Juga
- Aspose.3D for .NET — Enterprise Documentation
- Bekerja dengan Entitas Adegan — lampirkan deformers ke node adegan