mdx-m3-viewer
Version:
A browser WebGL model viewer. Mainly focused on models of the games Warcraft 3 and Starcraft 2.
79 lines (66 loc) • 2.14 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const precision_glsl_1 = require("../../shaders/precision.glsl");
const shader = `
${precision_glsl_1.default}
uniform sampler2D u_tilesets[15];
varying vec4 v_tilesets;
varying vec2 v_uv[4];
varying vec3 v_normal;
const vec3 lightDirection = normalize(vec3(-0.3, -0.3, 0.25));
vec4 sample(float tileset, vec2 uv) {
// 1.0 - 1.0 == 0.0 is not always true.
int i = int(tileset - 0.6);
if (i == 0) {
return texture2D(u_tilesets[0], uv);
} else if (i == 1) {
return texture2D(u_tilesets[1], uv);
} else if (i == 2) {
return texture2D(u_tilesets[2], uv);
} else if (i == 3) {
return texture2D(u_tilesets[3], uv);
} else if (i == 4) {
return texture2D(u_tilesets[4], uv);
} else if (i == 5) {
return texture2D(u_tilesets[5], uv);
} else if (i == 6) {
return texture2D(u_tilesets[6], uv);
} else if (i == 7) {
return texture2D(u_tilesets[7], uv);
} else if (i == 8) {
return texture2D(u_tilesets[8], uv);
} else if (i == 9) {
return texture2D(u_tilesets[9], uv);
} else if (i == 10) {
return texture2D(u_tilesets[10], uv);
} else if (i == 11) {
return texture2D(u_tilesets[11], uv);
} else if (i == 12) {
return texture2D(u_tilesets[12], uv);
} else if (i == 13) {
return texture2D(u_tilesets[13], uv);
} else if (i == 14) {
return texture2D(u_tilesets[14], uv);
}
}
vec4 blend(vec4 color, float tileset, vec2 uv) {
vec4 texel = sample(tileset, uv);
return mix(color, texel, texel.a);
}
void main() {
vec4 color = sample(v_tilesets[0], v_uv[0]);
if (v_tilesets[1] > 0.5) {
color = blend(color, v_tilesets[1], v_uv[1]);
}
if (v_tilesets[2] > 0.5) {
color = blend(color, v_tilesets[2], v_uv[2]);
}
if (v_tilesets[3] > 0.5) {
color = blend(color, v_tilesets[3], v_uv[3]);
}
//color *= clamp(dot(v_normal, lightDirection) + 0.45, 0.0, 1.0);
gl_FragColor = vec4(color.rgb, 1.0);
}
`;
exports.default = shader;
//# sourceMappingURL=ground.frag.js.map