ทำงานกับ Deformers

การทำงานกับ Deformers

Aspose.3D สำหรับ .NET รองรับสองระบบการบิดเบือน: การบิดรูปร่างแบบโครงกระดูก via SkinDeformer and Bone, ซึ่งผูกโครงกระดูกกับเมชเพื่อการเคลื่อนไหวของตัวละคร, และ การบิดรูปร่างแบบ morph target via MorphTargetDeformer, ซึ่งผสมผสานระหว่างรูปทรงเมชหลายรูปแบบ.


Skeletal Deformation กับ SkinDeformer

SkinDeformer เชื่อมต่อชุดของวัตถุ Bone เข้ากับ mesh. แต่ละโครงกระดูกกำหนดน้ำหนักสำหรับแต่ละเวอร์เท็กซ์ที่มันมีอิทธิพล. mesh จะบิดรูปเมื่อการแปลงของโครงกระดูกเปลี่ยนแปลง.

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 ต้องเป็นดัชนีที่ถูกต้องในอาร์เรย์ control-points ของเมช น้ำหนักโดยทั่วไปจะถูกทำให้เป็นค่าปกติเพื่อให้ผลรวมเป็น 1.0 สำหรับกระดูกทั้งหมดที่มีอิทธิพลต่อเวอร์เทกซ์หนึ่ง.


การบิดรูปทรงแบบ Morph Target

MorphTargetDeformer ผสม mesh พื้นฐานไปยังรูปทรงเป้าหมายหนึ่งหรือหลายรูป. แต่ละเป้าหมายเป็น mesh แยกที่มี topology เดียวกันแต่ตำแหน่งเวอร์เท็กซ์ต่างกัน.

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()Create a skeletal deformer to attach to a mesh
skin.BonesIList<Bone> ของกระดูกใน deformer นี้
new Bone(name)สร้างกระดูกที่ตั้งชื่อ
bone.SetWeight(vertexIndex, weight)กำหนด blend weight ให้กับ vertex
bone.BoneTransformเมทริกซ์ออฟเซ็ต Bind-pose สำหรับกระดูกนี้
new MorphTargetDeformer()สร้าง morph target deformer
morph.ChannelsIList<MorphTargetChannel> ของ blend channels
new MorphTargetChannel(name)สร้าง morph channel ที่มีชื่อ
channel.ChannelWeightน้ำหนักการผสม: 0.0 = พื้นฐาน, 1.0 = เป้าหมาย
channel.SetWeight(target, weight)กำหนดน้ำหนักการผสมสำหรับรูปร่างเป้าหมาย (target: Shape, weight: double)
mesh.Deformersคอลเลกชันของดีฟอร์เมอร์บนเมช

ดูเพิ่มเติม

 ภาษาไทย