UNPKG

mdx-m3-viewer

Version:

A browser WebGL model viewer. Mainly focused on models of the games Warcraft 3 and Starcraft 2.

56 lines (45 loc) 1.67 kB
import TexturedModelView from '../../texturedmodelview'; import ModelViewData from '../../modelviewdata'; import dds from '../dds/handler'; import tga from '../tga/handler'; import Model from './model'; import Bucket from './bucket'; import ModelInstance from './modelinstance'; import shaders from './shaders'; /** * @param {ModelViewer} viewer * @param {ShaderProgram} shader */ function initializeTeamColors(viewer, shader) { let webgl = viewer.webgl; let gl = viewer.gl; let teamColors = [[255, 3, 3], [0, 66, 255], [28, 230, 185], [84, 0, 129], [255, 252, 1], [254, 138, 14], [32, 192, 0], [229, 91, 176], [149, 150, 151], [126, 191, 241], [16, 98, 70], [78, 42, 4], [40, 40, 40], [0, 0, 0]]; webgl.useShaderProgram(shader); for (let i = 0; i < 14; i++) { let color = teamColors[i]; gl.uniform3fv(shader.uniforms['u_teamColors[' + i + ']'], [color[0] / 255, color[1] / 255, color[2] / 255]); } } export default { load(viewer) { viewer.addHandler(dds); viewer.addHandler(tga); // Load shaders for 1-4 texture coordinate models. for (let i = 0; i < 4; i++) { let shader = viewer.loadShader(`M3StandardShader${i}`, `#define EXPLICITUV${i}\n${shaders.vs}`, shaders.fs); // If a shader failed to compile, don't allow the handler to be registered, and send an error instead. if (!shader.ok) { return false; } initializeTeamColors(viewer, shader); } return true; }, extensions: [['.m3', 'arrayBuffer']], Constructor: Model, View: TexturedModelView, Data: ModelViewData, Bucket: Bucket, Instance: ModelInstance, lightPosition: new Float32Array([0, 0, 10000]), };