private boolean isTexturable( MeshFragment fragment ) { float[][] scaledBBox = new float[2][3]; scaledBBox[0] = Arrays.copyOf( fragment.bbox[0], 3 ); scaledBBox[1] = Arrays.copyOf( fragment.bbox[1], 3 ); scaledBBox[0][2] *= zScale; scaledBBox[1][2] *= zScale; float[] eyePos = new float[3]; eyePos[0] = (float) viewRegion.getEyePos().x; eyePos[1] = (float) viewRegion.getEyePos().y; eyePos[2] = (float) viewRegion.getEyePos().z; float dist = VectorUtils.getDistance( scaledBBox, eyePos ); double pixelSize = viewParams.estimatePixelSizeForSpaceUnit( dist ); double metersPerPixel = maxProjectedTexelSize / pixelSize; double resolution = getFinestTextureResolution( metersPerPixel ); if ( resolution <= 0.00001 ) { resolution = 0.00001; } double textureSize = getMaxSideLen( fragment ) / resolution; LOG.debug( "Side len: " + getMaxSideLen( fragment ) + ", resolution: " + resolution + ", texture size: " + textureSize ); if ( textureSize > maxTextureSize ) { LOG.debug( "Side len: " + getMaxSideLen( fragment ) + ", resolution: " + resolution + ", texture size: " + textureSize ); } else { LOG.debug( "No refinement needed, Side len: " + getMaxSideLen( fragment ) + ", resolution: " + resolution + ", texture size: " + textureSize ); } return textureSize <= maxTextureSize; }
double pixelSize = params.estimatePixelSizeForSpaceUnit( dist ); double requiredUnitsPerPixel = maxProjectedTexelSize / pixelSize;
double distance = VectorUtils.getDistance( envelope, eye ); double estimatePixel = viewParams.estimatePixelSizeForSpaceUnit( distance ); double estError = estimatePixel * maxError; if ( distance <= 1E-10 || ( estError > maxPixelError ) ) { for ( Entry<T> obj : leafObjects ) { distance = Vectors3f.distance( eye, 0, obj.entryEnv, 0 ); double estPixelSize = viewParams.estimatePixelSizeForSpaceUnit( distance ); boolean noPixelError = ( obj.entryValue.getErrorScalar() * estPixelSize ) > maxPixelError; boolean intersects = viewParams.getViewFrustum().intersects( obj.entryEnv );
/** * Checks whether the screen-space error (after perspective projection) introduced by the fragments of the * {@link Arc} is acceptable. * * @param arc * @return true, if all fragments are fine */ private boolean isScreenSpaceErrorAcceptable( Arc arc ) { float[][] scaledBBox = arc.getBBox(); scaledBBox[0][2] *= zScale; scaledBBox[1][2] *= zScale; float[] eyePos = new float[3]; eyePos[0] = (float) viewRegion.getEyePos().x; eyePos[1] = (float) viewRegion.getEyePos().y; eyePos[2] = (float) viewRegion.getEyePos().z; float dist = VectorUtils.getDistance( scaledBBox, eyePos ); double projectionFactor = viewParams.estimatePixelSizeForSpaceUnit( dist ); double screenError = projectionFactor * arc.geometricError; // System.out.println ("error: " + arc.geometryError); // System.out.println ("screen error: " + screenError); return screenError <= maxPixelError; }
double distance = Vectors3f.distance( eye, position ); double worldSize = viewParams.estimatePixelSizeForSpaceUnit( distance ); for ( ; level >= 0 && result == -1; --level ) { if ( worldSize >= max( level ) ) {