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ớpHướngThuộc tính chính
ObjLoadOptionsNhậpFlipCoordinateSystem, EnableMaterials, Scale
ObjSaveOptionsXuấtFlipCoordinateSystem, EnableMaterials, PointCloud
FbxLoadOptionsNhập(cài đặt mặc định)
GltfLoadOptionsNhập(cài đặt mặc định)
GltfSaveOptionsXuất(cài đặt mặc định)
StlLoadOptionsNhập(cài đặt mặc định)
StlSaveOptionsXuất(cài đặt mặc định)
ColladaLoadOptionsNhậpFlipCoordinateSystem
ColladaSaveOptionsXuấtIndented, TransformStyle
PlyLoadOptionsNhậ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ỉnh LoadOptions
  • Chuyển đổi các primitive sang Mesh với ToMesh() trước khi thêm các phần tử đỉnh
  • Sử dụng GltfSaveOptions với một .glb phần mở rộng cho đầu ra nhị phân gọn
  • Kiểm tra node.Entity cho null trướ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ânKhắc phục
ImportException khi tảiTệp không được hỗ trợ hoặc bị hỏngXá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 FBXCác hệ đơn vị khác nhauSử 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ứcMô tả
SceneBộ 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
NodeNú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
MeshLướ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 / CylinderCác nguyên thủy hình tham số tích hợp sẵn
TransformDị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 / PbrMaterialCác loại vật liệu cho shading
 Tiếng Việt