עבודה עם Deformers

עבודה עם Deformers

Aspose.3D עבור .NET תומך בשתי מערכות עיוות: עיוות שלד via SkinDeformer and Bone, שמקשר שלד לרשת לצורך הנפשת דמויות, ו עיוות של מטרה מורפית via MorphTargetDeformer, שממזג בין צורות רשת מרובות.


שינוי שלד עם SkinDeformer

SkinDeformer מצרף קבוצה של עצמים Bone למשטח. כל עצם שלד מגדיר משקל לכל קודקוד שהוא משפיע עליו. המשטח מתעוות כאשר שינויי הטרנספורמציות של העצם מתרחשים.

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

אינדקסי הקודקודים שמועברים ל-SetWeight חייבים להיות אינדקסים תקינים במערך נקודות הבקרה של הרשת. המשקלים בדרך כלל מנורמלים כך שסכומם שווה ל-1.0 בכל העצמות המשפיעות על קודקוד.


דפורמציית Morph Target

MorphTargetDeformer ממזג את המשטח הבסיסי לעבר צורה אחת או יותר של מטרה. כל מטרה היא משטח נפרד עם אותה טופולוגיה אך עם מיקומי קודקודים שונים.

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תיאור
new SkinDeformer()צור משנה שלד כדי לצרף לרשת
skin.BonesIList<Bone> של עצמות במשנה זה
new Bone(name)צור עצם בשם
bone.SetWeight(vertexIndex, weight)הקצה משקל בלנד לקודקוד
bone.BoneTransformמטריצת הסטת תנוחת קשירה לעצם זה
new MorphTargetDeformer()צור morph target deformer
morph.ChannelsIList<MorphTargetChannel> של ערוצי ערבוב
new MorphTargetChannel(name)צור named morph channel
channel.ChannelWeightמשקל תערובת: 0.0 = בסיס, 1.0 = יעד
channel.SetWeight(target, weight)מגדיר את משקל התערובת עבור צורת יעד (target: Shape, weight: double)
mesh.Deformersאוסף של מעוותים על רשת

ראה גם

 עברית