Функции и возможности
Функции и возможности
Эта страница охватывает все основные области функций Aspose.3D 26.1.0 с работающими примерами на C#.
Загрузка и сохранение сцен
Scene.Open() загружает файл; Scene.Save() экспортирует его. Формат определяется по расширению файла:
using Aspose.ThreeD;
var scene = new Scene();
scene.Open("input.obj");
scene.Save("output.glb");Используйте статическую фабрику Scene.FromFile() в качестве альтернативы:
var scene = Scene.FromFile("input.fbx");
scene.Save("output.stl");Опции, специфичные для формата
Передайте LoadOptions или SaveOptions подклассы для точного управления:
using Aspose.ThreeD;
using Aspose.ThreeD.Formats;
var scene = new Scene();
scene.Open("model.obj", new ObjLoadOptions { FlipCoordinateSystem = true });
scene.Save("model.fbx");Доступные классы параметров:
| Класс | Направление | Ключевые свойства |
|---|---|---|
ObjLoadOptions | Импорт | FlipCoordinateSystem, EnableMaterials, Scale |
ObjSaveOptions | Экспорт | FlipCoordinateSystem, EnableMaterials, PointCloud |
FbxLoadOptions | Импорт | (настройки по умолчанию) |
GltfLoadOptions | Импорт | (настройки по умолчанию) |
GltfSaveOptions | Экспорт | (настройки по умолчанию) |
StlLoadOptions | Импорт | (настройки по умолчанию) |
StlSaveOptions | Экспорт | (настройки по умолчанию) |
ColladaLoadOptions | Импорт | FlipCoordinateSystem |
ColladaSaveOptions | Экспорт | Indented, TransformStyle |
PlyLoadOptions | Импорт | (настройки по умолчанию) |
Создание графа сцены
Создавайте узлы и присоединяйте сущности для построения иерархии:
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));Доступ к дочерним элементам через node.ChildNodes и к присоединённой сущности через node.Entity.
Сетки и примитивы
Создать Mesh программно с контрольными точками и полигонами:
// 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);Встроенные примитивы (Box, Sphere, Cylinder) можно преобразовать в Mesh:
var box = new Box(10, 10, 10);
Mesh boxMesh = box.ToMesh();Элементы вершин
Присоединяйте нормали, UV и цвета вершин к геометрии:
var normals = new VertexElementNormal(MappingMode.ControlPoint, ReferenceMode.Direct);
mesh.AddElement(normals);Доступные типы вершинных элементов: VertexElementNormal, VertexElementUV, VertexElementVertexColor, VertexElementBinormal, VertexElementTangent.
Трансформации
Каждый Node содержит Transform с Translation, Rotation, и 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);Считать позицию в мировом пространстве через node.GlobalTransform.Matrix или node.EvaluateGlobalTransform().
Материалы
Назначайте материалы узлам для данных затенения:
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);Типы материалов: LambertMaterial, PhongMaterial, PbrMaterial.
Советы и лучшие практики
- Используйте
Scene.FromFile()для однострочной загрузки, когда вам не нужен customLoadOptions - Преобразовать примитивы в
MeshсToMesh()перед добавлением вершинных элементов - Используйте
GltfSaveOptionsс.glbрасширение для компактного бинарного вывода - Проверьте
node.Entityдляnullперед приведением — не каждый узел содержит геометрию - Используйте
PolygonModifier.Triangulate()для преобразования квадрических сеток перед экспортом в форматы, поддерживающие только треугольники, такие как STL
Распространённые проблемы
| Проблема | Причина | Исправление |
|---|---|---|
ImportException при загрузке | Неподдерживаемый или повреждённый файл | Убедитесь, что файл открывается в 3D‑просмотрщике; проверьте, что формат находится в списке поддерживаемых |
| Отсутствуют материалы после загрузки OBJ | .mtl файл не найден | Поместите .mtl файл рядом с .obj или установите ObjLoadOptions.EnableMaterials = true |
| Несоответствие масштаба после импорта FBX | Разные системы единиц | Использовать ObjLoadOptions.Scale или применить Transform после загрузки |
FAQ
Как определить формат неизвестного файла?
Использовать FileFormat.Detect():
var format = FileFormat.Detect("unknown_file.bin");
Console.WriteLine(format.Extension);Можно ли загрузить из потока вместо пути к файлу?
Да. Scene.Open() принимает Stream:
using var stream = File.OpenRead("model.glb");
scene.Open(stream);Какие форматы поддерживают как импорт, так и экспорт?
OBJ, STL, glTF/GLB, FBX, COLLADA и 3MF поддерживают оба направления. PLY поддерживает только импорт (экспортер PLY не реализован).
Сводка справки API
| Класс / Метод | Описание |
|---|---|
Scene | Контейнер 3D‑сцены верхнего уровня |
Scene.Open() | Загрузить 3D‑файл по пути или из потока |
Scene.Save() | Экспортировать сцену в файл или поток |
Scene.FromFile() | Статическая фабрика для загрузки и возврата a Scene |
Node | Узел иерархии сцены, содержащий сущности и трансформации |
Node.CreateChildNode() | Создать и присоединить дочерний узел |
Mesh | Полигональная сетка с контрольными точками и списками граней |
Mesh.CreatePolygon() | Определить полигональную грань по индексам вершин |
Box / Sphere / Cylinder | Встроенные параметрические примитивы |
Transform | Локальный перенос, вращение и масштаб |
FileFormat | Реестр и детектор поддерживаемых форматов |
LambertMaterial / PhongMaterial / PbrMaterial | Типы материалов для затенения |