A színpad grafikusával dolgozunk

A színpad grafikusával dolgozunk

A színpad grafikusával dolgozunk

Minden 3D-s jelenet az Aspose.3D for Java szervezett, mint egy fa a Node Az objektumok. Scene Egyetlen gyökér - getRootNode() - és a geometria minden darabja, anyag, és átalakítja az életet ezen gyökér alatt gyermekként vagy utódszögként.


A jelenet létrehozása és a root-noda hozzáférése

Scene automatikusan kezdi a root-nódot, amelyet "RootNode":

import com.aspose.threed.Scene;
import com.aspose.threed.Node;

Scene scene = new Scene();
Node root = scene.getRootNode(); // always "RootNode"

Gyermekek Nódok hozzáadása

hívás createChildNode() A módszer három gyakran használt túlterhelés:

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);

A külön épített csomóponthoz csatlakoztatni, használja a addChildNode():

Node detached = new Node("standalone");
root.addChildNode(detached);

A gyermekek szájürege

Keresse meg a közvetlen gyermeket név szerint vagy index alapján, vagy iterálja az összes közvetett gyermek:

// 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) Csak keresés Közvetlen gyerekek,Nem a teljes aljzat. megjegyezzük, hogy accept() csak az úgynevezett csomópontot látogat; iterate getChildNodes() A fát újra keressük, hogy az egész fa.


A teljes fa átjárása

node.accept(NodeVisitor) csak az úgynevezett csomópontot látogat - nem fordul vissza a gyermekekbe. getChildNodes() Visszatérő: a látogató visszatér true folytatni vagy false A korai megállás:

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 Egy módszerű felület, így elfogadja a lambda Java 8+.


A láthatóság és az export kizárása ellenőrzése

A csomópontokat az exportból el lehet rejtőzni vagy kizárni anélkül, hogy azokat a hierarchiából eltávolítanák:

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 operations

setVisible(false) Ez egy mutató. setExcluded(true) megakadályozza, hogy a csomópont megjelenjen az exportált fájlokban formátumtól függetlenül.


Több szervezet csatlakoztatása egy csomóponthoz

A node egy Elsődleges A szervezet (getEntity() / setEntity()- a további szervezetek által biztosított addEntity().Ez akkor hasznos, ha a különböző mezh darabok egy transzformációt osztanak:

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());
}

Nódok megközelítése

merge() Minden gyermeket, szervezeteket és anyagot egy forráskódból a célkódba mozgat.A forráskoda üres marad:

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 empty


Gyors referenciák API

tagjaleírás
scene.getRootNode()A színpad gyökere; mindig jelen van a new Scene()
node.createChildNode(name)Hozzon létre egy nevet a gyermek csomópontot, amelyben nincs entitás
node.createChildNode(name, entity)Hozzon létre egy gyermek-nútot egy entitással
node.createChildNode(name, entity, material)Hozzon létre egy nevet gyermek csomópontot entitással és anyaggal
node.addChildNode(node)Egy külön épített Node
node.getChild(name)Keres egy közvetlen gyermek nevén; visszatér null Ha nem találták meg
node.getChild(index)A gyermeket egy adott indexre kell megkapni.
node.getChildNodes()List<Node> Minden közvetlen gyermek
node.accept(visitor)Csak ezt a csomót látogasson el (nem fordul elő gyermekekhez)
node.addEntity(entity)Hozzon hozzá egy további egységet a csomóponthoz
node.getEntities()List<Entity> Az összes egység ezen a csomóponton
node.setVisible(bool)Megjelenítse vagy elrejti a csomót
node.setExcluded(bool)A csomópont beépítése vagy kizárása az exportból
node.merge(other)Minden gyermek és szervezet elmozdulása a other Ebben a csomópontban
 Magyar