Fitur dan Fungsionalitas
Fitur dan Fungsionalitas
Halaman ini mencakup setiap area fitur utama dari Aspose.3D 26.1.0 dengan contoh C# yang berfungsi.
Memuat dan Menyimpan Scene
Scene.Open() memuat sebuah file; Scene.Save() mengekspornya. Format dideteksi dari ekstensi file:
using Aspose.ThreeD;
var scene = new Scene();
scene.Open("input.obj");
scene.Save("output.glb");Gunakan pabrik statis Scene.FromFile() sebagai alternatif:
var scene = Scene.FromFile("input.fbx");
scene.Save("output.stl");Opsi Spesifik Format
Berikan LoadOptions atau SaveOptions subkelas untuk kontrol yang lebih halus:
using Aspose.ThreeD;
using Aspose.ThreeD.Formats;
var scene = new Scene();
scene.Open("model.obj", new ObjLoadOptions { FlipCoordinateSystem = true });
scene.Save("model.fbx");Kelas opsi yang tersedia:
| Kelas | Arah | Properti Kunci |
|---|---|---|
ObjLoadOptions | Impor | FlipCoordinateSystem, EnableMaterials, Scale |
ObjSaveOptions | Ekspor | FlipCoordinateSystem, EnableMaterials, PointCloud |
FbxLoadOptions | Impor | (pengaturan default) |
GltfLoadOptions | Impor | (pengaturan default) |
GltfSaveOptions | Ekspor | (pengaturan default) |
StlLoadOptions | Impor | (pengaturan default) |
StlSaveOptions | Ekspor | (pengaturan default) |
ColladaLoadOptions | Impor | FlipCoordinateSystem |
ColladaSaveOptions | Ekspor | Indented, TransformStyle |
PlyLoadOptions | Impor | (pengaturan default) |
Membangun Graf Scene
Buat node dan lampirkan entitas untuk membangun hierarki:
var scene = new Scene();
var root = scene.RootNode;
var boxNode = root.CreateChildNode("box", new Box(5, 5, 5));
var sphereNode = root.CreateChildNode("sphere", new Sphere(3));Akses anak melalui node.ChildNodes dan entitas terlampir melalui node.Entity.
Mesh dan Primitive
Buat sebuah Mesh secara programatis dengan titik kontrol dan poligon:
// Mesh.ControlPoints uses Aspose.ThreeD.Utilities.Vector4
// (double-precision, lowercase fields: x, y, z, w)
using Aspose.ThreeD.Utilities;
var mesh = new Mesh("custom");
mesh.ControlPoints.Add(new Vector4(0.0, 0.0, 0.0)); // w defaults to 1.0
mesh.ControlPoints.Add(new Vector4(10.0, 0.0, 0.0));
mesh.ControlPoints.Add(new Vector4(10.0, 10.0, 0.0));
mesh.ControlPoints.Add(new Vector4(0.0, 10.0, 0.0));
mesh.CreatePolygon(0, 1, 2, 3);Primitif bawaan (Box, Sphere, Cylinder) dapat dikonversi menjadi Mesh:
var box = new Box(10, 10, 10);
Mesh boxMesh = box.ToMesh();Elemen Vertex
Lampirkan normal, UV, dan warna vertex ke geometri:
var normals = new VertexElementNormal(MappingMode.ControlPoint, ReferenceMode.Direct);
mesh.AddElement(normals);Tipe elemen vertex yang tersedia: VertexElementNormal, VertexElementUV, VertexElementVertexColor, VertexElementBinormal, VertexElementTangent.
Transform
Setiap Node membawa sebuah Transform dengan Translation, Rotation, dan Scale:
var node = scene.RootNode.CreateChildNode("moved", new Box());
node.Transform.Translation = new FVector3(10, 0, 5);
node.Transform.Scale = new FVector3(2, 2, 2);Baca posisi ruang-dunia melalui node.GlobalTransform.Matrix atau node.EvaluateGlobalTransform().
Material
Tetapkan material ke node untuk data shading:
var mat = new PhongMaterial("shiny");
mat.Diffuse = new Vector4(0.8, 0.2, 0.2, 1.0);
mat.Specular = new Vector4(1, 1, 1, 1);
mat.Shininess = 32;
scene.RootNode.CreateChildNode("red_box", new Box(), mat);Jenis material: LambertMaterial, PhongMaterial, PbrMaterial.
Tips dan Praktik Terbaik
- Gunakan
Scene.FromFile()untuk pemuatan satu baris ketika Anda tidak memerlukan kustomLoadOptions - Konversi primitif ke
MeshdenganToMesh()sebelum menambahkan elemen vertex - Gunakan
GltfSaveOptionsdengan sebuah.glbekstensi untuk output biner yang kompak - Periksa
node.Entityuntuknullsebelum casting — tidak setiap node membawa geometri - Gunakan
PolygonModifier.Triangulate()untuk mengonversi mesh kuad sebelum mengekspor ke format hanya segitiga seperti STL
Masalah Umum
| Masalah | Penyebab | Perbaikan |
|---|---|---|
ImportException saat memuat | File tidak didukung atau rusak | Pastikan file dapat dibuka di penampil 3D; periksa apakah formatnya ada dalam daftar yang didukung |
| Material tidak ada setelah memuat OBJ | .mtl file tidak ditemukan | Tempatkan .mtl file di sebelah .obj atau atur ObjLoadOptions.EnableMaterials = true |
| Skala tidak cocok setelah impor FBX | Sistem unit yang berbeda | Gunakan ObjLoadOptions.Scale atau terapkan sebuah Transform setelah memuat |
FAQ
Bagaimana cara saya mendeteksi format file yang tidak diketahui?
Gunakan FileFormat.Detect():
var format = FileFormat.Detect("unknown_file.bin");
Console.WriteLine(format.Extension);Apakah saya dapat memuat dari stream alih-alih jalur file?
Ya. Scene.Open() menerima sebuah Stream:
using var stream = File.OpenRead("model.glb");
scene.Open(stream);Format mana yang mendukung impor dan ekspor?
OBJ, STL, glTF/GLB, FBX, COLLADA, dan 3MF mendukung kedua arah. PLY hanya mendukung impor (pengekspor PLY belum terhubung).
Ringkasan Referensi API
| Kelas / Metode | Deskripsi |
|---|---|
Scene | Kontainer adegan 3D tingkat atas |
Scene.Open() | Muat file 3D dengan jalur atau aliran |
Scene.Save() | Ekspor adegan ke file atau aliran |
Scene.FromFile() | Fabrik statis untuk memuat dan mengembalikan sebuah Scene |
Node | Node hierarki scene yang memegang entitas dan transformasi |
Node.CreateChildNode() | Buat dan lampirkan node anak |
Mesh | Mesh poligon dengan titik kontrol dan daftar wajah |
Mesh.CreatePolygon() | Definisikan wajah poligon dengan indeks vertex |
Box / Sphere / Cylinder | Primitif parametrik bawaan |
Transform | Translasi, rotasi, dan skala lokal |
FileFormat | Registri dan detektor untuk format yang didukung |
LambertMaterial / PhongMaterial / PbrMaterial | Tipe material untuk shading |