update Android shaders
This commit is contained in:
@@ -10,17 +10,25 @@ static const char vertexSource[] =
|
||||
precision mediump float;
|
||||
|
||||
layout(location = 0) in vec3 position;
|
||||
layout(location = 1) in int color;
|
||||
layout(location = 1) in vec2 textureCoords;
|
||||
layout(location = 2) in vec3 normal;
|
||||
|
||||
uniform mat4 viewMatrix;
|
||||
uniform mat4 projectionMatrix;
|
||||
uniform vec3 modelPosition;
|
||||
uniform mat4 modelMatrix;
|
||||
|
||||
flat out int pass_color;
|
||||
out vec3 toLightVector;
|
||||
out vec3 surfaceNormal;
|
||||
|
||||
void main(void){
|
||||
pass_color = color;
|
||||
gl_Position = projectionMatrix * viewMatrix * vec4(position + modelPosition, 1.0);
|
||||
vec3 lightPosition = vec3(0, 15, 0);
|
||||
|
||||
vec4 worldPos = modelMatrix * vec4(position, 1.0);
|
||||
|
||||
toLightVector = lightPosition - worldPos.xyz;
|
||||
surfaceNormal = vec4(modelMatrix * vec4(normal, 0.0)).xyz;
|
||||
|
||||
gl_Position = projectionMatrix * viewMatrix * worldPos;
|
||||
}
|
||||
)";
|
||||
|
||||
@@ -29,20 +37,21 @@ static const char fragmentSource[] =
|
||||
|
||||
precision mediump float;
|
||||
|
||||
flat in int pass_color;
|
||||
in vec3 toLightVector;
|
||||
in vec3 surfaceNormal;
|
||||
|
||||
out vec4 out_color;
|
||||
|
||||
uniform vec3 ColorEffect;
|
||||
|
||||
void main(void){
|
||||
|
||||
float r = float(pass_color >> 24 & 0xFF) / 255.0;
|
||||
float g = float(pass_color >> 16 & 0xFF) / 255.0;
|
||||
float b = float(pass_color >> 8 & 0xFF) / 255.0;
|
||||
float a = float(pass_color & 0xFF) / 255.0;
|
||||
vec3 intermediate_color = vec3(r, g, b) * ColorEffect;
|
||||
out_color = vec4(intermediate_color, a);
|
||||
vec3 unitNormal = normalize(surfaceNormal);
|
||||
vec3 unitLightVector = normalize(toLightVector);
|
||||
|
||||
float diffuse = max(0.2, dot(unitNormal, unitLightVector));
|
||||
|
||||
float brightness = diffuse;
|
||||
|
||||
out_color = vec4(1.0, 1.0, 1.0, 1.0) * brightness;
|
||||
|
||||
}
|
||||
)";
|
||||
|
||||
@@ -10,16 +10,31 @@ static const char vertexSource[] =
|
||||
precision mediump float;
|
||||
|
||||
layout(location = 0) in vec3 position;
|
||||
layout(location = 1) in int color;
|
||||
layout(location = 1) in vec2 textureCoords;
|
||||
layout(location = 2) in vec3 normal;
|
||||
|
||||
uniform mat4 viewMatrix;
|
||||
uniform mat4 projectionMatrix;
|
||||
|
||||
flat out int pass_color;
|
||||
out vec3 toLightVector;
|
||||
out vec3 toCameraVector;
|
||||
out vec3 surfaceNormal;
|
||||
|
||||
out vec2 pass_textureCoords;
|
||||
|
||||
void main(void){
|
||||
pass_color = color;
|
||||
gl_Position = projectionMatrix * viewMatrix * vec4(position, 1.0);
|
||||
vec3 lightPosition = vec3(0, 15, 0);
|
||||
|
||||
gl_Position = projectionMatrix * viewMatrix * vec4(position, 1.0);
|
||||
|
||||
vec3 camPos = (inverse(viewMatrix) * vec4(0.0, 0.0, 0.0, 1.0)).xyz;
|
||||
|
||||
toLightVector = vec3(0, 15, 0) - position;
|
||||
toCameraVector = camPos - position;
|
||||
|
||||
surfaceNormal = normal;
|
||||
|
||||
pass_textureCoords = textureCoords;
|
||||
}
|
||||
)";
|
||||
|
||||
@@ -28,17 +43,36 @@ static const char fragmentSource[] =
|
||||
|
||||
precision mediump float;
|
||||
|
||||
flat in int pass_color;
|
||||
uniform sampler2D textureSampler;
|
||||
|
||||
in vec3 toLightVector;
|
||||
in vec3 toCameraVector;
|
||||
in vec3 surfaceNormal;
|
||||
|
||||
in vec2 pass_textureCoords;
|
||||
|
||||
out vec4 out_color;
|
||||
|
||||
void main(void){
|
||||
|
||||
float r = float(pass_color >> 24 & 0xFF) / 255.0;
|
||||
float g = float(pass_color >> 16 & 0xFF) / 255.0;
|
||||
float b = float(pass_color >> 8 & 0xFF) / 255.0;
|
||||
float a = float(pass_color & 0xFF) / 255.0;
|
||||
out_color = vec4(r, g, b, a);
|
||||
float shineDamper = 10.0;
|
||||
float reflectivity = 1.0;
|
||||
|
||||
vec3 unitNormal = normalize(surfaceNormal);
|
||||
vec3 unitLightVector = normalize(toLightVector);
|
||||
vec3 unitCamVector = normalize(toCameraVector);
|
||||
|
||||
vec3 lightDirection = -unitLightVector;
|
||||
vec3 reflectedLightDirection = reflect(lightDirection, unitNormal);
|
||||
|
||||
float diffuse = max(0.0, dot(unitNormal, unitLightVector));
|
||||
|
||||
float specularFactor = max(0.0, dot(reflectedLightDirection, unitCamVector));
|
||||
float specular = pow(specularFactor, shineDamper) * reflectivity;
|
||||
|
||||
float brightness = diffuse + specular;
|
||||
|
||||
out_color = vec4(1.0, 1.0, 1.0, 1.0) * brightness * texture(textureSampler, pass_textureCoords);
|
||||
|
||||
}
|
||||
)";
|
||||
|
||||
Reference in New Issue
Block a user