Ogre importer ignores receive_shadows issue #647

This commit is contained in:
ThoCed 2018-01-14 10:56:36 +01:00 committed by Nehon
parent 8f1ee0ec9a
commit b2717e19ef
2 changed files with 17 additions and 4 deletions

View File

@ -69,6 +69,7 @@ public class MaterialLoader implements AssetLoader {
private boolean twoSide = false;
private boolean noLight = false;
private boolean separateTexCoord = false;
private boolean receiveShadow = false;
private int texUnit = 0;
private ColorRGBA readColor(String content){
@ -314,7 +315,8 @@ public class MaterialLoader implements AssetLoader {
readTechnique(statement);
}else if (statement.getLine().startsWith("receive_shadows")){
String isOn = statement.getLine().split("\\s")[1];
if (isOn != null && isOn.equals("true")){
if (isOn != null && isOn.equals("on")){
receiveShadow = true;
}
}
}
@ -334,6 +336,11 @@ public class MaterialLoader implements AssetLoader {
mat = new Material(assetManager, "Common/MatDefs/Light/Lighting.j3md");
}
mat.setName(matName);
if(receiveShadow){
mat.setReceivesShadows(true);
}
if (blend){
RenderState rs = mat.getAdditionalRenderState();
mat.setFloat("AlphaDiscardThreshold", 0.01f);
@ -433,13 +440,14 @@ public class MaterialLoader implements AssetLoader {
twoSide = false;
matName = null;
texName = null;
receiveShadow = false;
return mat;
}
private MaterialList load(AssetManager assetManager, AssetKey key, InputStream in) throws IOException{
folderName = key.getFolder();
this.assetManager = assetManager;
MaterialList list = null;
List<Statement> statements = BlockLanguageParser.parse(in);
@ -471,8 +479,8 @@ public class MaterialLoader implements AssetLoader {
list.put(mat.getName(), mat);
}
}
return list;
return list;
}
public Object load(AssetInfo info) throws IOException {

View File

@ -38,6 +38,7 @@ import com.jme3.asset.*;
import com.jme3.material.Material;
import com.jme3.material.MaterialList;
import com.jme3.math.ColorRGBA;
import com.jme3.renderer.queue.RenderQueue;
import com.jme3.renderer.queue.RenderQueue.Bucket;
import com.jme3.scene.*;
import com.jme3.scene.VertexBuffer.Format;
@ -241,6 +242,10 @@ public class MeshLoader extends DefaultHandler implements AssetLoader {
geom.setQueueBucket(Bucket.Transparent);
}
if(mat.isReceivesShadows()){
geom.setShadowMode(RenderQueue.ShadowMode.Receive);
}
geom.setMaterial(mat);
}