materials read some properties from assimp
Some checks failed
studiorailgun/Renderer/pipeline/head There was a failure building this commit
Some checks failed
studiorailgun/Renderer/pipeline/head There was a failure building this commit
This commit is contained in:
parent
ddb1145cb8
commit
e151bdc34e
@ -16,20 +16,10 @@ struct Material {
|
|||||||
/**
|
/**
|
||||||
* The shininess value
|
* The shininess value
|
||||||
*/
|
*/
|
||||||
float metallic;
|
float shininess;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The shininess value
|
* The reflectivity value
|
||||||
*/
|
*/
|
||||||
float roughness;
|
float reflectivity;
|
||||||
|
|
||||||
/**
|
|
||||||
* The shininess value
|
|
||||||
*/
|
|
||||||
float ior;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The shininess value
|
|
||||||
*/
|
|
||||||
float alpha;
|
|
||||||
};
|
};
|
||||||
|
|||||||
@ -1899,6 +1899,7 @@ Shader uniform parsing from source code
|
|||||||
Visual shader uniform location caching
|
Visual shader uniform location caching
|
||||||
Remove old uniforms from shaders and code to push uniforms
|
Remove old uniforms from shaders and code to push uniforms
|
||||||
Break out shader material into dedicated library file
|
Break out shader material into dedicated library file
|
||||||
|
Materials read some properties from assimp data
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -14,8 +14,11 @@ import org.lwjgl.assimp.AIString;
|
|||||||
import org.lwjgl.assimp.AITexture;
|
import org.lwjgl.assimp.AITexture;
|
||||||
import org.lwjgl.assimp.Assimp;
|
import org.lwjgl.assimp.Assimp;
|
||||||
import org.lwjgl.opengl.GL45;
|
import org.lwjgl.opengl.GL45;
|
||||||
|
import org.lwjgl.system.MemoryStack;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.nio.ByteBuffer;
|
||||||
|
import java.nio.FloatBuffer;
|
||||||
import java.nio.IntBuffer;
|
import java.nio.IntBuffer;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
|
|
||||||
@ -23,6 +26,16 @@ import java.nio.file.Path;
|
|||||||
* A material
|
* A material
|
||||||
*/
|
*/
|
||||||
public class Material {
|
public class Material {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default shininess
|
||||||
|
*/
|
||||||
|
public static final double DEFAULT_SHININESS = 0.0f;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The default reflectivity
|
||||||
|
*/
|
||||||
|
public static final double DEFAULT_REFLECTIVITY = 0.0f;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -55,6 +68,16 @@ public class Material {
|
|||||||
* texture pointer for the normal
|
* texture pointer for the normal
|
||||||
*/
|
*/
|
||||||
private int normalPointer;
|
private int normalPointer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The shininess value
|
||||||
|
*/
|
||||||
|
private double shininess = Material.DEFAULT_SHININESS;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The reflectivity value
|
||||||
|
*/
|
||||||
|
private double reflectivity = Material.DEFAULT_REFLECTIVITY;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A material that contains textures
|
* A material that contains textures
|
||||||
@ -83,6 +106,11 @@ public class Material {
|
|||||||
AIString aiPathString = AIString.calloc();
|
AIString aiPathString = AIString.calloc();
|
||||||
|
|
||||||
//read props
|
//read props
|
||||||
|
try(MemoryStack stack = MemoryStack.stackPush()){
|
||||||
|
//grab specific values
|
||||||
|
rVal.reflectivity = Material.readFloatProp(stack, Assimp.AI_MATKEY_REFLECTIVITY, input, Material.DEFAULT_REFLECTIVITY);
|
||||||
|
rVal.shininess = Material.readFloatProp(stack, Assimp.AI_MATKEY_SHININESS, input, Material.DEFAULT_SHININESS);
|
||||||
|
}
|
||||||
|
|
||||||
//read textures
|
//read textures
|
||||||
PointerBuffer texturePtrBuff = scene.mTextures();
|
PointerBuffer texturePtrBuff = scene.mTextures();
|
||||||
@ -270,6 +298,28 @@ public class Material {
|
|||||||
normalPointer = pointer;
|
normalPointer = pointer;
|
||||||
usesFetch = false;
|
usesFetch = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reads a float property from a material
|
||||||
|
* @param stack the memory stack
|
||||||
|
* @param key The key for the property
|
||||||
|
* @param input The input material
|
||||||
|
* @param defaultVal The default value
|
||||||
|
* @return The float value
|
||||||
|
*/
|
||||||
|
private static float readFloatProp(MemoryStack stack, String key, AIMaterial input, double defaultVal){
|
||||||
|
int numFloats = 1;
|
||||||
|
FloatBuffer buff = stack.callocFloat(numFloats);
|
||||||
|
IntBuffer floatCountBuff = stack.ints(numFloats);
|
||||||
|
ByteBuffer keyBuff = stack.ASCII(key);
|
||||||
|
if(Assimp.aiReturn_SUCCESS == Assimp.aiGetMaterialFloatArray(input, keyBuff, Assimp.aiTextureType_NONE, 0, buff, floatCountBuff)){
|
||||||
|
int numFloatsFound = floatCountBuff.get();
|
||||||
|
if(numFloatsFound > 0){
|
||||||
|
return buff.get();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (float)defaultVal;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Applies the material
|
* Applies the material
|
||||||
@ -299,6 +349,11 @@ public class Material {
|
|||||||
openGLState.glBindTextureUnit(GL45.GL_TEXTURE0, texturePointer, GL45.GL_TEXTURE_2D);
|
openGLState.glBindTextureUnit(GL45.GL_TEXTURE0, texturePointer, GL45.GL_TEXTURE_2D);
|
||||||
Globals.renderingEngine.checkError();
|
Globals.renderingEngine.checkError();
|
||||||
}
|
}
|
||||||
|
//send physical properties
|
||||||
|
openGLState.getActiveShader().setUniform(openGLState, "material.shininess", this.shininess);
|
||||||
|
Globals.renderingEngine.checkError();
|
||||||
|
openGLState.getActiveShader().setUniform(openGLState, "material.reflectivity", this.reflectivity);
|
||||||
|
Globals.renderingEngine.checkError();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user