diff --git a/engine/src/blender/com/jme3/scene/plugins/blender/materials/MaterialContext.java b/engine/src/blender/com/jme3/scene/plugins/blender/materials/MaterialContext.java index 81e29d5cd..863991e1f 100644 --- a/engine/src/blender/com/jme3/scene/plugins/blender/materials/MaterialContext.java +++ b/engine/src/blender/com/jme3/scene/plugins/blender/materials/MaterialContext.java @@ -1,5 +1,21 @@ package com.jme3.scene.plugins.blender.materials; +import java.awt.Color; +import java.awt.Graphics; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.logging.Logger; + +import javax.imageio.ImageIO; + +import jme3tools.converters.ImageToAwt; + import com.jme3.material.Material; import com.jme3.material.RenderState.BlendMode; import com.jme3.material.RenderState.FaceCullMode; @@ -21,14 +37,9 @@ import com.jme3.scene.plugins.blender.textures.CombinedTexture; import com.jme3.scene.plugins.blender.textures.TextureHelper; import com.jme3.scene.plugins.blender.textures.blending.TextureBlender; import com.jme3.scene.plugins.blender.textures.blending.TextureBlenderFactory; +import com.jme3.texture.Image; import com.jme3.texture.Texture; import com.jme3.util.BufferUtils; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.logging.Logger; /** * This class holds the data about the material. @@ -195,44 +206,51 @@ public final class MaterialContext { } //applying textures - for(Entry entry : loadedTextures.entrySet()) { - CombinedTexture combinedTexture = entry.getValue(); - combinedTexture.flatten(geometry, geometriesOMA, userDefinedUVCoordinates, blenderContext); - VertexBuffer.Type uvCoordinatesType = null; - - switch(entry.getKey().intValue()) { - case MTEX_COL: - uvCoordinatesType = VertexBuffer.Type.TexCoord; - material.setTexture(shadeless ? MaterialHelper.TEXTURE_TYPE_COLOR : MaterialHelper.TEXTURE_TYPE_DIFFUSE, - combinedTexture.getResultTexture()); - break; - case MTEX_NOR: - uvCoordinatesType = VertexBuffer.Type.TexCoord2; - material.setTexture(MaterialHelper.TEXTURE_TYPE_NORMAL, combinedTexture.getResultTexture()); - break; - case MTEX_SPEC: - uvCoordinatesType = VertexBuffer.Type.TexCoord3; - material.setTexture(MaterialHelper.TEXTURE_TYPE_SPECULAR, combinedTexture.getResultTexture()); - break; - case MTEX_EMIT: - uvCoordinatesType = VertexBuffer.Type.TexCoord4; - material.setTexture(MaterialHelper.TEXTURE_TYPE_GLOW, combinedTexture.getResultTexture()); - break; - case MTEX_ALPHA: - uvCoordinatesType = VertexBuffer.Type.TexCoord5; - material.setTexture(MaterialHelper.TEXTURE_TYPE_ALPHA, combinedTexture.getResultTexture()); - break; - default: - LOGGER.severe("Unknown mapping type: " + entry.getKey().intValue()); - } - - //applying texture coordinates - if(uvCoordinatesType != null) { - VertexBuffer uvCoordsBuffer = new VertexBuffer(uvCoordinatesType); - uvCoordsBuffer.setupData(Usage.Static, 2, Format.Float, - BufferUtils.createFloatBuffer(combinedTexture.getResultUVS().toArray(new Vector2f[combinedTexture.getResultUVS().size()]))); - geometry.getMesh().setBuffer(uvCoordsBuffer); + if(loadedTextures != null && loadedTextures.size() > 0) { + for(Entry entry : loadedTextures.entrySet()) { + CombinedTexture combinedTexture = entry.getValue(); + combinedTexture.flatten(geometry, geometriesOMA, userDefinedUVCoordinates, blenderContext); + VertexBuffer.Type uvCoordinatesType = null; + + switch(entry.getKey().intValue()) { + case MTEX_COL: + uvCoordinatesType = VertexBuffer.Type.TexCoord; + material.setTexture(shadeless ? MaterialHelper.TEXTURE_TYPE_COLOR : MaterialHelper.TEXTURE_TYPE_DIFFUSE, + combinedTexture.getResultTexture()); + break; + case MTEX_NOR: + uvCoordinatesType = VertexBuffer.Type.TexCoord2; + material.setTexture(MaterialHelper.TEXTURE_TYPE_NORMAL, combinedTexture.getResultTexture()); + break; + case MTEX_SPEC: + uvCoordinatesType = VertexBuffer.Type.TexCoord3; + material.setTexture(MaterialHelper.TEXTURE_TYPE_SPECULAR, combinedTexture.getResultTexture()); + break; + case MTEX_EMIT: + uvCoordinatesType = VertexBuffer.Type.TexCoord4; + material.setTexture(MaterialHelper.TEXTURE_TYPE_GLOW, combinedTexture.getResultTexture()); + break; + case MTEX_ALPHA: + uvCoordinatesType = VertexBuffer.Type.TexCoord5; + material.setTexture(MaterialHelper.TEXTURE_TYPE_ALPHA, combinedTexture.getResultTexture()); + break; + default: + LOGGER.severe("Unknown mapping type: " + entry.getKey().intValue()); + } + + //applying texture coordinates + if(uvCoordinatesType != null) { + VertexBuffer uvCoordsBuffer = new VertexBuffer(uvCoordinatesType); + uvCoordsBuffer.setupData(Usage.Static, 2, Format.Float, + BufferUtils.createFloatBuffer(combinedTexture.getResultUVS().toArray(new Vector2f[combinedTexture.getResultUVS().size()]))); + geometry.getMesh().setBuffer(uvCoordsBuffer); + } } + } else if(userDefinedUVCoordinates != null && userDefinedUVCoordinates.size() > 0) { + VertexBuffer uvCoordsBuffer = new VertexBuffer(VertexBuffer.Type.TexCoord); + uvCoordsBuffer.setupData(Usage.Static, 2, Format.Float, + BufferUtils.createFloatBuffer(userDefinedUVCoordinates.toArray(new Vector2f[userDefinedUVCoordinates.size()]))); + geometry.getMesh().setBuffer(uvCoordsBuffer); } //applying additional data