Характеристики и функционалности

Характеристики и функционалности

Характеристики и функционалности

Тази страница обхваща всяка основна област на функционалността на 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() за едноредово зареждане, когато не ви е необходим персонализиран 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()Статична фабрика за зареждане и връщане на Scene
NodeВъзел в йерархията на сцената, съдържащ обекти и трансформации
Node.CreateChildNode()Създаване и прикрепяне на дъщерен възел
MeshПолигонална мрежа с контролни точки и списъци с лица
Mesh.CreatePolygon()Определяне на полигонално лице чрез индекси на върховете
Box / Sphere / CylinderВградени параметрични примитиви
TransformЛокално преместване, завъртане и мащаб
FileFormatРегистър и детектор за поддържани формати
LambertMaterial / PhongMaterial / PbrMaterialТипове материали за сенкиране
 Български