Làm việc với Deformers

Làm việc với Deformers

Aspose.3D cho .NET hỗ trợ hai hệ thống biến dạng: biến dạng bộ xương via SkinDeformer and Bone, cho phép gắn bộ xương vào lưới cho hoạt ảnh nhân vật, và biến dạng mục tiêu morph via MorphTargetDeformer, cho phép pha trộn giữa nhiều hình dạng lưới.


Biến dạng xương với SkinDeformer

Một SkinDeformer gắn một tập hợp các đối tượng Bone vào lưới. Mỗi xương xác định một trọng số cho mỗi đỉnh mà nó ảnh hưởng. Lưới sẽ biến dạng khi các biến đổi của xương thay đổi.

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

Các chỉ mục đỉnh được truyền tới SetWeight phải là các chỉ mục hợp lệ trong mảng control-points của lưới. Các trọng số thường được chuẩn hoá sao cho tổng bằng 1.0 trên tất cả các xương ảnh hưởng đến một đỉnh.


Biến dạng mục tiêu Morph

MorphTargetDeformer pha trộn lưới gốc hướng tới một hoặc nhiều hình dạng mục tiêu. Mỗi mục tiêu là một lưới riêng biệt có cùng cấu trúc nhưng vị trí đỉnh khác nhau.

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

MemberMô tả
new SkinDeformer()Tạo một bộ biến dạng xương để gắn vào mesh
skin.BonesIList<Bone> của các xương trong bộ biến dạng này
new Bone(name)Tạo một xương có tên
bone.SetWeight(vertexIndex, weight)Gán blend weight cho một vertex
bone.BoneTransformMa trận offset bind-pose cho xương này
new MorphTargetDeformer()Tạo bộ biến dạng mục tiêu morph
morph.ChannelsIList<MorphTargetChannel> của các kênh blend
new MorphTargetChannel(name)Tạo kênh morph có tên
channel.ChannelWeightTrọng lượng pha trộn: 0.0 = cơ bản, 1.0 = mục tiêu
channel.SetWeight(target, weight)Đặt trọng lượng pha trộn cho hình dạng mục tiêu (target: Shape, weight: double)
mesh.DeformersTập hợp các bộ biến dạng trên lưới

Xem thêm

 Tiếng Việt