Nos complace anunciar la disponibilidad de Aspose.3D FOSS para Java – una biblioteca gratuita y de código abierto para trabajar con formatos de archivos 3D en aplicaciones Java. Construida como una solución pura Java sin dependencias nativas, la biblioteca se ejecuta en Java 21 y posteriores, lo que la hace accesible a una amplia gama de proyectos y entornos.

Esta publicación recorre lo que ofrece la biblioteca, cómo comenzar y a dónde ir a partir de aquí.

¿Qué es Aspose.3D FOSS para Java?

Aspose.3D FOSS para Java es una biblioteca ligera de procesamiento de archivos 3D publicada bajo la licencia MIT. Proporciona una API de grafo de escena que le permite cargar, inspeccionar, transformar y guardar modelos 3D en varios formatos ampliamente utilizados. La biblioteca está escrita completamente en Java y no requiere binarios nativos externos ni configuraciones específicas de la plataforma.

El código fuente está disponible en GitHub: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java

Aspectos clave

  • Puro Java – sin JNI, sin bibliotecas nativas, sin restricciones de plataforma.
  • Java 21+ compatible.
  • Licencia MIT – úsalo en proyectos personales, comerciales o propietarios sin restricciones.
  • Arquitectura de grafo de escena – un árbol familiar de nodos, mallas, cámaras y materiales.
  • Soporte multi‑formato – leer y escribir archivos OBJ, STL, glTF 2.0 y GLB; leer archivos FBX.

Inicio rápido

Instalación de Maven

Agrega la siguiente dependencia a tu pom.xml:

<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-3d-foss</artifactId>
    <version>26.1.0</version>
</dependency>

Tu primera conversión

El caso de uso más simple es cargar un archivo 3D en un formato y guardarlo en otro. Aquí tienes una conversión de dos líneas de OBJ a STL:

import com.aspose.threed.*;

public class QuickConvert {
    public static void main(String[] args) throws Exception {
        Scene scene = Scene.fromFile("cube.obj");
        scene.save("output.stl");
    }
}

El Scene class es el punto de entrada central. Llama Scene.fromFile() con una ruta de archivo para cargar un modelo, luego llama save() con la ruta de destino. La biblioteca infiere el formato a partir de la extensión del archivo.

Construyendo una escena desde cero

También puedes construir escenas programáticamente:

import com.aspose.threed.*;

public class BuildScene {
    public static void main(String[] args) throws Exception {
        Scene scene = new Scene();
        Node node = scene.getRootNode().createChildNode("Box");

        Transform t = node.getTransform();
        t.setTranslation(1, 2, 3);

        scene.save("scene.gltf");
    }
}

Esto crea una nueva escena, agrega un nodo hijo llamado “Box” bajo la raíz, lo posiciona en las coordenadas (1, 2, 3) y exporta el resultado como un archivo glTF.

Cargando con Opciones Específicas de Formato

Cuando necesitas un control más fino sobre el proceso de carga, cada formato proporciona una clase de opciones dedicada. Por ejemplo, cargando un archivo STL con opciones explícitas:

import com.aspose.threed.*;

public class LoadWithOptions {
    public static void main(String[] args) throws Exception {
        StlLoadOptions opts = new StlLoadOptions();
        Scene scene = Scene.fromFile("part.stl", opts);

        // Inspect the loaded scene
        System.out.println("Root children: "
            + scene.getRootNode().getChildNodes().size());

        // Re-export as OBJ
        scene.save("part.obj");
    }
}

El Scene.fromFile() El método estático acepta cualquiera de los tipos de opción de carga: ObjLoadOptions, StlLoadOptions, GltfLoadOptions, o FbxLoadOptions.

Recorriendo el Grafo de Escena

Una vez que una escena está cargada, puedes recorrer el árbol de nodos para inspeccionar o modificar su contenido:

import com.aspose.threed.*;

public class TraverseScene {
    public static void main(String[] args) throws Exception {
        Scene scene = Scene.fromFile("model.gltf");

        for (Node child : scene.getRootNode().getChildNodes()) {
            System.out.println("Node: " + child.getName());

            Transform t = child.getTransform();
            System.out.println("  Translation: " + t.getTranslation());

            Entity entity = child.getEntity();
            if (entity instanceof Mesh) {
                Mesh mesh = (Mesh) entity;
                System.out.println("  Vertices: "
                    + mesh.getControlPoints().size());
            }
        }
    }
}

Este patrón es útil para depurar, generar informes sobre el contenido del modelo o modificar selectivamente partes de una escena antes de volver a exportarla.

Aplicando Transformaciones

El posicionamiento de nodos en el espacio 3D se realiza a través del Transform objeto en cada Node:

import com.aspose.threed.*;

public class TransformExample {
    public static void main(String[] args) throws Exception {
        Scene scene = new Scene();

        Node parent = scene.getRootNode().createChildNode("Parent");
        parent.getTransform().setTranslation(10, 0, 0);

        Node child = parent.createChildNode("Child");
        child.getTransform().setTranslation(5, 0, 0);
        child.getTransform().setScale(2, 2, 2);

        // Child's world position is (15, 0, 0) due to
        // parent-child transform inheritance

        scene.save("transformed.gltf");
    }
}

Las transformaciones siguen el modelo estándar de herencia padre‑hijo: la posición en espacio mundial de un hijo es la combinación de su transformación local y todas las transformaciones de los ancestros hasta la raíz.

Qué incluye

La biblioteca se entrega con un conjunto enfocado de capacidades diseñadas alrededor del modelo de grafo de escena 3D.

Grafo de escena

El grafo de escena es la columna vertebral de la API. Cada archivo 3D se representa como una estructura de árbol:

ClaseRol
SceneContenedor de nivel superior; la raíz del grafo de escena
NodeUna posición con nombre en el árbol; contiene transformaciones y nodos hijos
EntityBase abstracta para objetos visuales adjuntos a nodos
MeshGeometría poligonal – vértices, caras, normales
CameraDefinición de cámara virtual
TransformTraslación, rotación y escala locales para un nodo
GlobalTransformTransformación en espacio mundial calculada

Materiales

La biblioteca proporciona un modelo de material PBR (Physically Based Rendering):

  • PbrMaterial – material de renderizado basado en la física con albedo, metalness, roughness, color emisivo y transparencia. Esta es la única clase de material concreta disponible en la edición Java.

Utilidades Matemáticas

El com.aspose.threed El paquete incluye primitivas matemáticas esenciales:

  • Vector3 – vector de 3 componentes para posiciones, direcciones y colores.
  • Matrix4 – matriz de transformación 4x4.
  • Quaternion – representación de rotación.
  • BoundingBox – caja delimitadora alineada al eje para consultas espaciales.
Vector3 a = new Vector3(1, 0, 0);
Vector3 b = new Vector3(0, 1, 0);
Vector3 c = Vector3.add(a, b); // (1, 1, 0)

Opciones de Carga y Guardado

Cada formato tiene clases de opciones dedicadas que le permiten controlar el comportamiento de importación y exportación:

FormatoOpciones de cargaOpciones de guardado
OBJObjLoadOptionsObjSaveOptions
STLStlLoadOptionsStlSaveOptions
glTF / GLBGltfLoadOptionsGltfSaveOptions
FBXFbxLoadOptions– (solo importación)

Por ejemplo, para exportar glTF con JSON con formato legible y un sistema de coordenadas invertido:

GltfSaveOptions opts = new GltfSaveOptions();
opts.setFlipCoordinateSystem(true);
opts.setPrettyPrint(true);

scene.save("output.gltf", opts);

Formatos compatibles

La tabla siguiente resume los formatos que Aspose.3D FOSS para Java puede leer y escribir.

FormatoExtensiónImportarExportarNotas
OBJ.objCon materiales MTL
STL.stlBinario + ASCII
glTF 2.0.gltfFormato JSON
GLB.glbglTF binario mediante GltfSaveOptions
FBX.fbxNoSolo importar

OBJ, STL, glTF y GLB admiten tanto la carga como el guardado. FBX solo es compatible para importación.

Guía de selección de formatos

Elegir el formato adecuado depende de su caso de uso:

  • OBJ es ideal cuando necesitas la máxima compatibilidad entre herramientas 3D. Casi cualquier aplicación de modelado puede leer y escribir OBJ. Funciona bien para el intercambio de datos de malla, pero solo transporta información básica de materiales mediante archivos MTL complementarios.
  • STL STL es el formato de elección para flujos de trabajo de impresión 3D. Almacena geometría triangulada cruda sin materiales ni jerarquía de escena, que es exactamente lo que el software de laminado espera. Si tu canal termina en una impresora 3D, STL es la opción directa.
  • glTF glTF es el estándar moderno para la web y el 3D en tiempo real. Soporta materiales PBR, jerarquías de escena completas y está diseñado para una transmisión eficiente. Use glTF cuando construya visores basados en la web, trabaje con three.js o Babylon.js, o apunte a cualquier pipeline de renderizado en tiempo real.
  • FBX está profundamente integrado en los flujos de trabajo de desarrollo de juegos y creación de contenido digital. Soporta datos de escena ricos, incluidas jerarquías y materiales. Aspose.3D FOSS para Java soporta FBX solo importación – úsalo para cargar activos FBX y convertirlos a otros formatos.

Limitaciones conocidas

Es importante notar que Scene.render() es no es compatible en la edición FOSS. Llamar a este método lanzará una UnsupportedOperationException. La biblioteca está diseñada para el procesamiento 3D basado en archivos – carga, manipulación, transformación y guardado de modelos – en lugar de renderizado en tiempo real a una pantalla.

Código abierto y licenciamiento

Aspose.3D FOSS for Java se publica bajo la Licencia MIT. Esto significa que eres libre de:

  • Utilizar la biblioteca en aplicaciones comerciales y propietarias.
  • Modificar el código fuente para adaptarlo a sus necesidades.
  • Distribuya la biblioteca como parte de su propio software.

No hay tarifas de regalías, no hay límites de uso y no hay requisitos de atribución más allá de lo que especifica la licencia MIT.

El código fuente completo está alojado en GitHub, y se aceptan contribuciones: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java

Requisitos del sistema

RequisitoDetalle
Java versión21 or later
DependenciasNinguna (puro Java)
PlataformasCualquier plataforma que ejecute una JVM
Herramienta de compilaciónMaven (recomendado)

Comenzando

Aquí están los recursos para ayudarle a comenzar:

  • Documentación – guías exhaustivas y recorridos de API están disponibles en el Aspose.3D sitio de documentación.
  • Base de conocimientos – artículos prácticos de cómo hacerlo y consejos de solución de problemas en el Aspose.3D KB.
  • Referencia de API – referencia detallada de clases y métodos en el Aspose.3D Referencia de API.
  • Código fuente – explorar y contribuir en GitHub.
  • Maven Central – el paquete se publica como com.aspose:aspose-3d-foss en Maven Central.

Casos de uso comunes

A continuación se presentan algunos escenarios prácticos donde Aspose.3D FOSS para Java encaja bien:

Flujos de conversión de formatos

Muchos equipos reciben activos 3D en un formato pero los necesitan en otro. Un equipo de diseño podría trabajar en FBX mientras que el equipo web necesita glTF. La biblioteca le permite crear flujos de conversión automatizados:

// Convert all incoming FBX assets to GLB for the web team
Scene scene = Scene.fromFile("asset.fbx");

GltfSaveOptions opts = new GltfSaveOptions();
opts.setContentType(FileContentType.BINARY);

scene.save("asset.glb", opts);

3D Model Inspection and Validation

Antes de integrar un activo 3D en su aplicación, es posible que desee validar su contenido – comprobar el recuento de nodos, verificar la geometría o confirmar que los elementos esperados están presentes:

Scene scene = Scene.fromFile("model.obj");

int nodeCount = scene.getRootNode().getChildNodes().size();
System.out.println("Top-level nodes: " + nodeCount);

for (Node child : scene.getRootNode().getChildNodes()) {
    if (child.getEntity() instanceof Mesh) {
        Mesh mesh = (Mesh) child.getEntity();
        System.out.println(child.getName() + ": "
            + mesh.getControlPoints().size() + " vertices");
    }
}

Ensamblaje de escena

Puede cargar varios modelos y combinarlos en una única escena:

Scene scene = new Scene();

Scene part1 = Scene.fromFile("chassis.obj");
Scene part2 = Scene.fromFile("wheels.obj");

// Add nodes from each part into the combined scene
for (Node child : part1.getRootNode().getChildNodes()) {
    scene.getRootNode().getChildNodes().add(child);
}
for (Node child : part2.getRootNode().getChildNodes()) {
    scene.getRootNode().getChildNodes().add(child);
}

scene.save("assembled.gltf");

Qué sigue

En próximas publicaciones, cubriremos:

  • Una inmersión profunda en las características clave de la API de grafo de escena, los materiales y las utilidades matemáticas.
  • Una guía práctica para trabajar con cada formato 3D compatible – OBJ, STL, glTF y FBX – que incluye opciones de carga/guardado y patrones de conversión por lotes.

Manténgase atento, y siéntase libre de explorar la biblioteca y compartir sus comentarios en GitHub.