С радост обявяваме наличието на Aspose.3D FOSS for .NET – безплатна, с отворен код библиотека за работа с 3D файлови формати в .NET приложения. Създадена като чисто C# решение без родни зависимости, библиотеката цели .NET 10.0 и по-нови версии, което я прави достъпна за широк спектър от проекти и среди.
Тази публикация обхваща какво предлага библиотеката, как да започнете и къде да продължите от тук.
Какво е Aspose.3D FOSS за .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, без native библиотеки, без ограничения за платформи.
- .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 модела на графа на сцената.
Граф на сцената
Сценичният граф е гръбнакът на API-то. Всеки 3D файл се представя като дървовидна структура:
| Клас | Роля |
|---|---|
Scene | Контейнер от най-високо ниво; коренът на графа на сцената |
Node | Именована позиция в дървото; съдържа трансформации и дъщерни възли |
Entity | Абстрактна база за визуални обекти, прикрепени към възлите |
Mesh | Полигонална геометрия – върхове, лица, нормали |
Camera | Дефиниция на виртуална камера |
Transform | Локално преместване, завъртане и мащабиране за възел |
GlobalTransform | Изчислена трансформация в световното пространство |
Вградени примитиви
Изданието .NET включва параметрични класове за форми, които могат да се прикрепят директно към възли или да се конвертират в Mesh:
- Кутия – кутия, подравнена по осите, с конфигурирана ширина, височина и дълбочина.
- Сфера – параметрична сфера с конфигурируем радиус.
- Цилиндър – параметричен цилиндър с конфигурируеми радиуси и височина.
var sphere = new Sphere(1);
var mesh = sphere.ToMesh();
Console.WriteLine("Vertices: " + mesh.ControlPoints.Count);
Материали
Библиотеката предоставя множество типове материали:
- LambertMaterial – класически материал само с дифузно осветление, съдържащ амбиентни, дифузни, емисивни и отражателни цветови компоненти.
- PhongMaterial – разширява Lambert със спекуларни блясъци и блясък.
- PbrMaterial – материал за физически базирано рендериране с базов цвят, металност, грубост, оклузия и слотове за текстури.
Математически помощни функции
Този Aspose.ThreeD пространството от имена включва основни математически примитиви:
- FVector3 – еднопоточен 3‑компонентен вектор за позиции, посоки и мащаб. Използва се от
Transform.TranslationиTransform.Scale. - Vector4 – еднопоточен 4‑компонентен вектор за контролни точки и нормали.
- 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 за .NET може да чете и записва.
| Формат | Разширение | Импорт | Експорт | Бележки |
|---|---|---|---|---|
| OBJ | .obj | Да | Да | С MTL материали |
| STL | .stl | Да | Да | Бинарен + ASCII |
| glTF 2.0 | .gltf | Да | Да | JSON формат |
| GLB | .glb | Да | Да | Бинарен glTF |
| FBX | .fbx | Да | Да | ASCII и двоични режими |
| Collada | .dae | Да | Да | |
| 3MF | .3mf | Да | Да | ZIP-базиран 3D производствен формат |
Ръководство за избор на формат
Изборът на правилния формат зависи от вашия случай на употреба:
- 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 лиценз. Това означава, че сте свободни да:
- Използвате библиотеката в комерсиални и собственически приложения.
- Модифицирайте изходния код, за да отговаря на вашите нужди.
- Разпространявайте библиотеката като част от вашия собствен софтуер.
Няма такси за роялти, ограничения за използване и изисквания за атрибуция, освен тези, определени от лиценза MIT.
Пълният изходен код е хостван в GitHub и приносите са добре дошли: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-NET
Системни изисквания
| Изискване | Подробности |
|---|---|
| .Версия на .NET | 10.0 or later |
| Зависимости | Няма (чист C#) |
| Платформи | Всяка платформа, която изпълнява .NET |
| Мениджър на пакети | NuGet |
Започване
Ето ресурсите, които ще ви помогнат да започнете работа:
- Документация – всеобхватни ръководства и API walkthroughs са достъпни на 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");
Какво следва
В предстоящите публикации ще разгледаме:
- Подробен преглед на ключовите функции на scene-graph API, материалите и математическите помощни функции.
- Практическо ръководство за работа с всеки поддържан 3D формат – OBJ, STL, glTF, FBX и 3MF – включващо опции за зареждане/запис и шаблони за пакетно конвертиране.
Останете на линия и не се колебайте да изследвате библиотеката и да споделите обратната си връзка в GitHub.