Fix to setting the normal texture if vertex coloring is enabled.

git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@7612 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
3.0
Kae..pl 14 years ago
parent 2073f58cf8
commit 5dc1a29f6e
  1. 46
      engine/src/blender/com/jme3/scene/plugins/blender/helpers/v249/MaterialHelper.java
  2. 15
      engine/src/blender/com/jme3/scene/plugins/blender/helpers/v249/MeshHelper.java
  3. 3
      engine/src/blender/com/jme3/scene/plugins/blender/helpers/v249/TextureHelper.java

@ -62,26 +62,26 @@ import com.jme3.texture.Texture.WrapMode;
import com.jme3.util.BufferUtils;
public class MaterialHelper extends AbstractBlenderHelper {
private static final Logger LOGGER = Logger.getLogger(MaterialHelper.class.getName());
protected static final float DEFAULT_SHININESS = 20.0f;
public static final String TEXTURE_TYPE_COLOR = "ColorMap";
public static final String TEXTURE_TYPE_DIFFUSE = "DiffuseMap";
public static final String TEXTURE_TYPE_NORMAL = "NormalMap";
public static final String TEXTURE_TYPE_SPECULAR = "SpecularMap";
public static final String TEXTURE_TYPE_GLOW = "GlowMap";
public static final String TEXTURE_TYPE_ALPHA = "AlphaMap";
public static final Integer ALPHA_MASK_NONE = Integer.valueOf(0);
public static final Integer ALPHA_MASK_CIRCLE = Integer.valueOf(1);
public static final Integer ALPHA_MASK_CONE = Integer.valueOf(2);
public static final Integer ALPHA_MASK_HYPERBOLE = Integer.valueOf(3);
protected final Map<Integer, AlphaMask> alphaMasks = new HashMap<Integer, AlphaMask>();
protected final Map<Integer, IAlphaMask> alphaMasks = new HashMap<Integer, IAlphaMask>();
/**
* The type of the material's diffuse shader.
*/
public static enum DiffuseShader {
LAMBERT, ORENNAYAR, TOON, MINNAERT, FRESNEL
}
@ -89,9 +89,9 @@ public class MaterialHelper extends AbstractBlenderHelper {
* The type of the material's specular shader.
*/
public static enum SpecularShader {
COOKTORRENCE, PHONG, BLINN, TOON, WARDISO
}
/** Face cull mode. Should be excplicitly set before this helper is used. */
protected FaceCullMode faceCullMode;
@ -105,19 +105,16 @@ public class MaterialHelper extends AbstractBlenderHelper {
public MaterialHelper(String blenderVersion) {
super(blenderVersion);
// setting alpha masks
alphaMasks.put(ALPHA_MASK_NONE, new AlphaMask() {
alphaMasks.put(ALPHA_MASK_NONE, new IAlphaMask() {
@Override
public void setImageSize(int width, int height) {
}
public void setImageSize(int width, int height) {}
@Override
public byte getAlpha(float x, float y) {
return (byte) 255;
}
});
alphaMasks.put(ALPHA_MASK_CIRCLE, new AlphaMask() {
alphaMasks.put(ALPHA_MASK_CIRCLE, new IAlphaMask() {
private float r;
private float[] center;
@ -133,8 +130,7 @@ public class MaterialHelper extends AbstractBlenderHelper {
return (byte) (d >= r ? 0 : 255);
}
});
alphaMasks.put(ALPHA_MASK_CONE, new AlphaMask() {
alphaMasks.put(ALPHA_MASK_CONE, new IAlphaMask() {
private float r;
private float[] center;
@ -150,8 +146,7 @@ public class MaterialHelper extends AbstractBlenderHelper {
return (byte) (d >= r ? 0 : -255.0f * d / r + 255.0f);
}
});
alphaMasks.put(ALPHA_MASK_HYPERBOLE, new AlphaMask() {
alphaMasks.put(ALPHA_MASK_HYPERBOLE, new IAlphaMask() {
private float r;
private float[] center;
@ -210,11 +205,7 @@ public class MaterialHelper extends AbstractBlenderHelper {
String name = structure.getName();
LOGGER.log(Level.INFO, "Material's name: {0}", name);
if (vertexColor) {
if (shadeless) {
result.setBoolean("VertexColor", true);
} else {
result.setBoolean("UseVertexColor", true);
}
result.setBoolean(shadeless ? "VertexColor" : "UseVertexColor", true);
}
MaterialHelper materialHelper = dataRepository.getHelper(MaterialHelper.class);
@ -222,7 +213,7 @@ public class MaterialHelper extends AbstractBlenderHelper {
if (shadeless) {
// color of shadeless? doesn't seem to work in blender ..
} else {
result.setBoolean("UseMaterialColors", true);
result.setBoolean("UseMaterialColors", Boolean.TRUE);
// setting the colors
DiffuseShader diffuseShader = materialHelper.getDiffuseShader(structure);
@ -260,10 +251,7 @@ public class MaterialHelper extends AbstractBlenderHelper {
Texture texture = textureHelper.getTexture(tex, dataRepository);
if (texture != null) {
if ((mapto & 0x01) != 0) {// Col
if (!shadeless){
result.setBoolean("UseMaterialColors", false);
}
result.setBoolean("UseMaterialColors", Boolean.FALSE);
// blending the texture with material color and texture's defined color
int blendType = ((Number) textureLink.getFieldValue("blendtype")).intValue();
float[] color = new float[] { ((Number) textureLink.getFieldValue("r")).floatValue(), ((Number) textureLink.getFieldValue("g")).floatValue(), ((Number) textureLink.getFieldValue("b")).floatValue() };
@ -278,8 +266,11 @@ public class MaterialHelper extends AbstractBlenderHelper {
}
if ((mapto & 0x02) != 0) {// Nor
result.setTexture(TEXTURE_TYPE_NORMAL, texture);
if (vertexColor) {
result.setBoolean(shadeless ? "VertexColor" : "UseVertexColor", false);
}
if ((mapto & 0x20) != 0) {// Spec
}
if ((mapto & 0x04) != 0) {// Spec
result.setTexture(TEXTURE_TYPE_SPECULAR, texture);
}
if ((mapto & 0x40) != 0) {// Emit
@ -376,7 +367,7 @@ public class MaterialHelper extends AbstractBlenderHelper {
int w = image.getWidth();
int h = image.getHeight();
ByteBuffer bb = BufferUtils.createByteBuffer(w * h * 4);
AlphaMask iAlphaMask = alphaMasks.get(alphaMaskIndex);
IAlphaMask iAlphaMask = alphaMasks.get(alphaMaskIndex);
iAlphaMask.setImageSize(w, h);
for (int x = 0; x < w; ++x) {
@ -686,8 +677,7 @@ public class MaterialHelper extends AbstractBlenderHelper {
* An interface used in calculating alpha mask during particles' texture calculations.
* @author Marcin Roguski (Kaelthas)
*/
protected static interface AlphaMask {
protected static interface IAlphaMask {
/**
* This method sets the size of the texture's image.
* @param width

@ -53,9 +53,9 @@ import com.jme3.scene.VertexBuffer.Type;
import com.jme3.scene.VertexBuffer.Usage;
import com.jme3.scene.plugins.blender.data.Structure;
import com.jme3.scene.plugins.blender.exception.BlenderFileException;
import com.jme3.scene.plugins.blender.utils.AbstractBlenderHelper;
import com.jme3.scene.plugins.blender.utils.DataRepository;
import com.jme3.scene.plugins.blender.utils.DataRepository.LoadedFeatureDataType;
import com.jme3.scene.plugins.blender.utils.AbstractBlenderHelper;
import com.jme3.scene.plugins.blender.utils.DynamicArray;
import com.jme3.scene.plugins.blender.utils.Pointer;
import com.jme3.texture.Texture;
@ -67,7 +67,6 @@ import com.jme3.util.BufferUtils;
* @author Marcin Roguski (Kaelthas)
*/
public class MeshHelper extends AbstractBlenderHelper {
protected static final int MAXIMUM_WEIGHTS_PER_VERTEX = 4; // have no idea why 4, could someone please explain ?
/**
@ -138,8 +137,8 @@ public class MeshHelper extends AbstractBlenderHelper {
List<Vector3f> normalList = new ArrayList<Vector3f>();
List<Vector3f> vertexList = new ArrayList<Vector3f>();
Map<Integer, Texture> materialNumberToTexture = new HashMap<Integer, Texture>();// indicates if the material with the specified
// number should have a texture attached
// indicates if the material with the specified number should have a texture attached
Map<Integer, Texture> materialNumberToTexture = new HashMap<Integer, Texture>();
// this map's key is the vertex index from 'vertices 'table and the value are indices from 'vertexList'
// positions (it simply tells which vertex is referenced where in the result list)
Map<Integer, List<Integer>> vertexReferenceMap = new HashMap<Integer, List<Integer>>(verticesAmount);
@ -167,11 +166,9 @@ public class MeshHelper extends AbstractBlenderHelper {
indexList = new ArrayList<Integer>();
meshesMap.put(materialNumber, indexList);
}
if (pImage != null && !pImage.isNull() && !materialNumberToTexture.containsKey(materialNumber)) {// attaching image to texture
// (face can have UV's and
// image whlie its material
// may have no texture
// attached)
// attaching image to texture (face can have UV's and image whlie its material may have no texture attached)
if (pImage != null && !pImage.isNull() && !materialNumberToTexture.containsKey(materialNumber)) {
Texture texture = textureHelper.getTextureFromImage(pImage.fetchData(dataRepository.getInputStream()).get(0),
dataRepository);
if (texture != null) {

@ -217,7 +217,7 @@ public class TextureHelper extends AbstractBlenderHelper {
throw new BlenderFileException("Unknown texture type: " + type + " for texture: " + tex.getName());
}
if (result != null) {
result.setName(String.valueOf(type));
result.setName(tex.getName());
result.setWrap(WrapMode.Repeat);
}
return result;
@ -1579,7 +1579,6 @@ public class TextureHelper extends AbstractBlenderHelper {
}
}
if (result != null) {
result.setName(String.valueOf(8));// 8 = TEX_IMAGE
result.setWrap(Texture.WrapMode.Repeat);
dataRepository.addLoadedFeatures(image.getOldMemoryAddress(), image.getName(), image, result);
}

Loading…
Cancel
Save