Функции и возможности

Функции и возможности

Эта страница охватывает все основные области функций 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() для однострочной загрузки, когда вам не нужен custom LoadOptions
  • Преобразовать примитивы в 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Типы материалов для затенения
 Русский