@ -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 < Number , CombinedTexture > 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 < Number , CombinedTexture > 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