update Android shaders
This commit is contained in:
@@ -10,17 +10,25 @@ static const char vertexSource[] =
|
|||||||
precision mediump float;
|
precision mediump float;
|
||||||
|
|
||||||
layout(location = 0) in vec3 position;
|
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 viewMatrix;
|
||||||
uniform mat4 projectionMatrix;
|
uniform mat4 projectionMatrix;
|
||||||
uniform vec3 modelPosition;
|
uniform mat4 modelMatrix;
|
||||||
|
|
||||||
flat out int pass_color;
|
out vec3 toLightVector;
|
||||||
|
out vec3 surfaceNormal;
|
||||||
|
|
||||||
void main(void){
|
void main(void){
|
||||||
pass_color = color;
|
vec3 lightPosition = vec3(0, 15, 0);
|
||||||
gl_Position = projectionMatrix * viewMatrix * vec4(position + modelPosition, 1.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;
|
precision mediump float;
|
||||||
|
|
||||||
flat in int pass_color;
|
in vec3 toLightVector;
|
||||||
|
in vec3 surfaceNormal;
|
||||||
|
|
||||||
out vec4 out_color;
|
out vec4 out_color;
|
||||||
|
|
||||||
uniform vec3 ColorEffect;
|
|
||||||
|
|
||||||
void main(void){
|
void main(void){
|
||||||
|
|
||||||
float r = float(pass_color >> 24 & 0xFF) / 255.0;
|
vec3 unitNormal = normalize(surfaceNormal);
|
||||||
float g = float(pass_color >> 16 & 0xFF) / 255.0;
|
vec3 unitLightVector = normalize(toLightVector);
|
||||||
float b = float(pass_color >> 8 & 0xFF) / 255.0;
|
|
||||||
float a = float(pass_color & 0xFF) / 255.0;
|
float diffuse = max(0.2, dot(unitNormal, unitLightVector));
|
||||||
vec3 intermediate_color = vec3(r, g, b) * ColorEffect;
|
|
||||||
out_color = vec4(intermediate_color, a);
|
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;
|
precision mediump float;
|
||||||
|
|
||||||
layout(location = 0) in vec3 position;
|
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 viewMatrix;
|
||||||
uniform mat4 projectionMatrix;
|
uniform mat4 projectionMatrix;
|
||||||
|
|
||||||
flat out int pass_color;
|
out vec3 toLightVector;
|
||||||
|
out vec3 toCameraVector;
|
||||||
|
out vec3 surfaceNormal;
|
||||||
|
|
||||||
|
out vec2 pass_textureCoords;
|
||||||
|
|
||||||
void main(void){
|
void main(void){
|
||||||
pass_color = color;
|
vec3 lightPosition = vec3(0, 15, 0);
|
||||||
gl_Position = projectionMatrix * viewMatrix * vec4(position, 1.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;
|
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;
|
out vec4 out_color;
|
||||||
|
|
||||||
void main(void){
|
void main(void){
|
||||||
|
|
||||||
float r = float(pass_color >> 24 & 0xFF) / 255.0;
|
float shineDamper = 10.0;
|
||||||
float g = float(pass_color >> 16 & 0xFF) / 255.0;
|
float reflectivity = 1.0;
|
||||||
float b = float(pass_color >> 8 & 0xFF) / 255.0;
|
|
||||||
float a = float(pass_color & 0xFF) / 255.0;
|
vec3 unitNormal = normalize(surfaceNormal);
|
||||||
out_color = vec4(r, g, b, a);
|
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