Ние сме много доволни да обявим наличието на 3D FOSS за .NET - свободна, отворена библиотека за работа с 3D файлови формати в .NET приложения. Изградена като чисто C# решение без коренни зависимост, библиотеката цели .Net 10.0 и по-късно, което я прави достъпна до широк спектър от проекти и среди.

Тази статия разглежда какво предлага библиотеката, как да започнете и къде да отидете от тук.

Какво е 3D FOSS за .NET?

Aspose.3D FOSS за .NET е леко тежка 3D библиотека за обработка на файлове, публикувана под Мит лиценз.Той осигурява API за сцена-графи, която ви позволява да зареждате, инспектирате, трансформирате и съхранявате 3D модели в няколко широко използвани формати. Библиотеката е изцяло написана в C# и не изисква външни местни бинарни или платформи специфични конфигурации.

Източникът е достъпен на GitHub: HTTPS://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-NET / Апсолутно заснемане на сайта

Ключови нагласи

  • Чистата C# - няма P/Invoke, няма местни библиотеки, не са ограничени платформите.
  • .NET 10.0+ Съвместим е.
  • Мит лицензиран - да се използва в лични, търговски или собственостни проекти без ограничения.
  • Сценаграфска архитектура - познато дърво от възли, меси, камери и материали.
  • Мултиформатна поддръжка - четене и писане на OBJ, STL, GLTF 2.0, ГЛБ, FBX, Collada и 3MF файлове.

Бързо стартиране

НУГЕТ инсталация

Добавете пакета 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() с целевия път. библиотеката вмъква формата от разширението на файла.

Изграждане на сцена от Scratch

Можете също така да създадете сцени програмирано:

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), и изнася резултата като глтФ файл.

Изтегляне на формат-специфични опции

Когато се нуждаете от по-добра контрол над процеса на зареждане, всеки формат осигурява специален клас опции. например, зарязване на файл 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 Наместен пространство включва основни математически примитиви:

  • ФВЕКТОР 3 - еднократна точност на 3 компонента плувен вектор (X, Y, ZИзползвани от Transform.Translation и Transform.Scale.
  • Вектор 4 (Aspose.ThreeD.Utilities2) - Двойна точност 4-компонентен вектор (x, y, z, wза контролни точки и нормални.Забележка: отделен Aspose.ThreeD.Vector4 (подолу са и повърхностите на земята); Mesh.ControlPoints Използвайте вариант за двойна точност.
  • Матрица 4 - 4x4 трансформационна матрица.
  • Кватернион - ротационна представителна. използвани от Transform.Rotation.
  • BoundingBox - Осилно-извързана гранична кутия за пространствени запитвания.
var a = new FVector3(1, 0, 0);
var b = new FVector3(0, 1, 0);
// Vector operations for spatial computations

Изтегляне и съхранение на опции

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

Форматътопции за зарежданеСпасяване на опции
OBJObjLoadOptionsObjSaveOptions
STLStlLoadOptionsStlSaveOptions
ГЛТФ / 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ДаДаС МТЛ материали
STL.stlДаДаБинарни + ASCII
ГЛТФ.gltf, .glbДаДаформат JSON; .glb Това е самоконтейнерният бинарни вариант.
FBX.fbxДаДаБинарни експорти само; АСЦИИ експорт е деклариран, но не е активен в тази версия
COLLADA.daeДаДа
3MF.3mfДаДа3D формат на производство на ZIP

Формат на избора ръководство

Изборът на правилния формат зависи от случая ви с използване:

  • OBJ е идеален, когато се нуждаете от максимална съвместимост между 3D инструменти. Почти всяко приложение за моделиране може да чете и пише OBJ. Той работи добре за обмен на данни в мешавина, но носи само основна материална информация чрез файлове MTL съдружници.
  • STL Той съхранява сурова триъгълна геометрия без материали или сценична йерархия, което е точно това, от което се очаква софтуерът за слайдър.
  • ГЛТФ е модерен стандарт за уеб и 3D в реално време. Поддържа PBR материали, пълна сцена йерархии, и е предназначен за ефективно предаване. Използвайте glTF при изграждане на уеб базирани зрители или целенасочено всяка реална дата rendering тръба.
  • FBX Тя е дълбоко интегрирана в разработването на игри и цифровите съдържание създаване работни потоци. тя поддържа богати сцени данни, включително йерархии и материали. Aspose.3D FOSS за .NET поддържа FBX Внос и износ.Забележка: износът произвежда само бинарния FBX — код за експорт на ASCII FB X съществува в източника, но не е свързан към маршрута за износа в тази версия.
  • 3MF Това е модерен 3D формат, който поддържа богати метаданни, материали и многообектни сцени в един пакет базиран на ZIP.

Известни ограничения

Scene.Render() е Не подпомагат В този случай, като се използва тази методика, ще бъде изхвърлена една NotImplementedException.Библиотеката е предназначена за 3D обработка на базата на файлове - зареждане, манипулиране, трансформация и спасяване на модели - вместо реално време предаване на дисплей.

Отворени източници и лицензиране

Aspose.3D FOSS за .NET се пуска под Мит лиценз.Това означава, че сте свободни да:

  • Използвайте библиотеката в търговски и собственостни приложения.
  • Променете кода, за да отговаря на вашите нужди.
  • Разпределете библиотеката като част от собствения си софтуер.

Няма такса за роялти, няма ограничения за употреба и не съществуват изисквания за присъждане извън това, което е посочено в лиценза на MIT.

Пълният източник на кода е хостиран в GitHub, а приносите са добре дошли: HTTPS://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-NET / Апсолутно заснемане на сайта

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

изискванеДетайли
.NET версия10.0 or later
зависимостНе е (чиста C#)
ПлатформиВсяка платформа, която работи .NET
Пакет мениджърNuGet

Започваме

Ето и основните средства, които ще ви помогнат да се изправите и да вървите:

  • Документация - всеобхватни ръководства и API ходъри са на разположение в Апсос.3D документация сайт.
  • Знание база - практически как да се правят статии и съвети за решаване на проблеми в Апсос 3D KB.
  • Огнено референтно - подробно класиране и метод на референция в Апсос 3D API Референт.
  • Източник Код - да се прегледа и да допринесе за GitHub.
  • NuGet - Пакетът е публикуван като Aspose.3D на НюГет.

Общи случаи на употреба

Ето някои практически сценарии, където 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.