Tính năng và Chức năng
Tính năng và Chức năng
Trang này bao phủ mọi lĩnh vực tính năng chính của Aspose.3D 26.1.0 với các ví dụ C# hoạt động.
Tải và Lưu Cảnh
Scene.Open() tải một tệp; Scene.Save() xuất nó. Định dạng được phát hiện từ phần mở rộng của tệp:
using Aspose.ThreeD;
var scene = new Scene();
scene.Open("input.obj");
scene.Save("output.glb");Sử dụng nhà máy tĩnh Scene.FromFile() như một lựa chọn thay thế:
var scene = Scene.FromFile("input.fbx");
scene.Save("output.stl");Các tùy chọn riêng theo định dạng
Truyền LoadOptions hoặc SaveOptions các lớp con để kiểm soát chi tiết:
using Aspose.ThreeD;
using Aspose.ThreeD.Formats;
var scene = new Scene();
scene.Open("model.obj", new ObjLoadOptions { FlipCoordinateSystem = true });
scene.Save("model.fbx");Các lớp tùy chọn có sẵn:
| Lớp | Hướng | Thuộc tính chính |
|---|---|---|
ObjLoadOptions | Nhập | FlipCoordinateSystem, EnableMaterials, Scale |
ObjSaveOptions | Xuất | FlipCoordinateSystem, EnableMaterials, PointCloud |
FbxLoadOptions | Nhập | (cài đặt mặc định) |
GltfLoadOptions | Nhập | (cài đặt mặc định) |
GltfSaveOptions | Xuất | (cài đặt mặc định) |
StlLoadOptions | Nhập | (cài đặt mặc định) |
StlSaveOptions | Xuất | (cài đặt mặc định) |
ColladaLoadOptions | Nhập | FlipCoordinateSystem |
ColladaSaveOptions | Xuất | Indented, TransformStyle |
PlyLoadOptions | Nhập | (cài đặt mặc định) |
Xây dựng Đồ thị Cảnh
Tạo các nút và gắn thực thể để xây dựng một cây phân cấp:
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));Truy cập các phần tử con qua node.ChildNodes và thực thể đính kèm qua node.Entity.
Mesh và Primitives
Tạo một Mesh bằng cách lập trình với các điểm điều khiển và đa giác:
// 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);Các primitive tích hợp sẵn (Box, Sphere, Cylinder) có thể được chuyển đổi thành Mesh:
var box = new Box(10, 10, 10);
Mesh boxMesh = box.ToMesh();Các phần tử Vertex
Gắn các vector pháp tuyến, UV và màu đỉnh vào hình học:
var normals = new VertexElementNormal(MappingMode.ControlPoint, ReferenceMode.Direct);
mesh.AddElement(normals);Các loại phần tử đỉnh có sẵn: VertexElementNormal, VertexElementUV, VertexElementVertexColor, VertexElementBinormal, VertexElementTangent.
Biến đổi
Mỗi Node mang một Transform với Translation, Rotation, và 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);Đọc vị trí không gian thế giới qua node.GlobalTransform.Matrix hoặc node.EvaluateGlobalTransform().
Vật liệu
Gán vật liệu cho các nút để cung cấp dữ liệu 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);Các loại vật liệu: LambertMaterial, PhongMaterial, PbrMaterial.
Mẹo và Thực hành Tốt nhất
- Sử dụng
Scene.FromFile()để tải một dòng khi bạn không cần tùy chỉnhLoadOptions - Chuyển đổi các primitive sang
MeshvớiToMesh()trước khi thêm các phần tử đỉnh - Sử dụng
GltfSaveOptionsvới một.glbphần mở rộng cho đầu ra nhị phân gọn - Kiểm tra
node.Entitychonulltrước khi ép kiểu — không phải mọi nút đều chứa hình học - Sử dụng
PolygonModifier.Triangulate()để chuyển đổi lưới tứ giác trước khi xuất sang các định dạng chỉ hỗ trợ tam giác như STL
Các vấn đề thường gặp
| Vấn đề | Nguyên nhân | Khắc phục |
|---|---|---|
ImportException khi tải | Tệp không được hỗ trợ hoặc bị hỏng | Xác minh tệp mở được trong trình xem 3D; kiểm tra định dạng có nằm trong danh sách được hỗ trợ hay không |
| Thiếu vật liệu sau khi tải OBJ | .mtl không tìm thấy tệp | Đặt .mtl tệp bên cạnh .obj hoặc đặt ObjLoadOptions.EnableMaterials = true |
| Không khớp tỉ lệ sau khi nhập FBX | Các hệ đơn vị khác nhau | Sử dụng ObjLoadOptions.Scale hoặc áp dụng một Transform sau khi tải |
FAQ
Làm sao tôi có thể phát hiện định dạng của một tệp không xác định?
Sử dụng FileFormat.Detect():
var format = FileFormat.Detect("unknown_file.bin");
Console.WriteLine(format.Extension);Tôi có thể tải từ một Stream thay vì đường dẫn tệp không?
Có. Scene.Open() chấp nhận một Stream:
using var stream = File.OpenRead("model.glb");
scene.Open(stream);Các định dạng nào hỗ trợ cả nhập và xuất?
OBJ, STL, glTF/GLB, FBX, COLLADA và 3MF hỗ trợ cả hai hướng. PLY chỉ hỗ trợ nhập (trình xuất khẩu PLY chưa được kết nối).
Tóm tắt Tham chiếu API
| Lớp / Phương thức | Mô tả |
|---|---|
Scene | Bộ chứa cảnh 3D cấp cao nhất |
Scene.Open() | Tải tệp 3D bằng đường dẫn hoặc luồng |
Scene.Save() | Xuất cảnh ra tệp hoặc luồng |
Scene.FromFile() | Factory tĩnh để tải và trả về một Scene |
Node | Nút phân cấp cảnh chứa các thực thể và biến đổi |
Node.CreateChildNode() | Tạo và gắn một nút con |
Mesh | Lưới đa giác với các điểm điều khiển và danh sách mặt |
Mesh.CreatePolygon() | Xác định một mặt đa giác bằng chỉ số đỉnh |
Box / Sphere / Cylinder | Các nguyên thủy hình tham số tích hợp sẵn |
Transform | Dịch chuyển, quay và tỉ lệ cục bộ |
FileFormat | Đăng ký và phát hiện các định dạng được hỗ trợ |
LambertMaterial / PhongMaterial / PbrMaterial | Các loại vật liệu cho shading |