Как загружать 3D‑модели в Java
aspose-3d-foss для Java предоставляет простой API для открытия 3D‑файлов. После загрузки файла в Scene объект вы можете обходить иерархию узлов и считывать данные геометрии.
Пошаговое руководство
Шаг 1: Установите пакет
Добавьте зависимость Maven:
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.1.0</version>
</dependency>Шаг 2: Импортируйте класс Scene
import com.aspose.threed.Scene;
import com.aspose.threed.Node;
import com.aspose.threed.Mesh;Шаг 3: Загрузите файл
Scene scene = new Scene();
scene.open("model.obj");Или используйте статическую фабрику:
Scene scene = Scene.fromFile("model.obj");Поддерживаемые форматы: OBJ, STL, glTF 2.0 / GLB, FBX (только бинарный — ASCII FBX не поддерживается и вызывает ImportException).
Шаг 4: Обойдите узлы сцены
void walk(Node node, int depth) {
String indent = " ".repeat(depth * 2);
System.out.println(indent + "Node: " + node.getName());
for (Node child : node.getChildNodes()) {
walk(child, depth + 1);
}
}
walk(scene.getRootNode(), 0);Шаг 5: Получите доступ к данным Mesh
for (Node node : scene.getRootNode().getChildNodes()) {
if (node.getEntity() instanceof Mesh) {
Mesh mesh = (Mesh) node.getEntity();
System.out.println("Mesh '" + node.getName() + "': " +
mesh.getControlPoints().size() + " vertices, " +
mesh.getPolygonCount() + " polygons");
}
}Распространённые проблемы и их решения
Исключение при загрузке
Убедитесь, что файл не повреждён и формат поддерживается (OBJ, STL, glTF, FBX).
NullPointerException при доступе к сущности
Не каждый узел содержит геометрию. Всегда проверяйте node.getEntity() instanceof Mesh перед приведением.
Несоответствие системы координат
Используйте ObjLoadOptions.setFlipCoordinateSystem(true) или применить вращение после загрузки.
Часто задаваемые вопросы (FAQ)
Какие форматы можно загрузить?
OBJ, STL (binary and ASCII), glTF 2.0 / GLB и FBX. Для FBX поддерживается только binary FBX поддерживается. ASCII‑файлы FBX будут вызывать ImportException("ASCII FBX format not yet supported - only binary FBX is supported").
Можно ли загружать из InputStream?
Да. scene.open() принимает InputStream.
Является ли библиотека потокобезопасной?
Каждый Scene экземпляр независим. Загрузка отдельных файлов в отдельные экземпляры из разных потоков безопасна.