Introducción
Trabajar con contenido 3D en Java generalmente requiere elegir entre peso pesado motores de juego y las bibliotecas de matemáticas de bar-bones. el aspose-3d-foss El paquete ofrece a medio: una API de gráfico de escena centrada que maneja los archivos I/O, las hierarquías de nódulos, construcción de mezquitas, y coordinar transformaciones sin atraer en un rendimiento una cadena de dependencia o un tubo.
Aspose.3D FOSS para Java es una biblioteca de código abierto distribuida bajo la licencia MIT. proporciona 80 clases que se extienden en gestión de escenarios, geometría, materiales y conversión de formato. La biblioteca lee FBX, glTF/GLB, Wavefront OBJ, y STL, e escribe gltF / GLB , OBG, Y STl (exportación de FBx no se implementa), lo que hace práctico para el procesamiento 3D del lado del servidor, integraciones de herramientas de construcción, los tubos de conversion de datos que funcionan en Java 21 o más tarde.
Este post pasa por las capacidades de gestión de escena en la biblioteca: cómo construir una escena desde el escudo, popularla con geometría y transformaciones, y exportar el resultado al disco.
Lo que está incluido
Escena de gráficos básicos
El Scene clase es el contenedor de raíz para cada documento 3D. tiene una raíña Node, metadatos de activos, clips de animación y subescenas. puede crear un vacío escena y luego la popularizar, o cargar un archivo existente con Scene.fromFile.
import com.aspose.threed.Scene;
import com.aspose.threed.Node;
Scene scene = new Scene();
Node root = scene.getRootNode();
// Add named child nodes to build a hierarchy
Node chassis = root.createChildNode("Chassis");
Node wheel = chassis.createChildNode("FrontLeftWheel");
Cada uno Node Puede mantener una Entity (como una de Mesh o Cameray a) Transform, una lista de materiales, y otros nodos infantiles. la estructura del árbol Mirroriza el patrón de escenografía utilizado por la mayoría de las herramientas de escritura 3D.
Mesh Construción
El Mesh La clase le permite definir la geometría desde los puntos de control y el poligono. Indicaciones. añade verticales con addControlPoint,y luego conectarlos a las caras. con createPolygon.
import com.aspose.threed.Mesh;
Mesh box = new Mesh("Box");
// Define eight corners of a cube
box.addControlPoint(0, 0, 0);
box.addControlPoint(1, 0, 0);
box.addControlPoint(1, 1, 0);
box.addControlPoint(0, 1, 0);
box.addControlPoint(0, 0, 1);
box.addControlPoint(1, 0, 1);
box.addControlPoint(1, 1, 1);
box.addControlPoint(0, 1, 1);
// Create quad faces
box.createPolygon(0, 1, 2, 3); // back
box.createPolygon(4, 5, 6, 7); // front
box.createPolygon(0, 4, 7, 3); // left
box.createPolygon(1, 5, 6, 2); // right
box.createPolygon(3, 2, 6, 7); // top
box.createPolygon(0, 1, 5, 4); // bottom
scene.getRootNode().createChildNode("Box", box);
El fuego de la Misa incluye triangulate(), optimize(removeVertices),y Boolean operaciones (union, difference, intersectPero estos métodos están en la versión actual — devuelven un clon del meso de entrada sin realizar La llamada operación.
Transformaciones y posicionamiento
Cada uno Node llevando a Transform que controla su traducción local, la rotación, Estos se componen a través de la jerarquía para que mueve un nodo parental. Moviendo a todos sus hijos.
import com.aspose.threed.Transform;
import com.aspose.threed.Node;
Node node = scene.getRootNode().createChildNode("Shifted");
Transform t = node.getTransform();
t.setTranslation(5.0, 0.0, -3.0);
t.setScale(2.0, 2.0, 2.0);
t.setEulerAngles(0, 45.0, 0);
Para la consulta de posicionamiento absoluto, llame node.getGlobalTransform() para recuperar El compuesto GlobalTransform,o node.evaluateGlobalTransform(true) Para obtener una Matrix4 Esto incluye los offsetes geométricos.
PBR Materiales
El PbrMaterial La clase proporciona propiedades de rendimiento físicamente basadas: color albedo, factor metálico, rugura, color emissivo y transparencia. Asignar un material a un nodo al crear el niño.
import com.aspose.threed.PbrMaterial;
import com.aspose.threed.Vector4;
import com.aspose.threed.Vector3;
PbrMaterial mat = new PbrMaterial("RedMetal");
mat.setAlbedo(new Vector4(0.9, 0.1, 0.1, 1.0));
mat.setMetallicFactor(0.8);
mat.setRoughnessFactor(0.3);
mat.setEmissiveColor(new Vector3(0, 0, 0));
scene.getRootNode().createChildNode("Part", box, mat);
Detección de formato
El FileFormat clase proporciona utilidades de búsqueda estática y detección. Resolver un formato por extensión de archivo o probar una corriente para identificar archivos desconocidos.
import com.aspose.threed.FileFormat;
FileFormat fmt = FileFormat.getFormatByExtension("model.glb");
boolean canRead = fmt.getCanImport();
boolean canWrite = fmt.getCanExport();
Conversión de sistemas coordinados
AxisSystem te permite definir el ascenso, el frontal y la manedez de un El sistema de coordinación, luego computa a Matrix4 La transformación de la geometría entre los convenciones (por ejemplo, desde un sistema de mano derecha Z-up a un Y-Up de la mano izquierda).
import com.aspose.threed.AxisSystem;
import com.aspose.threed.Axis;
import com.aspose.threed.CoordinateSystem;
import com.aspose.threed.Matrix4;
AxisSystem source = new AxisSystem(
CoordinateSystem.RIGHT_HANDED, Axis.Z_AXIS, Axis.Y_AXIS);
AxisSystem target = new AxisSystem(
CoordinateSystem.LEFT_HANDED, Axis.Y_AXIS, Axis.Z_AXIS);
Matrix4 conversion = source.transformTo(target);
Inicio rápido
Añade la dependencia de Maven:
<dependency>
<groupId>org.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.5.0</version>
</dependency>Construye una escena sencilla y exportarla:
import com.aspose.threed.Scene;
import com.aspose.threed.Mesh;
import com.aspose.threed.Node;
import com.aspose.threed.StlSaveOptions;
import com.aspose.threed.FileContentType;
Scene scene = new Scene();
Mesh mesh = new Mesh("Triangle");
mesh.addControlPoint(0, 0, 0);
mesh.addControlPoint(1, 0, 0);
mesh.addControlPoint(0, 1, 0);
mesh.createPolygon(0, 1, 2);
scene.getRootNode().createChildNode("Shape", mesh);
StlSaveOptions opts = new StlSaveOptions();
opts.setContentType(FileContentType.BINARY);
scene.save("output.stl", opts);
Formatos apoyados
| Formato | Extensiones | Leer | Escribe |
|---|---|---|---|
| FBX (ASCII y Binario, 6.x-7.x) | .fbx | Sí | No |
| GST 1.0 / 2.0 | .gltf | Sí | Sí |
| GSTB Binario | .glb | Sí | Sí |
| El Wavefront OBJ | .obj | Sí | Sí |
| STL (ASCII y Binario) | .stl | Sí | Sí |
Cada formato se dedica a LoadOptions y SaveOptions Los subgrupos (por El ejemplo, FbxLoadOptions, GltfSaveOptions, StlSaveOptionsque exponen configuraciones específicas de formato como el flipping de coordenadas y el tipo de contenido La Selección.
Open Source y Licenciación
Aspose.3D FOSS para Java se libera bajo la licencia MIT. Disponible en GitHub Aspose.3D-FOSS para Java. Puedes utilizar, modificar y redistribuir la biblioteca en forma comercial y Proyectos no comerciales sin restricciones.
Empezando a
- Guía de desarrollador - API walkthroughs y Modelos de uso
- Base de conocimientos - Cómo hacer artículos y FAQs
- El referente de API - Clase completo y Documentación de métodos