Мы рады объявить о доступности Aspose.3D FOSS for .NET – бесплатная, открытая библиотека для работы с 3D форматами файлов в приложениях .NET. Создана как чистое решение на C# без нативных зависимостей, библиотека нацелена на .NET 10.0 и выше, что делает её доступной для широкого спектра проектов и сред.
В этом посте мы рассмотрим, что предлагает библиотека, как начать работу и какие дальнейшие шаги.
Что такое Aspose.3D FOSS for .NET?
Aspose.3D FOSS for .NET — это легковесная библиотека обработки 3D файлов, опубликованная под лицензией MIT. Она предоставляет API графа сцены, позволяющее загружать, исследовать, трансформировать и сохранять 3D модели в нескольких широко используемых форматах. Библиотека полностью написана на C# и не требует внешних нативных бинарных файлов или платформо-специфических конфигураций.
Исходный код доступен на GitHub: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-NET
Ключевые особенности
- Чистый C# – без P/Invoke, без нативных библиотек, без ограничений платформы.
- .NET 10.0+ совместим.
- Лицензировано по MIT – используйте в личных, коммерческих или проприетарных проектах без ограничений.
- Архитектура графа сцены – знакомое дерево узлов, мешей, камер и материалов.
- Поддержка нескольких форматов – читать и записывать файлы OBJ, STL, glTF 2.0, GLB, FBX, Collada и 3MF.
Быстрый старт
Установка через NuGet
Добавьте пакет NuGet в ваш проект:
dotnet add package Aspose.3D --version 26.1.0
Ваша первая конверсия
Самый простой сценарий использования — загрузить 3D‑файл в одном формате и сохранить его в другом. Ниже показана двухстрочная конверсия из OBJ в STL:
using Aspose.ThreeD;
var scene = new Scene();
scene.Open("cube.obj");
scene.Save("output.stl");
Эта Scene класс является центральной точкой входа. Вызовите scene.Open() с путем к файлу, чтобы загрузить модель, затем вызовите Save() с целевым путем. Библиотека определяет формат по расширению файла.
Создание сцены с нуля
Вы также можете создавать сцены программно:
using Aspose.ThreeD;
using Aspose.ThreeD.Entities;
var scene = new Scene();
var box = new Box(2, 2, 2);
var node = scene.RootNode.CreateChildNode("Box", box);
node.Transform.Translation = new FVector3(1, 2, 3);
scene.Save("scene.gltf");
Это создаёт новую сцену, добавляет примитив‑коробку как дочерний узел к корню, размещает её в координатах (1, 2, 3) и экспортирует результат в файл glTF.
Загрузка с параметрами, специфичными для формата
Когда требуется более тонкий контроль над процессом загрузки, каждый формат предоставляет отдельный класс параметров. Например, загрузка STL‑файла с явными параметрами:
using Aspose.ThreeD;
using Aspose.ThreeD.Formats;
var scene = new Scene();
var opts = new StlLoadOptions();
scene.Open("part.stl", opts);
// Inspect the loaded scene
Console.WriteLine("Root children: " + scene.RootNode.ChildNodes.Count);
// Re-export as OBJ
scene.Save("part.obj");
Эта scene.Open() метод принимает любой из типов параметров загрузки: ObjLoadOptions, StlLoadOptions, GltfLoadOptions, FbxLoadOptions, или TmfLoadOptions.
Обход графа сцены
После загрузки сцены вы можете пройтись по дереву узлов, чтобы исследовать или изменить его содержимое:
using Aspose.ThreeD;
using Aspose.ThreeD.Entities;
var scene = new Scene();
scene.Open("model.gltf");
foreach (var child in scene.RootNode.ChildNodes)
{
Console.WriteLine("Node: " + child.Name);
Console.WriteLine(" Translation: " + child.Transform.Translation);
if (child.Entity is Mesh mesh)
{
Console.WriteLine(" Vertices: " + mesh.ControlPoints.Count);
}
}
Такой подход полезен для отладки, создания отчётов о содержимом модели или выборочного изменения частей сцены перед повторным экспортом.
Применение трансформаций
Размещение узлов в 3D‑пространстве выполняется через Transform свойство у каждого Node:
using Aspose.ThreeD;
using Aspose.ThreeD.Entities;
var scene = new Scene();
var parent = scene.RootNode.CreateChildNode("Parent");
parent.Transform.Translation = new FVector3(10, 0, 0);
var child = parent.CreateChildNode("Child");
child.Transform.Translation = new FVector3(5, 0, 0);
child.Transform.Scale = new FVector3(2, 2, 2);
// Child's world position is (15, 0, 0) due to
// parent-child transform inheritance
scene.Save("transformed.gltf");
Трансформации следуют стандартной модели наследования «родитель‑дочерний»: мировая позиция дочернего узла является комбинацией его локальной трансформации и всех трансформаций предков вплоть до корня.
Что включено
Библиотека поставляется с ограниченным набором возможностей, разработанных вокруг модели 3D‑графа сцены.
Scene Graph
Сцена графа является основой API. Каждый 3D‑файл представляется в виде древовидной структуры:
| Класс | Роль |
|---|---|
Scene | Контейнер верхнего уровня; корень графа сцены |
Node | Именованная позиция в дереве; содержит трансформации и дочерние узлы |
Entity | Абстрактный базовый класс для визуальных объектов, привязанных к узлам |
Mesh | Полигональная геометрия — вершины, грани, нормали |
Camera | Определение виртуальной камеры |
Transform | Локальный перенос, вращение и масштаб узла |
GlobalTransform | Вычисленное преобразование в мировом пространстве |
Встроенные примитивы
В издании .NET включены параметрические классы фигур, которые можно напрямую прикреплять к узлам или преобразовывать в Mesh:
- Box – выровненный по осям прямоугольный параллелепипед с настраиваемой шириной, высотой и глубиной.
- Sphere – параметрическая сфера с настраиваемым радиусом.
- Цилиндр – параметрический цилиндр с настраиваемыми радиусами и высотой.
var sphere = new Sphere(1);
var mesh = sphere.ToMesh();
Console.WriteLine("Vertices: " + mesh.ControlPoints.Count);
Материалы
Библиотека предоставляет несколько типов материалов:
- LambertMaterial – классический материал только с диффузным освещением, включающий компоненты цвета: ambient, diffuse, emissive и reflective.
- PhongMaterial – расширяет Lambert, добавляя спекулярные блики и блеск.
- PbrMaterial – материал физически основанного рендеринга с базовым цветом, metallic, roughness, occlusion и слотами текстур.
Математические утилиты
Эта Aspose.ThreeD пространство имён включает основные математические примитивы:
- FVector3 – вектор из трёх компонентов одинарной точности для позиций, направлений и масштаба. Используется в
Transform.TranslationиTransform.Scale. - Vector4 – вектор из четырёх компонентов одинарной точности для контрольных точек и нормалей.
- Matrix4 – 4x4 матрица преобразования.
- Quaternion – представление вращения. Используется в
Transform.Rotation. - BoundingBox прямоугольный ограничивающий параллелепипед для пространственных запросов.
var a = new FVector3(1, 0, 0);
var b = new FVector3(0, 1, 0);
// Vector operations for spatial computations
Параметры загрузки и сохранения
Каждый формат имеет отдельные классы параметров, позволяющие управлять поведением импорта и экспорта:
| Формат | Параметры загрузки | Параметры сохранения |
|---|---|---|
| OBJ | ObjLoadOptions | ObjSaveOptions |
| STL | StlLoadOptions | StlSaveOptions |
| glTF / GLB | GltfLoadOptions | GltfSaveOptions |
| FBX | FbxLoadOptions | FbxSaveOptions |
| 3MF | TmfLoadOptions | TmfSaveOptions |
Например, чтобы загрузить файл OBJ с инвертированием координат и нормализацией нормалей:
var opts = new ObjLoadOptions();
opts.FlipCoordinateSystem = true;
opts.NormalizeNormal = true;
scene.Open("model.obj", opts);
Поддерживаемые форматы
В следующей таблице суммированы форматы, которые Aspose.3D FOSS for .NET может читать и записывать.
| Формат | Расширение | Импорт | Экспорт | Заметки |
|---|---|---|---|---|
| OBJ | .obj | Да | Да | С материалами MTL |
| STL | .stl | Да | Да | Бинарный + ASCII |
| glTF 2.0 | .gltf | Да | Да | формат JSON |
| GLB | .glb | Да | Да | Бинарный glTF |
| FBX | .fbx | Да | Да | Режимы ASCII и бинарные |
| Collada | .dae | Да | Да | |
| 3MF | .3mf | Да | Да | формат 3D‑производства на основе ZIP |
Руководство по выбору формата
Выбор подходящего формата зависит от вашего сценария использования:
- OBJ идеален, когда вам нужна максимальная совместимость между 3D‑инструментами. Практически любое приложение для моделирования может читать и записывать OBJ. Он хорошо подходит для обмена сеточными данными, но передаёт только базовую информацию о материалах через сопутствующие файлы MTL.
- STL является предпочтительным форматом для рабочих процессов 3D‑печати. Он сохраняет необработанную триангулированную геометрию без материалов и иерархии сцены, что именно ожидает программное обеспечение для нарезки.
- glTF является современным стандартом для веб‑ и реального времени 3D. Он поддерживает материалы PBR, полные иерархии сцены и разработан для эффективной передачи. Используйте glTF при создании веб‑просмотрщиков или при работе с любой конвейерной системой рендеринга в реальном времени.
- FBX глубоко интегрирован в рабочие процессы разработки игр и создания цифрового контента. Он поддерживает богатые данные сцены, включая иерархии и материалы. Aspose.3D FOSS для .NET поддерживает FBX импорт и экспорт в обоих режимах: ASCII и бинарном.
- 3MF является современным форматом 3D‑печати, который поддерживает богатые метаданные, материалы и сцены с несколькими объектами в едином пакете на основе ZIP.
Известные ограничения
Scene.Render() является не поддерживается в версии FOSS. Вызов этого метода выбросит NotImplementedException. Библиотека предназначена для файловой 3D обработки – загрузки, манипулирования, трансформации и сохранения моделей – а не для рендеринга в реальном времени на дисплей.
Открытый исходный код и лицензирование
Aspose.3D FOSS для .NET выпущен под MIT License. Это означает, что вы свободны:
- Используйте библиотеку в коммерческих и проприетарных приложениях.
- Изменяйте исходный код в соответствии с вашими потребностями.
- Распространяйте библиотеку как часть вашего собственного программного обеспечения.
Нет роялти, ограничений по использованию и требований к указанию авторства, кроме тех, что предусмотрены лицензией MIT.
Полный исходный код размещён на GitHub, и вклад приветствуется: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-NET
Системные требования
| Требование | Подробности |
|---|---|
| .NET версия | 10.0 or later |
| Зависимости | Нет (чистый C#) |
| Платформы | Любая платформа, на которой работает .NET |
| Менеджер пакетов | NuGet |
Начало работы
Вот ресурсы, которые помогут вам быстро приступить к работе:
- Документация – всесторонние руководства и пошаговые обзоры API доступны на Aspose.3D сайт документации.
- База знаний – практические статьи‑руководства и советы по устранению неполадок в Aspose.3D KB.
- Справочник API – подробная справка по классам и методам по Aspose.3D справка API.
- Исходный код – просматривать и вносить вклад на GitHub.
- NuGet – пакет опубликован как
Aspose.3Dв NuGet.
Распространённые сценарии использования
Вот несколько практических сценариев, где Aspose.3D FOSS для .NET хорошо подходит:
Конвейеры конвертации форматов
Многие команды получают 3D‑активы в одном формате, но им нужны в другом. Команда дизайнеров может работать с FBX, тогда как веб‑команда нуждается в glTF. Библиотека позволяет создавать автоматизированные конвейеры конвертации:
using Aspose.ThreeD;
using Aspose.ThreeD.Formats;
// Convert all incoming FBX assets to GLB for the web team
var scene = new Scene();
scene.Open("asset.fbx");
scene.Save("asset.glb");
3D Model Inspection and Validation
Прежде чем интегрировать 3D‑актив в приложение, вы можете захотеть проверить его содержимое — подсчитать количество узлов, проверить геометрию или убедиться, что присутствуют ожидаемые элементы:
using Aspose.ThreeD;
using Aspose.ThreeD.Entities;
var scene = new Scene();
scene.Open("model.obj");
int nodeCount = scene.RootNode.ChildNodes.Count;
Console.WriteLine("Top-level nodes: " + nodeCount);
foreach (var child in scene.RootNode.ChildNodes)
{
if (child.Entity is Mesh mesh)
{
Console.WriteLine(child.Name + ": "
+ mesh.ControlPoints.Count + " vertices");
}
}
Сборка сцены
Вы можете загрузить несколько моделей и объединить их в одну сцену:
using Aspose.ThreeD;
var scene = new Scene();
var part1 = new Scene();
part1.Open("chassis.obj");
var part2 = new Scene();
part2.Open("wheels.obj");
// Add nodes from each part into the combined scene
foreach (var child in part1.RootNode.ChildNodes)
{
scene.RootNode.ChildNodes.Add(child);
}
foreach (var child in part2.RootNode.ChildNodes)
{
scene.RootNode.ChildNodes.Add(child);
}
scene.Save("assembled.gltf");
Что дальше
В предстоящих постах мы рассмотрим:
- Подробный разбор ключевых возможностей API графа сцены, материалов и математических утилит.
- Практическое руководство по работе с каждым поддерживаемым 3D‑форматом — OBJ, STL, glTF, FBX и 3MF — включая варианты загрузки/сохранения и шаблоны пакетного преобразования.
Следите за обновлениями, а также смело исследуйте библиотеку и делитесь своими отзывами на GitHub.