@ -14,24 +14,24 @@ import com.jme3.scene.plugins.blender.textures.TextureHelper;
import com.jme3.texture.Texture.Type ;
public final class MaterialContext {
private static final Logger LOGGER = Logger . getLogger ( MaterialContext . class . getName ( ) ) ;
private static final Logger LOGGER = Logger . getLogger ( MaterialContext . class . getName ( ) ) ;
/*package*/ final String name ;
/*package*/ final List < Structure > mTexs ;
/*package*/ final List < Structure > textures ;
/*package*/ final int texturesCount ;
/*package*/ final Type textureType ;
/* package */ final String name ;
/* package */ final List < Structure > mTexs ;
/* package */ final List < Structure > textures ;
/* package */ final int texturesCount ;
/* package */ final Type textureType ;
/*package*/ final boolean shadeless ;
/*package*/ final boolean vertexColor ;
/*package*/ final boolean transparent ;
/*package*/ final boolean vtangent ;
/* package */ final boolean shadeless ;
/* package */ final boolean vertexColor ;
/* package */ final boolean transparent ;
/* package */ final boolean vtangent ;
/*package*/ int uvCoordinatesType = - 1 ;
/*package*/ int projectionType ;
/* package */ int uvCoordinatesType = - 1 ;
/* package */ int projectionType ;
@SuppressWarnings ( "unchecked" )
/*package*/ MaterialContext ( Structure structure , DataRepository dataRepository ) throws BlenderFileException {
/* package */ MaterialContext ( Structure structure , DataRepository dataRepository ) throws BlenderFileException {
name = structure . getName ( ) ;
int mode = ( ( Number ) structure . getFieldValue ( "mode" ) ) . intValue ( ) ;
@ -50,30 +50,30 @@ public final class MaterialContext {
if ( p . isNotNull ( ) & & ( separatedTextures & 1 < < i ) = = 0 ) {
Structure mtex = p . fetchData ( dataRepository . getInputStream ( ) ) . get ( 0 ) ;
//the first texture determines the texture coordinates type
if ( uvCoordinatesType = = - 1 ) {
// the first texture determines the texture coordinates type
if ( uvCoordinatesType = = - 1 ) {
uvCoordinatesType = ( ( Number ) mtex . getFieldValue ( "texco" ) ) . intValue ( ) ;
projectionType = ( ( Number ) mtex . getFieldValue ( "mapping" ) ) . intValue ( ) ;
} else if ( uvCoordinatesType ! = ( ( Number ) mtex . getFieldValue ( "texco" ) ) . intValue ( ) ) {
LOGGER . log ( Level . WARNING , "The texture with index: {0} has different UV coordinates type than the first texture! This texture will NOT be loaded!" , i + 1 ) ;
} else if ( uvCoordinatesType ! = ( ( Number ) mtex . getFieldValue ( "texco" ) ) . intValue ( ) ) {
LOGGER . log ( Level . WARNING , "The texture with index: {0} has different UV coordinates type than the first texture! This texture will NOT be loaded!" , i + 1 ) ;
continue ;
}
Pointer pTex = ( Pointer ) mtex . getFieldValue ( "tex" ) ;
if ( pTex . isNotNull ( ) ) {
if ( pTex . isNotNull ( ) ) {
Structure tex = pTex . fetchData ( dataRepository . getInputStream ( ) ) . get ( 0 ) ;
int type = ( ( Number ) tex . getFieldValue ( "type" ) ) . intValue ( ) ;
Type textureType = this . getType ( type ) ;
if ( textureType ! = null ) {
if ( firstTextureType = = null ) {
if ( textureType ! = null ) {
if ( firstTextureType = = null ) {
firstTextureType = textureType ;
mTexs . add ( mtex ) ;
textures . add ( tex ) ;
} else if ( firstTextureType = = textureType ) {
} else if ( firstTextureType = = textureType ) {
mTexs . add ( mtex ) ;
textures . add ( tex ) ;
} else {
LOGGER . log ( Level . WARNING , "The texture with index: {0} is of different dimension than the first one! This texture will NOT be loaded!" , i + 1 ) ;
LOGGER . log ( Level . WARNING , "The texture with index: {0} is of different dimension than the first one! This texture will NOT be loaded!" , i + 1 ) ;
}
}
}
@ -119,9 +119,25 @@ public final class MaterialContext {
return textures = = null ? 0 : textures . size ( ) ;
}
/ * *
* This method returns the projection array that indicates where the current coordinate factor X , Y or Z ( represented
* by the index in the array ) will be used where ( indicated by the value in the array ) .
* For example the configuration : [ 1 , 2 , 3 ] means that X - coordinate will be used as X , Y as Y and Z as Z .
* The configuration [ 2 , 1 , 0 ] means that Z will be used instead of X coordinate , Y will be used as Y and
* Z will not be used at all ( 0 will be in its place ) .
* @param textureIndex
* the index of the texture
* @return texture projection array
* /
public int [ ] getProjection ( int textureIndex ) {
Structure mtex = mTexs . get ( textureIndex ) ;
return new int [ ] { ( ( Number ) mtex . getFieldValue ( "projx" ) ) . intValue ( ) , ( ( Number ) mtex . getFieldValue ( "projy" ) ) . intValue ( ) , ( ( Number ) mtex . getFieldValue ( "projz" ) ) . intValue ( ) } ;
}
/ * *
* This method determines the type of the texture .
* @param texType texture type ( from blender )
* @param texType
* texture type ( from blender )
* @return texture type ( used by jme )
* /
private Type getType ( int texType ) {
@ -142,7 +158,7 @@ public final class MaterialContext {
case TextureHelper . TEX_NONE : // No texture, do nothing
return null ;
case TextureHelper . TEX_POINTDENSITY :
case TextureHelper . TEX_VOXELDATA :
case TextureHelper . TEX_VOXELDATA :
case TextureHelper . TEX_PLUGIN :
case TextureHelper . TEX_ENVMAP :
LOGGER . log ( Level . WARNING , "Texture type NOT supported: {0}" , texType ) ;