update Android shaders

This commit is contained in:
2023-11-10 22:47:30 +01:00
parent 087d12091b
commit 9115d3bfea
2 changed files with 67 additions and 24 deletions

View File

@@ -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;
}
)";

View File

@@ -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);
}
)";