import $ from 'jquery'; import {fetchObj, loadObj} from './objutils'; import {loadTexture} from './texture'; /** * Initialize the parameters * @param {any} context the program context */ export function initParams(context: any) { let instanceNumber = parseFloat($('#instance').val()); if (($('input[name=instance]:checked', '#instanceoptions').val() == 'one')) { instanceNumber = 1; } else if (($('input[name=instance]:checked', '#instanceoptions').val() == 'zero')) { instanceNumber = 0; } context.params = { distance: parseFloat($('#distance').val()) + parseFloat($('#distancefine').val()), circleSize: parseFloat($('#circlesize').val()), fov: parseFloat($('#fov').val()), len: 0, range: 0, rot: { x: parseFloat($('#rotx').val()), y: parseFloat($('#roty').val()), z: parseFloat($('#rotz').val()), }, pos: { x: parseFloat($('#posx').val()), y: parseFloat($('#posy').val()), z: parseFloat($('#posz').val()), }, scale: { x: parseFloat($('#scalex').val()), y: parseFloat($('#scaley').val()), z: parseFloat($('#scalez').val()), }, rotSpeed: parseFloat($('#rotspeed').val()), instanceNumber: instanceNumber, squareRotation: 0, camRot: { x: 0, y: 0, }, camPos: { x: 0, y: 0, z: 0, }, keyboard: { w: false, a: false, s: false, d: false, space: false, shift: false, }, }; } /** * Initialize the cache with an object * @param {any} context the program context */ export async function initCache(context: any) { const racerData = await fetchObj('/static/objs/racer.obj'); const racerObj = loadObj(racerData); const racerTexture = loadTexture(context.gl, '/static/textures/racer.png'); context.cache = { objs: { fox: null, mecha: null, racer: racerObj, sphere: null, teapot: null, }, textures: { fox: null, ice: null, noise: null, racerWireframe: null, racer: racerTexture, wall: null, }, }; context.obj = { positions: racerObj.positions, indices: racerObj.indices, normals: racerObj.normals, uvs: racerObj.uvs, }; context.params.len = racerObj.indices.length; context.params.range = racerObj.range; context.texture = racerTexture; } /** * Set the program info * @param {any} context the program context */ export function setProgramInfo(context: any) { context.programInfo = { program: context.shaderProgram, attribLocations: { vertexPosition: context.gl.getAttribLocation(context.shaderProgram, 'aVertexPosition'), vertexNormal: context.gl.getAttribLocation(context.shaderProgram, 'aVertexNormal'), textureCoord: context.gl.getAttribLocation(context.shaderProgram, 'aTextureCoord'), }, uniformLocations: { projectionMatrix: context.gl.getUniformLocation( context.shaderProgram, 'uProjectionMatrix'), viewMatrix: context.gl.getUniformLocation( context.shaderProgram, 'uviewMatrix'), modelMatrix: context.gl.getUniformLocation( context.shaderProgram, 'umodelMatrix'), normalMatrix: context.gl.getUniformLocation( context.shaderProgram, 'unormalMatrix'), uSampler: context.gl.getUniformLocation( context.shaderProgram, 'uSampler'), time: context.gl.getUniformLocation( context.shaderProgram, 'time'), }, }; }