Dalam pos pengenalan, kami membincangkan apa Aspose.3D FOSS untuk .NET itu dan bagaimana untuk memulakan. Pos ini menyelami lebih dalam ciri utama yang membentuk perpustakaan, dengan contoh kod untuk setiap bahagian.
Semua contoh menganggap arahan using berikut:
using Aspose.ThreeD;
using Aspose.ThreeD.Entities;
using Aspose.ThreeD.Shading;
Dan pakej NuGet:
dotnet add package Aspose.3D.Converter --version 1.0.0
Graf Adegan
Graf adegan adalah struktur data teras. Sebuah Scene mengandungi satu RootNode, dan setiap Node boleh mempunyai nod anak dan satu lampiran Entity (seperti sebuah Mesh atau Camera).
Mencipta dan Menavigasi Nod
var scene = new Scene();
// Create a hierarchy
var parent = scene.RootNode.CreateChildNode("Parent");
var child1 = parent.CreateChildNode("Child1");
var child2 = parent.CreateChildNode("Child2");
// Navigate the tree
Console.WriteLine("Root children: " + scene.RootNode.ChildNodes.Count);
Console.WriteLine("Parent children: " + parent.ChildNodes.Count);
Melampirkan Entiti kepada Nod
Entiti adalah kandungan visual bagi adegan – mesh, kamera, dan lampu. Lampirkan mereka menggunakan CreateChildNode:
var scene = new Scene();
// Create a box primitive and attach it to the scene
var box = new Box(2, 2, 2);
var boxNode = scene.RootNode.CreateChildNode("BoxNode", box);
// Create a sphere primitive
var sphere = new Sphere(1);
var sphereNode = scene.RootNode.CreateChildNode("SphereNode", sphere);
scene.Save("primitives.gltf");
Primitif Binaan
Edisi .NET termasuk kelas bentuk parametrik yang menjana geometri tanpa pembinaan vertex secara manual:
| Primitif | Deskripsi |
|---|---|
Box | Kotak selari paksi dengan lebar, tinggi, dan kedalaman yang boleh dikonfigurasi |
Sphere | Sfera parametrik dengan jejari yang boleh dikonfigurasi |
Cylinder | Silinder parametrik dengan jejari atas/bawah yang boleh dikonfigurasi dan tinggi |
Primitif ini boleh dilampirkan secara langsung kepada nod atau ditukar menjadi a Mesh melalui ToMesh():
var cylinder = new Cylinder(1, 1, 2);
var mesh = cylinder.ToMesh();
Console.WriteLine("Vertices: " + mesh.ControlPoints.Count);
Console.WriteLine("Polygons: " + mesh.PolygonCount);
Pembinaan Mesh
Jika anda memerlukan kawalan penuh, bina mesh dari awal menggunakan titik kawalan dan definisi poligon:
var mesh = new Mesh();
// Add vertex positions
mesh.ControlPoints.Add(new Vector4(0, 0, 0, 1.0f));
mesh.ControlPoints.Add(new Vector4(1, 0, 0, 1.0f));
mesh.ControlPoints.Add(new Vector4(0.5f, 1, 0, 1.0f));
// Define a triangle face
mesh.CreatePolygon(0, 1, 2);
// Attach to a scene
var scene = new Scene();
scene.RootNode.CreateChildNode("triangle", mesh);
scene.Save("triangle.stl");
Titik kawalan menggunakan Vector4 dengan w komponen ditetapkan kepada 1.0f untuk kedudukan Kartesian standard. Poligon ditakrifkan dengan menghantar indeks titik kawalan kepada CreatePolygon().
Transformasi
Setiap Node mempunyai satu Transform sifat yang mengawal kedudukan tempatan, putaran, dan skala:
var scene = new Scene();
var node = scene.RootNode.CreateChildNode("Moved");
node.Transform.Translation = new FVector3(5, 0, 0);
node.Transform.Scale = new FVector3(2, 2, 2);
Pewarisan Transformasi
Transformasi digabungkan melalui hierarki adegan. Kedudukan ruang-dunia anak adalah hasil darab semua transformasi nenek-moyang:
var scene = new Scene();
var parent = scene.RootNode.CreateChildNode("Parent");
parent.Transform.Translation = new FVector3(10, 0, 0);
var child = parent.CreateChildNode("Child");
child.Transform.Translation = new FVector3(5, 0, 0);
// Child's world position is (15, 0, 0)
// Access via child.GlobalTransform
GlobalTransform
Sifat baca-sahaja GlobalTransform sifat pada setiap Node menyediakan matriks transformasi ruang-dunia yang dikira selepas menyusun semua transformasi nenek moyang. Akses hasilnya melalui node.GlobalTransform.Matrix.
Bahan
Pustaka ini merangkumi tiga jenis bahan dengan kerumitan yang semakin meningkat:
LambertMaterial
Bahan klasik yang hanya difus:
var material = new LambertMaterial("WoodMaterial");
material.Diffuse = new Vector4(0.6f, 0.4f, 0.2f, 1.0f);
material.Ambient = new Vector4(0.1f, 0.1f, 0.1f, 1.0f);
material.Transparency = 0.0f;
PhongMaterial
Memperluas Lambert dengan sorotan spekular:
var material = new PhongMaterial("ShinyMetal");
material.Specular = new Vector4(0.8f, 0.8f, 0.8f, 1.0f);
material.Shininess = 50.0f;
material.SpecularPower = 32.0f;
PbrMaterial
Bahan rendering berasaskan fizikal yang digunakan oleh glTF 2.0:
var material = new PbrMaterial("GoldPBR");
material.BaseColor = new Vector4(1.0f, 0.8f, 0.2f, 1.0f);
material.Metallic = 0.9f;
material.Roughness = 0.1f;
material.Occlusion = 1.0f;
Bahan PBR menyokong slot tekstur untuk base color, metallic/roughness, normal, emissive, dan occlusion maps melalui sifat laluan tekstur rentetan.
Utiliti Matematik
Pustaka ini menyediakan satu set primitif matematik untuk operasi ruang 3D:
Jenis Vektor
| Jenis | Komponen | Ketepatan | Penggunaan Umum |
|---|---|---|---|
Vector2 | X, Y | float | Koordinat tekstur UV |
Vector3 | X, Y, Z | float | Vektor 3-komponen tujuan umum |
Vector4 | X, Y, Z, W | float | Titik kawalan, normal |
FVector3 | X, Y, Z | float | Sifat transformasi (Terjemahan, Skala) |
FVector4 | X, Y, Z, W | float | Data elemen vertex |
Quaternion
Quaternion mewakili putaran tanpa gimbal lock:
var rotation = new Quaternion(0, 0, 0, 1); // Identity
node.Transform.Rotation = rotation;
Matrix4
4x4 transformation matrices for composing transforms:
// Matrix operations are used internally by Transform
// and GlobalTransform for world-space computation
BoundingBox
Kotak pembatas yang selari paksi untuk pertanyaan spatial:
// BoundingBox stores Minimum and Maximum FVector3 corners
// Used for frustum culling and spatial partitioning
Elemen Vertex
Mesh boleh membawa lapisan data per-vertex tambahan selain kedudukan:
- VertexElementNormal – normal permukaan untuk pengiraan pencahayaan.
- VertexElementUV – koordinat tekstur untuk memetakan imej ke atas geometri.
- VertexElementVertexColor – data warna RGBA per-vertex.
Setiap elemen vertex mempunyai MappingMode (per titik kawalan, per vertex poligon, atau per poligon) dan satu ReferenceMode (nilai langsung atau nilai berindeks).
Klip Animasi
The Scene kelas menyokong klip animasi bernama melalui CreateAnimationClip() dan GetAnimationClip(). Dalam edisi FOSS semasa, penciptaan dan pencarian klip animasi berfungsi, tetapi data bingkai kunci dan playback belum dilaksanakan.
var scene = new Scene();
var clip = scene.CreateAnimationClip("Walk");
// Retrieve by name
var found = scene.GetAnimationClip("Walk");
Console.WriteLine("Clip found: " + (found != null));
Apa Seterusnya
Pos seterusnya merangkumi bekerja dengan format fail 3D dalam .NET – panduan praktikal, format demi format kepada OBJ, STL, glTF, FBX, dan 3MF dengan pilihan muat/simpan dan corak penukaran pukal.