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
SetWeightphả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
| Member | Mô tả |
|---|---|
new SkinDeformer() | Tạo một bộ biến dạng xương để gắn vào mesh |
skin.Bones | IList<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.BoneTransform | Ma 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.Channels | IList<MorphTargetChannel> của các kênh blend |
new MorphTargetChannel(name) | Tạo kênh morph có tên |
channel.ChannelWeight | Trọ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.Deformers | Tập hợp các bộ biến dạng trên lưới |
Xem thêm
- Aspose.3D for .NET — Enterprise Documentation
- Làm việc với các thực thể cảnh — gắn các bộ biến dạng vào các nút cảnh