С радост обявяваме наличието на 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

Опции за зареждане и запазване

Всеки формат има специализирани класове за опции, които ви позволяват да контролирате поведението при импортиране и експортиране:

ФорматОпции за зарежданеОпции за запазване
OBJObjLoadOptionsObjSaveOptions
STLStlLoadOptionsStlSaveOptions
glTF / GLBGltfLoadOptionsGltfSaveOptions
FBXFbxLoadOptionsFbxSaveOptions
3MFTmfLoadOptionsTmfSaveOptions

Например, за да заредите 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

Системни изисквания

ИзискванеПодробности
.Версия на .NET10.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.