SinglePass now uses the TechniqueDef LightSpace.

The single pass material definition LightSpace has been set to View until we implement it in world space.
define_list_fix
Nehon 10 years ago
parent d662eadce9
commit cecf355c70
  1. 21
      jme3-core/src/main/java/com/jme3/material/Material.java
  2. 1
      jme3-core/src/main/resources/Common/MatDefs/Light/Lighting.j3md

@ -788,9 +788,8 @@ public class Material implements CloneableSmartAsset, Cloneable, Savable {
Vector3f dir = dl.getDirection();
//Data directly sent in view space to avoid a matrix mult for each pixel
tmpVec.set(dir.getX(), dir.getY(), dir.getZ(), 0.0f);
rm.getCurrentCamera().getViewMatrix().mult(tmpVec, tmpVec);
// tmpVec.divideLocal(tmpVec.w);
// tmpVec.normalizeLocal();
transposeLightDataToSpace(technique.getDef().getLightSpace(), rm, tmpVec);
lightData.setVector4InArray(tmpVec.getX(), tmpVec.getY(), tmpVec.getZ(), -1, lightDataIndex);
lightDataIndex++;
//PADDING
@ -802,8 +801,8 @@ public class Material implements CloneableSmartAsset, Cloneable, Savable {
Vector3f pos = pl.getPosition();
float invRadius = pl.getInvRadius();
tmpVec.set(pos.getX(), pos.getY(), pos.getZ(), 1.0f);
rm.getCurrentCamera().getViewMatrix().mult(tmpVec, tmpVec);
//tmpVec.divideLocal(tmpVec.w);
transposeLightDataToSpace(technique.getDef().getLightSpace(), rm, tmpVec);
lightData.setVector4InArray(tmpVec.getX(), tmpVec.getY(), tmpVec.getZ(), invRadius, lightDataIndex);
lightDataIndex++;
//PADDING
@ -817,17 +816,13 @@ public class Material implements CloneableSmartAsset, Cloneable, Savable {
float invRange = sl.getInvSpotRange();
float spotAngleCos = sl.getPackedAngleCos();
tmpVec.set(pos2.getX(), pos2.getY(), pos2.getZ(), 1.0f);
rm.getCurrentCamera().getViewMatrix().mult(tmpVec, tmpVec);
// tmpVec.divideLocal(tmpVec.w);
transposeLightDataToSpace(technique.getDef().getLightSpace(), rm, tmpVec);
lightData.setVector4InArray(tmpVec.getX(), tmpVec.getY(), tmpVec.getZ(), invRange, lightDataIndex);
lightDataIndex++;
//We transform the spot direction in view space here to save 5 varying later in the lighting shader
//one vec4 less and a vec4 that becomes a vec3
//the downside is that spotAngleCos decoding happens now in the frag shader.
tmpVec.set(dir2.getX(), dir2.getY(), dir2.getZ(), 0.0f);
rm.getCurrentCamera().getViewMatrix().mult(tmpVec, tmpVec);
tmpVec.normalizeLocal();
transposeLightDataToSpace(technique.getDef().getLightSpace(), rm, tmpVec);
lightData.setVector4InArray(tmpVec.getX(), tmpVec.getY(), tmpVec.getZ(), spotAngleCos, lightDataIndex);
lightDataIndex++;
break;
@ -956,7 +951,7 @@ public class Material implements CloneableSmartAsset, Cloneable, Savable {
private void transposeLightDataToSpace(TechniqueDef.LightSpace space, RenderManager rm, Vector4f store){
if(space == TechniqueDef.LightSpace.View){
rm.getCurrentCamera().getViewMatrix().mult(store, store);
rm.getCurrentCamera().getViewMatrix().mult(store, store);
}
};

@ -117,6 +117,7 @@ MaterialDef Phong Lighting {
Technique {
LightMode SinglePass
LightSpace View
VertexShader GLSL100: Common/MatDefs/Light/SPLighting.vert
FragmentShader GLSL100: Common/MatDefs/Light/SPLighting.frag

Loading…
Cancel
Save