Функции и возможности
Функции и возможности
Эта страница охватывает все основные области функций aspose-3d-foss 26.1.0 с работающими примерами Java.
Загрузка и сохранение сцен
scene.open() загружает файл; scene.save() экспортирует его:
import com.aspose.threed.Scene;
Scene scene = new Scene();
scene.open("input.obj");
scene.save("output.glb");Альтернатива статической фабрики:
Scene scene = Scene.fromFile("input.fbx");
scene.save("output.stl");Опции, специфичные для формата
Pass LoadOptions или SaveOptions подклассы для точного управления:
import com.aspose.threed.*;
Scene scene = new Scene();
ObjLoadOptions opts = new ObjLoadOptions();
opts.setFlipCoordinateSystem(true);
scene.open("model.obj", opts);
GltfSaveOptions saveOpts = new GltfSaveOptions();
saveOpts.setFlipCoordinateSystem(true);
scene.save("model.glb", saveOpts);Примечание: FBX поддерживается только для импорта; экспорт FBX не реализован в версии FOSS. Только binary FBX файлы поддерживаются для импорта — ASCII FBX вызывает ImportException.
Создание графа сцены
Создайте узлы и присоедините сущности:
Scene scene = new Scene();
Node root = scene.getRootNode();
Mesh mesh = new Mesh("myMesh");
mesh.getControlPoints().add(new Vector4(0, 0, 0));
mesh.getControlPoints().add(new Vector4(10, 0, 0));
mesh.getControlPoints().add(new Vector4(10, 10, 0));
mesh.createPolygon(0, 1, 2);
Node meshNode = root.createChildNode("triangle", mesh);Операции с Mesh
Создать Mesh программно с контрольными точками и полигонами:
Mesh mesh = new Mesh("custom");
mesh.getControlPoints().add(new Vector4(0, 0, 0));
mesh.getControlPoints().add(new Vector4(10, 0, 0));
mesh.getControlPoints().add(new Vector4(10, 10, 0));
mesh.getControlPoints().add(new Vector4(0, 10, 0));
mesh.createPolygon(0, 1, 2, 3);Трансформации
Каждый Node переносит Transform:
Node node = scene.getRootNode().createChildNode("moved", new Mesh());
node.getTransform().setTranslation(10, 0, 5);
node.getTransform().setScale(2, 2, 2);Читать мировое пространство через node.getGlobalTransform().getMatrix().
Материалы
Назначьте материалы узлам:
PbrMaterial mat = new PbrMaterial("shiny");
mat.setAlbedo(new Vector4(0.8, 0.2, 0.2, 1.0));
mat.setMetallicFactor(0.5);
mat.setRoughnessFactor(0.3);
scene.getRootNode().createChildNode("red_mesh", mesh, mat);Типы материалов: Material (base), PbrMaterial (PBR metallic-roughness).
Советы и лучшие практики
- Использовать
Scene.fromFile()для однострочных загрузок, когда пользовательские параметры не требуются - Создавайте сетки программно с помощью
createPolygon()для пользовательской геометрии - Используйте
.glbрасширение для компактного бинарного вывода glTF - Проверьте
node.getEntity() != nullперед приведением типов - Экспорт STL делает не триангулировать грани полигонов автоматически. При бинарном экспорте STL записываются только первые 3 вершины каждой грани полигона — квадраты или n‑угольные грани беззвучно усекаются. При ASCII‑экспорте STL записываются все индексы вершин, что приводит к malformed facet blocks для не‑треугольных граней. Всегда передавайте предварительно триангулированные сетки (только треугольные грани) в экспорт STL, чтобы избежать потери данных или некорректного вывода.
Распространённые проблемы
| Проблема | Причина | Исправление |
|---|---|---|
| Исключение при загрузке | Неподдерживаемый или повреждённый файл | Убедитесь, что файл открывается в 3D‑просмотрщике |
| Отсутствуют материалы после загрузки OBJ | .mtl файл не найден | Разместить .mtl рядом с .obj; убедитесь, что материалы включены |
| Несоответствие масштаба после импорта | Разные системы единиц | Применить Transform масштаб после загрузки |
FAQ
Как определить формат файла?
FileFormat format = FileFormat.detect("unknown.bin");
System.out.println(format.getExtension());Можно ли загружать из потока?
Да. scene.open() принимает InputStream.
Какие форматы поддерживают как импорт, так и экспорт?
OBJ, STL и glTF/GLB поддерживают оба направления. FBX только импорт; экспорт не реализован в версии FOSS.
Сводка справки API
| Класс / Метод | Описание |
|---|---|
Scene | Контейнер 3D‑сцены верхнего уровня |
scene.open() | Загрузить 3D‑файл по пути или из потока |
scene.save() | Экспортировать сцену в файл или поток |
Scene.fromFile() | Статическая фабрика для загрузки и возврата Scene |
Node | Узел иерархии сцены |
node.createChildNode() | Создать и присоединить дочерний узел |
Mesh | Полигональная сетка с контрольными точками и списками граней |
mesh.createPolygon() | Определить полигональную грань |
Mesh.toMesh() | Преобразовать или клонировать геометрию сетки |
Transform | Локальное перемещение, вращение и масштаб |
FileFormat | Реестр и детектор форматов |