|
@@ -1,6 +1,7 @@
|
|
package com.jme3.scene.plugins.blender.materials;
|
|
package com.jme3.scene.plugins.blender.materials;
|
|
|
|
|
|
import java.io.IOException;
|
|
import java.io.IOException;
|
|
|
|
+import java.util.HashMap;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
import java.util.Map.Entry;
|
|
import java.util.Map.Entry;
|
|
@@ -157,14 +158,14 @@ public final class MaterialContext implements Savable {
|
|
}
|
|
}
|
|
|
|
|
|
// applying textures
|
|
// applying textures
|
|
|
|
+ int textureIndex = 0;
|
|
if (loadedTextures != null && loadedTextures.size() > 0) {
|
|
if (loadedTextures != null && loadedTextures.size() > 0) {
|
|
- int textureIndex = 0;
|
|
|
|
if (loadedTextures.size() > TextureHelper.TEXCOORD_TYPES.length) {
|
|
if (loadedTextures.size() > TextureHelper.TEXCOORD_TYPES.length) {
|
|
LOGGER.log(Level.WARNING, "The blender file has defined more than {0} different textures. JME supports only {0} UV mappings.", TextureHelper.TEXCOORD_TYPES.length);
|
|
LOGGER.log(Level.WARNING, "The blender file has defined more than {0} different textures. JME supports only {0} UV mappings.", TextureHelper.TEXCOORD_TYPES.length);
|
|
}
|
|
}
|
|
for (CombinedTexture combinedTexture : loadedTextures) {
|
|
for (CombinedTexture combinedTexture : loadedTextures) {
|
|
if (textureIndex < TextureHelper.TEXCOORD_TYPES.length) {
|
|
if (textureIndex < TextureHelper.TEXCOORD_TYPES.length) {
|
|
- combinedTexture.flatten(geometry, geometriesOMA, userDefinedUVCoordinates, blenderContext);
|
|
|
|
|
|
+ String usedUserUVSet = combinedTexture.flatten(geometry, geometriesOMA, userDefinedUVCoordinates, blenderContext);
|
|
|
|
|
|
this.setTexture(material, combinedTexture.getMappingType(), combinedTexture.getResultTexture());
|
|
this.setTexture(material, combinedTexture.getMappingType(), combinedTexture.getResultTexture());
|
|
List<Vector2f> uvs = combinedTexture.getResultUVS();
|
|
List<Vector2f> uvs = combinedTexture.getResultUVS();
|
|
@@ -173,13 +174,19 @@ public final class MaterialContext implements Savable {
|
|
uvCoordsBuffer.setupData(Usage.Static, 2, Format.Float, BufferUtils.createFloatBuffer(uvs.toArray(new Vector2f[uvs.size()])));
|
|
uvCoordsBuffer.setupData(Usage.Static, 2, Format.Float, BufferUtils.createFloatBuffer(uvs.toArray(new Vector2f[uvs.size()])));
|
|
geometry.getMesh().setBuffer(uvCoordsBuffer);
|
|
geometry.getMesh().setBuffer(uvCoordsBuffer);
|
|
}//uvs might be null if the user assigned non existing UV coordinates group name to the mesh (this should be fixed in blender file)
|
|
}//uvs might be null if the user assigned non existing UV coordinates group name to the mesh (this should be fixed in blender file)
|
|
|
|
+
|
|
|
|
+ if(usedUserUVSet != null) {
|
|
|
|
+ userDefinedUVCoordinates = new HashMap<>(userDefinedUVCoordinates);
|
|
|
|
+ userDefinedUVCoordinates.remove(usedUserUVSet);
|
|
|
|
+ }
|
|
} else {
|
|
} else {
|
|
LOGGER.log(Level.WARNING, "The texture could not be applied because JME only supports up to {0} different UV's.", TextureHelper.TEXCOORD_TYPES.length);
|
|
LOGGER.log(Level.WARNING, "The texture could not be applied because JME only supports up to {0} different UV's.", TextureHelper.TEXCOORD_TYPES.length);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- } else if (userDefinedUVCoordinates != null && userDefinedUVCoordinates.size() > 0) {
|
|
|
|
- LOGGER.fine("No textures found for the mesh, but UV coordinates are applied.");
|
|
|
|
- int textureIndex = 0;
|
|
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (userDefinedUVCoordinates != null && userDefinedUVCoordinates.size() > 0) {
|
|
|
|
+ LOGGER.fine("Storing unused, user defined UV coordinates sets.");
|
|
if (userDefinedUVCoordinates.size() > TextureHelper.TEXCOORD_TYPES.length) {
|
|
if (userDefinedUVCoordinates.size() > TextureHelper.TEXCOORD_TYPES.length) {
|
|
LOGGER.log(Level.WARNING, "The blender file has defined more than {0} different UV coordinates for the mesh. JME supports only {0} UV coordinates buffers.", TextureHelper.TEXCOORD_TYPES.length);
|
|
LOGGER.log(Level.WARNING, "The blender file has defined more than {0} different UV coordinates for the mesh. JME supports only {0} UV coordinates buffers.", TextureHelper.TEXCOORD_TYPES.length);
|
|
}
|
|
}
|
|
@@ -190,7 +197,9 @@ public final class MaterialContext implements Savable {
|
|
uvCoordsBuffer.setupData(Usage.Static, 2, Format.Float, BufferUtils.createFloatBuffer(uvs.toArray(new Vector2f[uvs.size()])));
|
|
uvCoordsBuffer.setupData(Usage.Static, 2, Format.Float, BufferUtils.createFloatBuffer(uvs.toArray(new Vector2f[uvs.size()])));
|
|
geometry.getMesh().setBuffer(uvCoordsBuffer);
|
|
geometry.getMesh().setBuffer(uvCoordsBuffer);
|
|
} else {
|
|
} else {
|
|
- LOGGER.log(Level.WARNING, "The texture could not be applied because JME only supports up to {0} different UV's.", TextureHelper.TEXCOORD_TYPES.length);
|
|
|
|
|
|
+ LOGGER.log(Level.WARNING, "The user's UV set named: '{0}' could not be stored because JME only supports up to {1} different UV's.", new Object[] {
|
|
|
|
+ entry.getKey(), TextureHelper.TEXCOORD_TYPES.length
|
|
|
|
+ });
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|