Trabajando con el escenario gráfico
Trabajando con el escenario gráfico
Cada escena 3D en Aspose.3D para Java se organiza como un árbol de Node Objetos →. Scene que tiene una sola raíz - getRootNode() y cada pieza de geometría, material y transformación de la vida bajo esa raíz como un niño o nodo descendiente.
Crear la escena y acceder al nodo de raíz
Scene Inicializa automáticamente con un nodo de raíz llamado "RootNode":
import com.aspose.threed.Scene;
import com.aspose.threed.Node;
Scene scene = new Scene();
Node root = scene.getRootNode(); // always "RootNode"Adjuntar Nodos Infantil
llamadas createChildNode() El método tiene tres sobrecargas comunmente utilizadas:
import com.aspose.threed.*;
Scene scene = new Scene();
Node root = scene.getRootNode();
// 1. Named node with no entity — useful as a pivot or group container
Node pivot = root.createChildNode("pivot");
// 2. Named node with an entity
Mesh mesh = new Mesh("box");
mesh.getControlPoints().add(new Vector4(0, 0, 0));
mesh.getControlPoints().add(new Vector4(1, 0, 0));
mesh.getControlPoints().add(new Vector4(1, 1, 0));
mesh.getControlPoints().add(new Vector4(0, 1, 0));
mesh.createPolygon(0, 1, 2, 3);
Node meshNode = root.createChildNode("box", mesh);
// 3. Named node with entity and material
PbrMaterial mat = new PbrMaterial("red");
mat.setAlbedo(new Vector4(0.8f, 0.2f, 0.2f, 1.0f));
Node decorated = pivot.createChildNode("red_box", mesh, mat);Para adjuntar un nodo que se construyó separadamente, utiliza el addChildNode():
Node detached = new Node("standalone");
root.addChildNode(detached);Quería niños Nodes
Encuentra un niño directo por nombre o por índice, o iterate a todos los niños directos:
// By name — returns null if no direct child has that name
Node found = root.getChild("box");
if (found != null) {
System.out.println("Found: " + found.getName());
}
// By index
Node first = root.getChild(0);
// Iterate all direct children
for (Node child : root.getChildNodes()) {
System.out.println(child.getName());
}
getChild(String name)Buscar sólo Los niños directos,No es el submarino, no hay que olvidar queaccept()Visita sólo el llamado nodo; iterategetChildNodes()recursivamente para buscar todo el árbol.
Viajar por el árbol completo
node.accept(NodeVisitor) Visita sólo el llamado nodo — no recorre a los niños. Para cruzar la árbol completa, iterate getChildNodes() El visitante vuelve.El visitador vuelva. true para continuar o false Para detener temprano:
import com.aspose.threed.NodeVisitor;
// Print every node name in the scene
scene.getRootNode().accept(n -> {
System.out.println(n.getName());
return true; // false would stop traversal
});
// Stop after finding the first node that has an entity
final Node[] found = {null};
scene.getRootNode().accept(n -> {
if (n.getEntity() != null) {
found[0] = n;
return false; // stop walking
}
return true;
});NodeVisitor Es una interfaz de método único, por lo que acepta un lambda en Java 8+.
Control de visibilidad y exclusión de exportación
Los nodos pueden ser escondidos o excluidos de la exportación sin ser eliminados de las hierarquías:
Node ground = root.createChildNode("ground_plane", mesh);
ground.setVisible(false); // hidden in viewport / renderer
Node helperNode = root.createChildNode("debug_arrow", mesh);
helperNode.setExcluded(true); // omitted from all export operationssetVisible(false) Es un indicador de muestra. setExcluded(true) impide que el nodo aparezca en los archivos exportados, independientemente del formato.
Añadir múltiples entidades a un nodo
Un nodo tiene una Primaria El organismo (getEntity() / setEntity()(), pero puede mantener otras entidades a través de la addEntity().Esto es útil cuando diferentes piezas de mezquita comparten una sola transformación:
Mesh body = new Mesh("body");
Mesh wheel = new Mesh("wheel");
Node carNode = root.createChildNode("car");
carNode.addEntity(body);
carNode.addEntity(wheel);
// Retrieve all entities on this node
for (Entity ent : carNode.getEntities()) {
System.out.println(ent.getName());
}Mergir Nodes
merge() moverse todos los niños, entidades y materiales de un nodo fuente al nódulo objetivo. el node fuentes se deja vacío:
Node lod0 = root.createChildNode("lod0");
lod0.createChildNode("mesh_high", mesh);
Node lod1 = root.createChildNode("lod1");
lod1.createChildNode("mesh_low", mesh);
// Consolidate lod0 children into lod1
lod1.merge(lod0);
// lod1 now has both mesh_high and mesh_low; lod0 is emptyAPI de referencia rápida
| Miembro | Descripción |
|---|---|
scene.getRootNode() | La raíz del árbol de la escena; siempre presente después new Scene() |
node.createChildNode(name) | Crea un nodo infantil llamado sin entidad |
node.createChildNode(name, entity) | Crea un nodo infantil con una entidad |
node.createChildNode(name, entity, material) | Crea un nodo infantil con entidad y material |
node.addChildNode(node) | Un edificio construido separadamente Node |
node.getChild(name) | Encuentra un niño directo por nombre; regresa null Si no se encuentra |
node.getChild(index) | Obtenga al niño en un índice dado |
node.getChildNodes() | List<Node> de todos los niños directos |
node.accept(visitor) | Visite sólo este nodo (no recorre a los niños) |
node.addEntity(entity) | Añadir una entidad adicional al nodo |
node.getEntities() | List<Entity> de todas las entidades en este nodo |
node.setVisible(bool) | Mostrar o ocultar el nodo |
node.setExcluded(bool) | Incluir o excluirse el nodo de la exportación |
node.merge(other) | Moverse a todos los niños y entidades de la other En este nodo |