Ciri-ciri dan Fungsi
Ciri-ciri dan Fungsi
Halaman ini meliputi setiap bidang ciri utama Aspose.3D 26.1.0 dengan contoh C# yang berfungsi.
Memuat dan Menyimpan Adegan
Scene.Open() memuatkan fail; Scene.Save() mengeksportnya. Format dikesan daripada sambungan fail:
using Aspose.ThreeD;
var scene = new Scene();
scene.Open("input.obj");
scene.Save("output.glb");Gunakan kilang statik Scene.FromFile() sebagai alternatif:
var scene = Scene.FromFile("input.fbx");
scene.Save("output.stl");Pilihan Khusus Format
Luluskan subkelas LoadOptions atau SaveOptions untuk kawalan terperinci:
using Aspose.ThreeD;
using Aspose.ThreeD.Formats;
var scene = new Scene();
scene.Open("model.obj", new ObjLoadOptions { FlipCoordinateSystem = true });
scene.Save("model.fbx");Kelas pilihan yang tersedia:
| Kelas | Arah | Ciri Utama |
|---|---|---|
ObjLoadOptions | Import | FlipCoordinateSystem, EnableMaterials, Scale |
ObjSaveOptions | Eksport | FlipCoordinateSystem, EnableMaterials, PointCloud |
FbxLoadOptions | Import | (tetapan lalai) |
GltfLoadOptions | Import | (tetapan lalai) |
GltfSaveOptions | Eksport | (tetapan lalai) |
StlLoadOptions | Import | (tetapan lalai) |
StlSaveOptions | Eksport | (tetapan lalai) |
ColladaLoadOptions | Import | FlipCoordinateSystem |
ColladaSaveOptions | Eksport | Indented, TransformStyle |
PlyLoadOptions | Import | (tetapan lalai) |
Membina Graf Adegan
Buat nod dan lampirkan entiti untuk membina 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-anak melalui node.ChildNodes dan entiti yang dilampirkan melalui node.Entity.
Mesh dan Primitif
Cipta Mesh secara programatik dengan titik kawalan 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 terbina dalam (Box, Sphere, Cylinder) boleh ditukar kepada Mesh:
var box = new Box(10, 10, 10);
Mesh boxMesh = box.ToMesh();Elemen Vertex
Lampirkan normals, UVs, dan vertex colours kepada geometri:
var normals = new VertexElementNormal(MappingMode.ControlPoint, ReferenceMode.Direct);
mesh.AddElement(normals);Jenis elemen vertex yang tersedia: VertexElementNormal, VertexElementUV, VertexElementVertexColor, VertexElementBinormal, VertexElementTangent.
Transformasi
Setiap Node membawa 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 kedudukan ruang-dunia melalui node.GlobalTransform.Matrix atau node.EvaluateGlobalTransform().
Bahan
Tetapkan bahan kepada nod 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 bahan: LambertMaterial, PhongMaterial, PbrMaterial.
Petua dan Amalan Terbaik
- Gunakan
Scene.FromFile()untuk pemuatan satu baris apabila anda tidak memerlukanLoadOptionskhusus - Tukar primitif kepada
MeshdenganToMesh()sebelum menambah elemen vertex - Gunakan
GltfSaveOptionsdengan sambungan.glbuntuk output binari mampat - Periksa
node.Entityuntuknullsebelum menukar — tidak semua nod membawa geometri - Gunakan
PolygonModifier.Triangulate()untuk menukar mesh kuad sebelum dieksport ke format hanya segitiga seperti STL
Isu Umum
| Masalah | Punca | Penyelesaian |
|---|---|---|
ImportException semasa dimuatkan | Fail tidak disokong atau rosak | Pastikan fail dapat dibuka dalam penonton 3D; semak format berada dalam senarai yang disokong |
| Bahan hilang selepas pemuatan OBJ | Fail .mtl tidak dijumpai | Letakkan fail .mtl di sebelah .obj atau tetapkan ObjLoadOptions.EnableMaterials = true |
| Ketidaksesuaian skala selepas import FBX | Sistem unit berbeza | Gunakan ObjLoadOptions.Scale atau terapkan Transform selepas dimuatkan |
Soalan Lazim
Bagaimana saya mengesan format fail yang tidak diketahui?
Gunakan FileFormat.Detect():
var format = FileFormat.Detect("unknown_file.bin");
Console.WriteLine(format.Extension);Bolehkah saya memuatkan dari stream dan bukannya laluan fail?
Ya. Scene.Open() menerima Stream:
using var stream = File.OpenRead("model.glb");
scene.Open(stream);Format mana yang menyokong import dan eksport?
OBJ, STL, glTF/GLB, FBX, COLLADA, dan 3MF menyokong kedua-dua arah. PLY hanya menyokong import (pengekspor PLY tidak disambungkan).
Ringkasan Rujukan API
| Class / Method | Description |
|---|---|
Scene | Bekas adegan 3D peringkat atas |
Scene.Open() | Muat fail 3D mengikut laluan atau aliran |
Scene.Save() | Eksport adegan ke fail atau aliran |
Scene.FromFile() | Kilang statik untuk memuat dan mengembalikan Scene |
Node | Node hierarki adegan yang memegang entiti dan transformasi |
Node.CreateChildNode() | Cipta dan lampirkan node anak |
Mesh | Mesh poligon dengan titik kawalan dan senarai muka |
Mesh.CreatePolygon() | Takrifkan muka poligon mengikut indeks bucu |
Box / Sphere / Cylinder | Primitif parametrik terbina dalam |
Transform | Terjemahan, putaran, dan skala setempat |
FileFormat | Pendaftaran dan pengesan untuk format yang disokong |
LambertMaterial / PhongMaterial / PbrMaterial | Jenis bahan untuk pelapisan |