parent
47b34c6de5
commit
ec0fcd24d2
@ -0,0 +1,99 @@ |
||||
/* |
||||
* Copyright (c) 2009-2017 jMonkeyEngine |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are |
||||
* met: |
||||
* |
||||
* * Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* |
||||
* * Redistributions in binary form must reproduce the above copyright |
||||
* notice, this list of conditions and the following disclaimer in the |
||||
* documentation and/or other materials provided with the distribution. |
||||
* |
||||
* * Neither the name of 'jMonkeyEngine' nor the names of its contributors |
||||
* may be used to endorse or promote products derived from this software |
||||
* without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED |
||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR |
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR |
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF |
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING |
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
*/ |
||||
package com.jme3.shadow.next.array; |
||||
|
||||
import com.jme3.light.Light; |
||||
import com.jme3.light.Light.Type; |
||||
import com.jme3.light.PointLight; |
||||
import com.jme3.math.Quaternion; |
||||
import com.jme3.math.Vector3f; |
||||
import com.jme3.renderer.RenderManager; |
||||
import com.jme3.renderer.ViewPort; |
||||
import com.jme3.renderer.queue.GeometryList; |
||||
import com.jme3.texture.TextureArray; |
||||
|
||||
/** |
||||
* @author Kirill Vainer |
||||
*/ |
||||
public class PointArrayShadowMap extends BaseArrayShadowMap<PointArrayShadowMapSlice> { |
||||
|
||||
private final PointLight light; |
||||
|
||||
private static final Quaternion[] ROTATIONS = new Quaternion[6]; |
||||
|
||||
static { |
||||
for (int i = 0; i < ROTATIONS.length; i++) { |
||||
ROTATIONS[i] = new Quaternion(); |
||||
} |
||||
|
||||
// left
|
||||
ROTATIONS[0].fromAxes(Vector3f.UNIT_Z, Vector3f.UNIT_Y, Vector3f.UNIT_X.mult(-1f)); |
||||
|
||||
// right
|
||||
ROTATIONS[1].fromAxes(Vector3f.UNIT_Z.mult(-1f), Vector3f.UNIT_Y, Vector3f.UNIT_X); |
||||
|
||||
// bottom
|
||||
ROTATIONS[2].fromAxes(Vector3f.UNIT_X.mult(-1f), Vector3f.UNIT_Z.mult(-1f), Vector3f.UNIT_Y.mult(-1f)); |
||||
|
||||
// top
|
||||
ROTATIONS[3].fromAxes(Vector3f.UNIT_X.mult(-1f), Vector3f.UNIT_Z, Vector3f.UNIT_Y); |
||||
|
||||
// forward
|
||||
ROTATIONS[4].fromAxes(Vector3f.UNIT_X.mult(-1f), Vector3f.UNIT_Y, Vector3f.UNIT_Z.mult(-1f)); |
||||
|
||||
// backward
|
||||
ROTATIONS[5].fromAxes(Vector3f.UNIT_X, Vector3f.UNIT_Y, Vector3f.UNIT_Z); |
||||
} |
||||
|
||||
public PointArrayShadowMap(PointLight light, TextureArray array, int firstArraySlice, int textureSize) { |
||||
super(array, firstArraySlice); |
||||
this.light = light; |
||||
this.slices = new PointArrayShadowMapSlice[6]; |
||||
for (int i = 0; i < slices.length; i++) { |
||||
this.slices[i] = new PointArrayShadowMapSlice(array, firstArraySlice + i, textureSize, ROTATIONS[i]); |
||||
} |
||||
} |
||||
|
||||
public void renderShadowMap(RenderManager renderManager, ViewPort viewPort, GeometryList shadowCasters) { |
||||
for (int i = 0; i < slices.length; i++) { |
||||
shadowCasters.clear(); |
||||
slices[i].updateShadowCamera(viewPort, light, shadowCasters); |
||||
slices[i].renderShadowMap(renderManager, light, viewPort, shadowCasters); |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public Light.Type getLightType() { |
||||
return Type.Point; |
||||
} |
||||
|
||||
} |
@ -0,0 +1,60 @@ |
||||
/* |
||||
* Copyright (c) 2009-2017 jMonkeyEngine |
||||
* All rights reserved. |
||||
* |
||||
* Redistribution and use in source and binary forms, with or without |
||||
* modification, are permitted provided that the following conditions are |
||||
* met: |
||||
* |
||||
* * Redistributions of source code must retain the above copyright |
||||
* notice, this list of conditions and the following disclaimer. |
||||
* |
||||
* * Redistributions in binary form must reproduce the above copyright |
||||
* notice, this list of conditions and the following disclaimer in the |
||||
* documentation and/or other materials provided with the distribution. |
||||
* |
||||
* * Neither the name of 'jMonkeyEngine' nor the names of its contributors |
||||
* may be used to endorse or promote products derived from this software |
||||
* without specific prior written permission. |
||||
* |
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED |
||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR |
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR |
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF |
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING |
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
*/ |
||||
package com.jme3.shadow.next.array; |
||||
|
||||
import com.jme3.light.PointLight; |
||||
import com.jme3.math.Quaternion; |
||||
import com.jme3.renderer.ViewPort; |
||||
import com.jme3.renderer.queue.GeometryList; |
||||
import com.jme3.renderer.queue.RenderQueue.ShadowMode; |
||||
import com.jme3.scene.Spatial; |
||||
import com.jme3.shadow.ShadowUtil; |
||||
import com.jme3.texture.TextureArray; |
||||
|
||||
/** |
||||
* @author Kirill Vainer |
||||
*/ |
||||
public class PointArrayShadowMapSlice extends BaseArrayShadowMapSlice<PointLight> { |
||||
|
||||
public PointArrayShadowMapSlice(TextureArray array, int layer, int textureSize, Quaternion axes) { |
||||
super(array, layer, textureSize, false); |
||||
shadowCamera.setAxes(axes); |
||||
} |
||||
|
||||
public void updateShadowCamera(ViewPort viewPort, PointLight light, GeometryList shadowCasters) { |
||||
shadowCamera.setFrustumPerspective(90f, 1f, 0.1f, light.getRadius()); |
||||
shadowCamera.setLocation(light.getPosition()); |
||||
for (Spatial scene : viewPort.getScenes()) { |
||||
ShadowUtil.getGeometriesInCamFrustum(scene, shadowCamera, ShadowMode.Cast, shadowCasters); |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue