trueno/src/shaders/shader_trile.glsl

54 lines
1.6 KiB
GLSL

@vs vs_trile
in vec4 position;
in vec4 normal;
in vec4 centre;
layout(binding=0) uniform trile_vs_params {
mat4 mvp;
};
out vec3 to_center;
out vec3 vpos;
out vec4 fnormal;
void main() {
gl_Position = mvp * vec4(position.xyz, 1.0);
fnormal = normal;
to_center = centre.xyz - position.xyz;
vpos = position.xyz;
}
@end
@fs fs_trile
in vec3 to_center;
in vec3 vpos;
in vec4 fnormal;
out vec4 frag_color;
layout(binding = 0) uniform texture2D triletex;
layout(binding = 0) uniform sampler trilesmp;
void main() {
//frag_color = vec4((fnormal.xyz + vec3(1.0, 1.0, 1.0)) * 0.5, 1.0);
vec3 pos_after_adjust_f = vpos - fnormal.xyz * 0.01 + normalize(to_center) * 0.01;
vec3 pos_after_adjust_b = vpos - fnormal.xyz * 0.01 + normalize(to_center) * 0.1;
int xpos_f = int(clamp(pos_after_adjust_f.z, 0.0001, 0.99999) * 16.0);
int ypos_f = int(clamp(pos_after_adjust_f.y, 0.0001, 0.99999) * 16.0);
int zpos_f = int(clamp(pos_after_adjust_f.x, 0.0001, 0.99999) * 16.0);
int xpos_b = int(clamp(pos_after_adjust_b.z, 0.0001, 0.99999) * 16.0);
int ypos_b = int(clamp(pos_after_adjust_b.y, 0.0001, 0.99999) * 16.0);
int zpos_b = int(clamp(pos_after_adjust_b.x, 0.0001, 0.99999) * 16.0);
vec4 trixel_material_b = texelFetch(sampler2D(triletex, trilesmp), ivec2(xpos_b, ypos_b + zpos_b * 16), 0);
vec4 trixel_material_f = texelFetch(sampler2D(triletex, trilesmp), ivec2(xpos_f, ypos_f + zpos_f * 16), 0);
frag_color = vec4(max(trixel_material_f.xyz, trixel_material_b.xyz), 1.0);
// frag_color = vec4(vec3(length(to_center)), 1.0);
}
@end
@program trile vs_trile fs_trile