\r
int mode = ((Number) structure.getFieldValue("mode")).intValue();\r
boolean shadeless = (mode & 0x4) != 0;\r
- boolean vertexColor = (mode & 0x16) != 0;\r
- boolean transparent = (mode & 0x64) != 0;\r
-\r
+ boolean vertexColor = (mode & 0x80) != 0;\r
+ boolean transparent = (mode & 0x10000) != 0;\r
+ boolean vtangent = (mode & 0x4000000) != 0; // NOTE: Requires tangents\r
+ \r
if (shadeless) {\r
result = new Material(dataRepository.getAssetManager(), "Common/MatDefs/Misc/Unshaded.j3md");\r
} else {\r
result = new Material(dataRepository.getAssetManager(), "Common/MatDefs/Light/Lighting.j3md");\r
}\r
\r
+ //System.out.println("Mode: \n" +\r
+ // "Shadeless: " + shadeless + "\n" +\r
+ // "VColor: " + vertexColor + "\n" +\r
+ // "ZTrans: " + transparent + "\n" + \r
+ // "VTangent: " + vtangent);\r
+ \r
result.getAdditionalRenderState().setFaceCullMode(faceCullMode);\r
\r
if (transparent) {\r
- result.setTransparent(true);\r
+ result.setTransparent(true);\r
result.getAdditionalRenderState().setBlendMode(BlendMode.Alpha);\r
- }\r
+ }\r
\r
String name = structure.getName();\r
LOGGER.log(Level.INFO, "Material's name: {0}", name);\r
if (vertexColor) {\r
result.setBoolean(shadeless ? "VertexColor" : "UseVertexColor", true);\r
}\r
-\r
+ \r
MaterialHelper materialHelper = dataRepository.getHelper(MaterialHelper.class);\r
ColorRGBA diffuseColor = null;\r
if (shadeless) {\r
// color of shadeless? doesn't seem to work in blender ..\r
+ diffuseColor = ColorRGBA.White.clone();\r
} else {\r
result.setBoolean("UseMaterialColors", Boolean.TRUE);\r
\r
DiffuseShader diffuseShader = materialHelper.getDiffuseShader(structure);\r
result.setBoolean("Minnaert", diffuseShader == DiffuseShader.MINNAERT);\r
diffuseColor = materialHelper.getDiffuseColor(structure, diffuseShader);\r
+ if (!transparent){\r
+ diffuseColor.a = 1;\r
+ }\r
result.setColor("Diffuse", diffuseColor);\r
\r
SpecularShader specularShader = materialHelper.getSpecularShader(structure);\r
\r
result.setColor("Ambient", materialHelper.getAmbientColor(structure));\r
result.setFloat("Shininess", materialHelper.getShininess(structure));\r
+ \r
+ \r
}\r
\r
// texture\r
if ((mapto & 0x01) != 0) {// Col\r
// Map to COLOR channel or DIFFUSE\r
// Set diffuse to white so it doesn't get multiplied by texture\r
- result.setColor("Diffuse", ColorRGBA.White);\r
+ diffuseColor.r = diffuseColor.g = diffuseColor.b = 1.0f;\r
+ result.setColor(shadeless ? "Color" : "Diffuse", diffuseColor);\r
//result.setBoolean("UseMaterialColors", Boolean.FALSE);\r
// blending the texture with material color and texture's defined color\r
int blendType = ((Number) textureLink.getFieldValue("blendtype")).intValue();\r
float[] color = new float[] { ((Number) textureLink.getFieldValue("r")).floatValue(), ((Number) textureLink.getFieldValue("g")).floatValue(), ((Number) textureLink.getFieldValue("b")).floatValue() };\r
float colfac = ((Number) textureLink.getFieldValue("colfac")).floatValue();\r
texture = textureHelper.blendTexture(diffuseColor.getColorArray(), texture, color, colfac, blendType, negateTexture, dataRepository);\r
- texture.setWrap(WrapMode.Repeat);\r
+ texture.setMinFilter(MinFilter.Trilinear);\r
+ texture.setWrap(WrapMode.Repeat);\r
if (shadeless) {\r
result.setTexture(TEXTURE_TYPE_COLOR, texture);\r
} else {\r
result.setTexture(TEXTURE_TYPE_DIFFUSE, texture);\r
}\r
}\r
- if ((mapto & 0x02) != 0) {// Nor\r
+ if ((mapto & 0x02) != 0 && !shadeless) {// Nor\r
Texture normalMapTexture;\r
if(texture.getKey() instanceof GeneratedTextureKey) {\r
normalMapTexture = textureHelper.convertToNormalMapTexture(texture, ((Number)textureLink.getFieldValue("norfac")).floatValue());\r
- } else {\r
+ normalMapTexture.setMinFilter(MinFilter.Trilinear);\r
+ } else {\r
normalMapTexture = texture;\r
}\r
- result.setTexture(TEXTURE_TYPE_NORMAL, normalMapTexture);\r
+ result.setTexture(TEXTURE_TYPE_NORMAL, normalMapTexture);\r
if (vertexColor) {\r
result.setBoolean(shadeless ? "VertexColor" : "UseVertexColor", false);\r
}\r
}\r
- if ((mapto & 0x04) != 0) {// Spec\r
+ if ((mapto & 0x04) != 0 && !shadeless) {// Spec\r
// Map to SPECULAR \r
result.setTexture(TEXTURE_TYPE_SPECULAR, texture);\r
}\r
if ((mapto & 0x40) != 0) {// Emit\r
result.setTexture(TEXTURE_TYPE_GLOW, texture);\r
}\r
- if ((mapto & 0x80) != 0) {// Alpha\r
+ if ((mapto & 0x80) != 0 && !shadeless) {// Alpha\r
result.setTexture(TEXTURE_TYPE_ALPHA, texture);\r
}\r
} else {\r
// the following map sorts faces by material number (because in jme Mesh can have only one material)\r
Map<Integer, List<Integer>> meshesMap = new HashMap<Integer, List<Integer>>();\r
Pointer pMFace = (Pointer) structure.getFieldValue("mface");\r
- List<Structure> mFaces = pMFace.fetchData(dataRepository.getInputStream());\r
+ List<Structure> mFaces = null;\r
+ if (pMFace.isNotNull()){\r
+ mFaces = pMFace.fetchData(dataRepository.getInputStream());\r
+ }\r
\r
Pointer pMTFace = (Pointer) structure.getFieldValue("mtface");\r
List<Vector2f> uvCoordinates = null;\r
// positions (it simply tells which vertex is referenced where in the result list)\r
Map<Integer, List<Integer>> vertexReferenceMap = new HashMap<Integer, List<Integer>>(verticesAmount);\r
int vertexColorIndex = 0;\r
+ if (mFaces == null){\r
+ return null;\r
+ }\r
for (int i = 0; i < mFaces.size(); ++i) {\r
Structure mFace = mFaces.get(i);\r
boolean smooth = (((Number) mFace.getFieldValue("flag")).byteValue() & 0x01) != 0x00;\r
public Vector3f[] getVertices(Structure meshStructure, DataRepository dataRepository) throws BlenderFileException {\r
int verticesAmount = ((Number) meshStructure.getFieldValue("totvert")).intValue();\r
Vector3f[] vertices = new Vector3f[verticesAmount];\r
+ if (verticesAmount == 0)\r
+ return vertices;\r
+ \r
Pointer pMVert = (Pointer) meshStructure.getFieldValue("mvert");\r
List<Structure> mVerts = pMVert.fetchData(dataRepository.getInputStream());\r
for (int i = 0; i < verticesAmount; ++i) {\r