private void refreshLimits() { float minX = Float.POSITIVE_INFINITY; float maxX = Float.NEGATIVE_INFINITY; float minY = Float.POSITIVE_INFINITY; float maxY = Float.NEGATIVE_INFINITY; float minZ = Float.POSITIVE_INFINITY; float maxZ = Float.NEGATIVE_INFINITY; for (Octant o : leaves) { float octanSize = o.getSize() / 2f; minX = Math.min(minX, o.getPosX() - octanSize); maxX = Math.max(maxX, o.getPosX() + octanSize); minY = Math.min(minY, o.getPosY() - octanSize); maxY = Math.max(maxY, o.getPosY() + octanSize); minZ = Math.min(minZ, o.getPosZ() - octanSize); maxZ = Math.max(maxZ, o.getPosZ() + octanSize); } int viewportMinX = Integer.MAX_VALUE; int viewportMaxX = Integer.MIN_VALUE; int viewportMinY = Integer.MAX_VALUE; int viewportMaxY = Integer.MIN_VALUE; double[] point; point = drawable.myGluProject(minX, minY, minZ); // bottom far left viewportMinX = Math.min(viewportMinX, (int) point[0]); viewportMinY = Math.min(viewportMinY, (int) point[1]); viewportMaxX = Math.max(viewportMaxX, (int) point[0]); viewportMaxY = Math.max(viewportMaxY, (int) point[1]); point = drawable.myGluProject(minX, minY, maxZ); // bottom near left viewportMinX = Math.min(viewportMinX, (int) point[0]); viewportMinY = Math.min(viewportMinY, (int) point[1]); viewportMaxX = Math.max(viewportMaxX, (int) point[0]); viewportMaxY = Math.max(viewportMaxY, (int) point[1]); point = drawable.myGluProject(minX, maxY, maxZ); // up near left viewportMinX = Math.min(viewportMinX, (int) point[0]); viewportMinY = Math.min(viewportMinY, (int) point[1]); viewportMaxX = Math.max(viewportMaxX, (int) point[0]); viewportMaxY = Math.max(viewportMaxY, (int) point[1]); point = drawable.myGluProject(maxX, minY, maxZ); // bottom near right viewportMinX = Math.min(viewportMinX, (int) point[0]); viewportMinY = Math.min(viewportMinY, (int) point[1]); viewportMaxX = Math.max(viewportMaxX, (int) point[0]); viewportMaxY = Math.max(viewportMaxY, (int) point[1]); point = drawable.myGluProject(maxX, minY, minZ); // bottom far right viewportMinX = Math.min(viewportMinX, (int) point[0]); viewportMinY = Math.min(viewportMinY, (int) point[1]); viewportMaxX = Math.max(viewportMaxX, (int) point[0]); viewportMaxY = Math.max(viewportMaxY, (int) point[1]); point = drawable.myGluProject(maxX, maxY, minZ); // up far right viewportMinX = Math.min(viewportMinX, (int) point[0]); viewportMinY = Math.min(viewportMinY, (int) point[1]); viewportMaxX = Math.max(viewportMaxX, (int) point[0]); viewportMaxY = Math.max(viewportMaxY, (int) point[1]); point = drawable.myGluProject(maxX, maxY, maxZ); // up near right viewportMinX = Math.min(viewportMinX, (int) point[0]); viewportMinY = Math.min(viewportMinY, (int) point[1]); viewportMaxX = Math.max(viewportMaxX, (int) point[0]); viewportMaxY = Math.max(viewportMaxY, (int) point[1]); point = drawable.myGluProject(minX, maxY, minZ); // up far left viewportMinX = Math.min(viewportMinX, (int) point[0]); viewportMinY = Math.min(viewportMinY, (int) point[1]); viewportMaxX = Math.max(viewportMaxX, (int) point[0]); viewportMaxY = Math.max(viewportMaxY, (int) point[1]); limits.setMinXoctree(minX); limits.setMaxXoctree(maxX); limits.setMinYoctree(minY); limits.setMaxYoctree(maxY); limits.setMinZoctree(minZ); limits.setMaxZoctree(maxZ); limits.setMinXviewport(viewportMinX); limits.setMaxXviewport(viewportMaxX); limits.setMinYviewport(viewportMinY); limits.setMaxYviewport(viewportMaxY); }