package org.osm2world.viewer.view.debug;
import static java.lang.Math.sqrt;
import org.osm2world.core.math.VectorXZ;
import org.osm2world.core.target.common.lighting.GlobalLightingParameters;
import org.osm2world.core.target.common.material.Materials;
import org.osm2world.core.target.jogl.JOGLRenderingParameters;
import org.osm2world.core.target.jogl.JOGLTarget;
public class SkyboxView extends DebugView {
@Override
public String getDescription() {
return "shows a skybox in the background";
};
@Override
public boolean canBeUsed() {
return map != null;
}
@Override
protected void fillTarget(JOGLTarget target) {
target.setGlobalLightingParameters(GlobalLightingParameters.DEFAULT);
// disable backface culling
target.setRenderingParameters(
new JOGLRenderingParameters(null, false, true));
// draw the skybox close to the limits of the viewing distance
double skyboxSize = 1.95 * projection.getFarClippingDistance() / sqrt(3);
target.drawBox(Materials.SKYBOX,
camera.getPos().add(0, -skyboxSize / 2, 0),
VectorXZ.Z_UNIT, skyboxSize, skyboxSize, skyboxSize);
target.finish();
}
@Override
protected void updateTarget(JOGLTarget target, boolean viewChanged) {
if (viewChanged) {
target.reset();
fillTarget(target);
}
}
}