List of usage examples for javax.media.j3d BoundingBox getUpper
public void getUpper(Point3d p1)
From source file:Math3D.java
/** * Returns true if the parent bounds fully encloses the child *//*from w w w.j a v a2s. com*/ public static boolean encloses(BoundingBox parent, BoundingSphere child) { Point3d upper = new Point3d(); Point3d lower = new Point3d(); Point3d center = new Point3d(); double radius; parent.getUpper(upper); parent.getLower(lower); child.getCenter(center); radius = child.getRadius(); if (center.x + radius > upper.x || center.y + radius > upper.y || center.z + radius > upper.z) return false; if (center.x - radius < lower.x || center.y - radius < lower.y || center.z - radius < lower.z) return false; return true; }
From source file:Math3D.java
/** * Returns true if the parent bounds fully encloses the child *//*from w w w .j a va 2 s. co m*/ public static boolean encloses(BoundingBox parent, BoundingBox child) { Point3d pUpper = new Point3d(); Point3d pLower = new Point3d(); Point3d cUpper = new Point3d(); Point3d cLower = new Point3d(); parent.getUpper(pUpper); parent.getLower(pLower); child.getUpper(cUpper); child.getLower(cLower); if (cUpper.x > pUpper.x || cUpper.y > pUpper.y || cUpper.z > pUpper.z) return false; if (cLower.x < pLower.x || cLower.y < pLower.y || cLower.z < pLower.z) return false; return true; }
From source file:Math3D.java
/** * Returns true if the parent bounds fully encloses the child *//*from w ww .j a v a2 s .c o m*/ public static boolean encloses(BoundingSphere parent, BoundingBox child) { // if the distance from the center of the sphere to any corner of // the box is greater than the sphere radius return false Point3d lower = new Point3d(); Point3d upper = new Point3d(); Point3d parentCenter = new Point3d(); child.getLower(lower); child.getUpper(upper); parent.getCenter(parentCenter); double xDim = upper.x - lower.x; double yDim = upper.y - lower.y; double radiusSquared = Math.pow(parent.getRadius(), 2); Vector3d tmp = new Vector3d(); tmp.set(lower); tmp.sub(parentCenter); if (tmp.lengthSquared() > radiusSquared) return false; tmp.set(lower.x + xDim, lower.y, lower.z); tmp.sub(parentCenter); if (tmp.lengthSquared() > radiusSquared) return false; tmp.set(lower.x, lower.y + yDim, lower.z); tmp.sub(parentCenter); if (tmp.lengthSquared() > radiusSquared) return false; tmp.set(lower.x + xDim, lower.y + yDim, lower.z); tmp.sub(parentCenter); if (tmp.lengthSquared() > radiusSquared) return false; tmp.set(upper); tmp.sub(parentCenter); if (tmp.lengthSquared() > radiusSquared) return false; tmp.set(upper.x - xDim, upper.y, upper.z); tmp.sub(parentCenter); if (tmp.lengthSquared() > radiusSquared) return false; tmp.set(upper.x, upper.y - yDim, upper.z); tmp.sub(parentCenter); if (tmp.lengthSquared() > radiusSquared) return false; tmp.set(upper.x - xDim, upper.y - yDim, upper.z); tmp.sub(parentCenter); if (tmp.lengthSquared() > radiusSquared) return false; return true; }
From source file:ExDepthCue.java
public Group buildScene() { // Get the current color Color3f color = (Color3f) colors[currentColor].value; // Turn off the example headlight setHeadlightEnable(false);/*from w ww .j av a 2 s .c om*/ // Create the scene group Group scene = new Group(); // Create a switch group to hold the fog node. This enables // us to turn the fog node on and off via the GUI. fogSwitch = new Switch(); fogSwitch.setCapability(Switch.ALLOW_SWITCH_WRITE); // Create influencing bounds Bounds worldBounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), // Center 1000.0); // Extent // Set the fog color, density, and its influencing bounds fog = new LinearFog(); fog.setColor(color); // front and back distances set below fog.setCapability(Fog.ALLOW_COLOR_WRITE); fog.setCapability(Fog.ALLOW_INFLUENCING_BOUNDS_WRITE); fog.setInfluencingBounds(worldBounds); fogSwitch.addChild(fog); scene.addChild(fogSwitch); if (depthCueOnOff) fogSwitch.setWhichChild(0); // on else fogSwitch.setWhichChild(Switch.CHILD_NONE); // off // Set the background color and its application bounds // Usually, the background color should match the fog color // or the results look odd. background = new Background(); background.setColor(color); background.setApplicationBounds(worldBounds); background.setCapability(Background.ALLOW_COLOR_WRITE); scene.addChild(background); // Build foreground geometry Group content = buildIsoline(); scene.addChild(content); // Automatically compute good front and back distances for // fog to get good depth-cueing. To do this, first get the // dimensions of the bounds around the content. Then, // set the front distance to be at the center of the content // (or closer by a tad) and the back distance at the front // distance PLUS half the depth of the content's bounding box BoundingSphere sampleSphere = new BoundingSphere(); BoundingBox sampleBox = new BoundingBox(); Bounds bounds = content.getBounds(); double deltaDistance = 0.0; double centerZ = 0.0; if (bounds == null) { // No bounds available. Estimate the values knowing // that the above content is what it is. centerZ = 0.5; // 0.5 closer than true center deltaDistance = 2.0; } else if (bounds.getClass() == sampleSphere.getClass()) { BoundingSphere sphereBounds = (BoundingSphere) bounds; deltaDistance = Math.abs(sphereBounds.getRadius()); Point3d center = new Point3d(); sphereBounds.getCenter(center); centerZ = center.z + 0.5; // 0.5 closer than true center } else if (bounds.getClass() == sampleBox.getClass()) { BoundingBox boxBounds = (BoundingBox) bounds; Point3d p1 = new Point3d(); Point3d p2 = new Point3d(); boxBounds.getLower(p1); boxBounds.getUpper(p2); deltaDistance = p2.z - p1.z; if (deltaDistance < 0.0) deltaDistance *= -1.0; if (p1.z > p2.z) centerZ = p1.z - deltaDistance / 2.0; else centerZ = p2.z - deltaDistance / 2.0; centerZ += 0.5; // 0.5 closer than true center } else { System.err.println("Unknown bounds type"); } // Set front distance to the distance from the default // viewing position (0,0,10) to the center of the bounds. fog.setFrontDistance(10.0f - (float) centerZ); // Set back distance to the distance from the default // viewing position (0,0,10) to the back of the bounds. fog.setBackDistance(10.0f - (float) centerZ + (float) deltaDistance); return scene; }