diff --git a/js/render.js b/js/render.js index 703db92..257ebf4 100644 --- a/js/render.js +++ b/js/render.js @@ -64,7 +64,8 @@ function Renderer( id ) this.loadShaders(); // Load player model - this.loadPlayerModel(); + this.loadPlayerHeadModel(); + this.loadPlayerBodyModel(); // Create projection and view matrices var projMatrix = this.projMatrix = mat4.create(); @@ -143,13 +144,26 @@ Renderer.prototype.draw = function() { var player = world.players[p]; + // Draw head + var pitch = player.pitch; + if ( pitch < -0.32 ) pitch = -0.32; + if ( pitch > 0.32 ) pitch = 0.32; + mat4.identity( this.modelMatrix ); mat4.translate( this.modelMatrix, [ player.x, player.y, player.z + 1.7 ] ); mat4.rotateZ( this.modelMatrix, Math.PI - player.yaw ); - mat4.rotateX( this.modelMatrix, -player.pitch ); + mat4.rotateX( this.modelMatrix, -pitch ); gl.uniformMatrix4fv( this.uModelMat, false, this.modelMatrix ); - this.drawBuffer( this.playerModel ); + this.drawBuffer( this.playerHead ); + + // Draw body + mat4.identity( this.modelMatrix ); + mat4.translate( this.modelMatrix, [ player.x, player.y, player.z + 0.01 ] ); + mat4.rotateZ( this.modelMatrix, Math.PI - player.yaw ); + gl.uniformMatrix4fv( this.uModelMat, false, this.modelMatrix ); + + this.drawBuffer( this.playerBody ); } mat4.identity( this.modelMatrix ); @@ -158,71 +172,6 @@ Renderer.prototype.draw = function() gl.bindTexture( gl.TEXTURE_2D, this.texTerrain ); } -// loadPlayerModel() -// -// Loads the player model into a vertex buffer for rendering. - -Renderer.prototype.loadPlayerModel = function() -{ - var gl = this.gl; - - // Player head - var vertices = [ - // Top - -0.25, -0.25, 0.25, 8/64, 0, 1, 1, 1, 1, - 0.25, -0.25, 0.25, 16/64, 0, 1, 1, 1, 1, - 0.25, 0.25, 0.25, 16/64, 8/32, 1, 1, 1, 1, - 0.25, 0.25, 0.25, 16/64, 8/32, 1, 1, 1, 1, - -0.25, 0.25, 0.25, 8/64, 8/32, 1, 1, 1, 1, - -0.25, -0.25, 0.25, 8/64, 0, 1, 1, 1, 1, - - // Bottom - -0.25, -0.25, -0.25, 16/64, 0, 1, 1, 1, 1, - -0.25, 0.25, -0.25, 16/64, 8/32, 1, 1, 1, 1, - 0.25, 0.25, -0.25, 24/64, 8/32, 1, 1, 1, 1, - 0.25, 0.25, -0.25, 24/64, 8/32, 1, 1, 1, 1, - 0.25, -0.25, -0.25, 24/64, 0, 1, 1, 1, 1, - -0.25, -0.25, -0.25, 16/64, 0, 1, 1, 1, 1, - - // Front - -0.25, -0.25, 0.25, 8/64, 8/32, 1, 1, 1, 1, - -0.25, -0.25, -0.25, 8/64, 16/32, 1, 1, 1, 1, - 0.25, -0.25, -0.25, 16/64, 16/32, 1, 1, 1, 1, - 0.25, -0.25, -0.25, 16/64, 16/32, 1, 1, 1, 1, - 0.25, -0.25, 0.25, 16/64, 8/32, 1, 1, 1, 1, - -0.25, -0.25, 0.25, 8/64, 8/32, 1, 1, 1, 1, - - // Rear - -0.25, 0.25, 0.25, 24/64, 8/32, 1, 1, 1, 1, - 0.25, 0.25, 0.25, 32/64, 8/32, 1, 1, 1, 1, - 0.25, 0.25, -0.25, 32/64, 16/32, 1, 1, 1, 1, - 0.25, 0.25, -0.25, 32/64, 16/32, 1, 1, 1, 1, - -0.25, 0.25, -0.25, 24/64, 16/32, 1, 1, 1, 1, - -0.25, 0.25, 0.25, 24/64, 8/32, 1, 1, 1, 1, - - // Left - -0.25, -0.25, 0.25, 16/64, 8/32, 1, 1, 1, 1, - -0.25, 0.25, 0.25, 24/64, 8/32, 1, 1, 1, 1, - -0.25, 0.25, -0.25, 24/64, 16/32, 1, 1, 1, 1, - -0.25, 0.25, -0.25, 24/64, 16/32, 1, 1, 1, 1, - -0.25, -0.25, -0.25, 16/64, 16/32, 1, 1, 1, 1, - -0.25, -0.25, 0.25, 16/64, 8/32, 1, 1, 1, 1, - - // Right - 0.25, -0.25, 0.25, 0, 8/32, 1, 1, 1, 1, - 0.25, -0.25, -0.25, 0, 16/32, 1, 1, 1, 1, - 0.25, 0.25, -0.25, 8/64, 16/32, 1, 1, 1, 1, - 0.25, 0.25, -0.25, 8/64, 16/32, 1, 1, 1, 1, - 0.25, 0.25, 0.25, 8/64, 8/32, 1, 1, 1, 1, - 0.25, -0.25, 0.25, 0, 8/32, 1, 1, 1, 1 - ]; - - var buffer = this.playerModel = gl.createBuffer(); - buffer.vertices = vertices.length / 9; - gl.bindBuffer( gl.ARRAY_BUFFER, buffer ); - gl.bufferData( gl.ARRAY_BUFFER, new Float32Array( vertices ), gl.DYNAMIC_DRAW ); -} - // pickAt( min, max, mx, myy ) // // Returns the block at mouse position mx and my. @@ -567,4 +516,335 @@ Renderer.prototype.drawBuffer = function( buffer ) gl.vertexAttribPointer( this.aTexCoord, 2, gl.FLOAT, false, 9*4, 3*4 ); gl.drawArrays( gl.TRIANGLES, 0, buffer.vertices ); +} + +// loadPlayerHeadModel() +// +// Loads the player head model into a vertex buffer for rendering. + +Renderer.prototype.loadPlayerHeadModel = function() +{ + var gl = this.gl; + + // Player head + var vertices = [ + // Top + -0.25, -0.25, 0.25, 8/64, 0, 1, 1, 1, 1, + 0.25, -0.25, 0.25, 16/64, 0, 1, 1, 1, 1, + 0.25, 0.25, 0.25, 16/64, 8/32, 1, 1, 1, 1, + 0.25, 0.25, 0.25, 16/64, 8/32, 1, 1, 1, 1, + -0.25, 0.25, 0.25, 8/64, 8/32, 1, 1, 1, 1, + -0.25, -0.25, 0.25, 8/64, 0, 1, 1, 1, 1, + + // Bottom + -0.25, -0.25, -0.25, 16/64, 0, 1, 1, 1, 1, + -0.25, 0.25, -0.25, 16/64, 8/32, 1, 1, 1, 1, + 0.25, 0.25, -0.25, 24/64, 8/32, 1, 1, 1, 1, + 0.25, 0.25, -0.25, 24/64, 8/32, 1, 1, 1, 1, + 0.25, -0.25, -0.25, 24/64, 0, 1, 1, 1, 1, + -0.25, -0.25, -0.25, 16/64, 0, 1, 1, 1, 1, + + // Front + -0.25, -0.25, 0.25, 8/64, 8/32, 1, 1, 1, 1, + -0.25, -0.25, -0.25, 8/64, 16/32, 1, 1, 1, 1, + 0.25, -0.25, -0.25, 16/64, 16/32, 1, 1, 1, 1, + 0.25, -0.25, -0.25, 16/64, 16/32, 1, 1, 1, 1, + 0.25, -0.25, 0.25, 16/64, 8/32, 1, 1, 1, 1, + -0.25, -0.25, 0.25, 8/64, 8/32, 1, 1, 1, 1, + + // Rear + -0.25, 0.25, 0.25, 24/64, 8/32, 1, 1, 1, 1, + 0.25, 0.25, 0.25, 32/64, 8/32, 1, 1, 1, 1, + 0.25, 0.25, -0.25, 32/64, 16/32, 1, 1, 1, 1, + 0.25, 0.25, -0.25, 32/64, 16/32, 1, 1, 1, 1, + -0.25, 0.25, -0.25, 24/64, 16/32, 1, 1, 1, 1, + -0.25, 0.25, 0.25, 24/64, 8/32, 1, 1, 1, 1, + + // Right + -0.25, -0.25, 0.25, 16/64, 8/32, 1, 1, 1, 1, + -0.25, 0.25, 0.25, 24/64, 8/32, 1, 1, 1, 1, + -0.25, 0.25, -0.25, 24/64, 16/32, 1, 1, 1, 1, + -0.25, 0.25, -0.25, 24/64, 16/32, 1, 1, 1, 1, + -0.25, -0.25, -0.25, 16/64, 16/32, 1, 1, 1, 1, + -0.25, -0.25, 0.25, 16/64, 8/32, 1, 1, 1, 1, + + // Left + 0.25, -0.25, 0.25, 0, 8/32, 1, 1, 1, 1, + 0.25, -0.25, -0.25, 0, 16/32, 1, 1, 1, 1, + 0.25, 0.25, -0.25, 8/64, 16/32, 1, 1, 1, 1, + 0.25, 0.25, -0.25, 8/64, 16/32, 1, 1, 1, 1, + 0.25, 0.25, 0.25, 8/64, 8/32, 1, 1, 1, 1, + 0.25, -0.25, 0.25, 0, 8/32, 1, 1, 1, 1 + ]; + + var buffer = this.playerHead = gl.createBuffer(); + buffer.vertices = vertices.length / 9; + gl.bindBuffer( gl.ARRAY_BUFFER, buffer ); + gl.bufferData( gl.ARRAY_BUFFER, new Float32Array( vertices ), gl.DYNAMIC_DRAW ); +} + +// loadPlayerBodyModel() +// +// Loads the player body model into a vertex buffer for rendering. + +Renderer.prototype.loadPlayerBodyModel = function() +{ + var gl = this.gl; + + var vertices = [ + // Player torso + + // Top + -0.30, -0.125, 1.45, 20/64, 16/32, 1, 1, 1, 1, + 0.30, -0.125, 1.45, 28/64, 16/32, 1, 1, 1, 1, + 0.30, 0.125, 1.45, 28/64, 20/32, 1, 1, 1, 1, + 0.30, 0.125, 1.45, 28/64, 20/32, 1, 1, 1, 1, + -0.30, 0.125, 1.45, 20/64, 20/32, 1, 1, 1, 1, + -0.30, -0.125, 1.45, 20/64, 16/32, 1, 1, 1, 1, + + // Bottom + -0.30, -0.125, 0.73, 28/64, 16/32, 1, 1, 1, 1, + -0.30, 0.125, 0.73, 28/64, 20/32, 1, 1, 1, 1, + 0.30, 0.125, 0.73, 36/64, 20/32, 1, 1, 1, 1, + 0.30, 0.125, 0.73, 36/64, 20/32, 1, 1, 1, 1, + 0.30, -0.125, 0.73, 36/64, 16/32, 1, 1, 1, 1, + -0.30, -0.125, 0.73, 28/64, 16/32, 1, 1, 1, 1, + + // Front + -0.30, -0.125, 1.45, 20/64, 20/32, 1, 1, 1, 1, + -0.30, -0.125, 0.73, 20/64, 32/32, 1, 1, 1, 1, + 0.30, -0.125, 0.73, 28/64, 32/32, 1, 1, 1, 1, + 0.30, -0.125, 0.73, 28/64, 32/32, 1, 1, 1, 1, + 0.30, -0.125, 1.45, 28/64, 20/32, 1, 1, 1, 1, + -0.30, -0.125, 1.45, 20/64, 20/32, 1, 1, 1, 1, + + // Rear + -0.30, 0.125, 1.45, 40/64, 20/32, 1, 1, 1, 1, + 0.30, 0.125, 1.45, 32/64, 20/32, 1, 1, 1, 1, + 0.30, 0.125, 0.73, 32/64, 32/32, 1, 1, 1, 1, + 0.30, 0.125, 0.73, 32/64, 32/32, 1, 1, 1, 1, + -0.30, 0.125, 0.73, 40/64, 32/32, 1, 1, 1, 1, + -0.30, 0.125, 1.45, 40/64, 20/32, 1, 1, 1, 1, + + // Right + -0.30, -0.125, 1.45, 16/64, 20/32, 1, 1, 1, 1, + -0.30, 0.125, 1.45, 20/64, 20/32, 1, 1, 1, 1, + -0.30, 0.125, 0.73, 20/64, 32/32, 1, 1, 1, 1, + -0.30, 0.125, 0.73, 20/64, 32/32, 1, 1, 1, 1, + -0.30, -0.125, 0.73, 16/64, 32/32, 1, 1, 1, 1, + -0.30, -0.125, 1.45, 16/64, 20/32, 1, 1, 1, 1, + + // Left + 0.30, -0.125, 1.45, 28/64, 20/32, 1, 1, 1, 1, + 0.30, -0.125, 0.73, 28/64, 32/32, 1, 1, 1, 1, + 0.30, 0.125, 0.73, 32/64, 32/32, 1, 1, 1, 1, + 0.30, 0.125, 0.73, 32/64, 32/32, 1, 1, 1, 1, + 0.30, 0.125, 1.45, 32/64, 20/32, 1, 1, 1, 1, + 0.30, -0.125, 1.45, 28/64, 20/32, 1, 1, 1, 1, + + // Left arm + + // Top + 0.30, -0.125, 1.45, 44/64, 16/32, 1, 1, 1, 1, + 0.55, -0.125, 1.45, 48/64, 16/32, 1, 1, 1, 1, + 0.55, 0.125, 1.45, 48/64, 20/32, 1, 1, 1, 1, + 0.55, 0.125, 1.45, 48/64, 20/32, 1, 1, 1, 1, + 0.30, 0.125, 1.45, 44/64, 20/32, 1, 1, 1, 1, + 0.30, -0.125, 1.45, 44/64, 16/32, 1, 1, 1, 1, + + // Bottom + 0.30, -0.125, 0.73, 28/64, 16/32, 1, 1, 1, 1, + 0.30, 0.125, 0.73, 28/64, 20/32, 1, 1, 1, 1, + 0.55, 0.125, 0.73, 36/64, 20/32, 1, 1, 1, 1, + 0.55, 0.125, 0.73, 36/64, 20/32, 1, 1, 1, 1, + 0.55, -0.125, 0.73, 36/64, 16/32, 1, 1, 1, 1, + 0.30, -0.125, 0.73, 28/64, 16/32, 1, 1, 1, 1, + + // Front + 0.30, -0.125, 1.45, 48/64, 20/32, 1, 1, 1, 1, + 0.30, -0.125, 0.73, 48/64, 32/32, 1, 1, 1, 1, + 0.55, -0.125, 0.73, 44/64, 32/32, 1, 1, 1, 1, + 0.55, -0.125, 0.73, 44/64, 32/32, 1, 1, 1, 1, + 0.55, -0.125, 1.45, 44/64, 20/32, 1, 1, 1, 1, + 0.30, -0.125, 1.45, 48/64, 20/32, 1, 1, 1, 1, + + // Rear + 0.30, 0.125, 1.45, 52/64, 20/32, 1, 1, 1, 1, + 0.55, 0.125, 1.45, 56/64, 20/32, 1, 1, 1, 1, + 0.55, 0.125, 0.73, 56/64, 32/32, 1, 1, 1, 1, + 0.55, 0.125, 0.73, 56/64, 32/32, 1, 1, 1, 1, + 0.30, 0.125, 0.73, 52/64, 32/32, 1, 1, 1, 1, + 0.30, 0.125, 1.45, 52/64, 20/32, 1, 1, 1, 1, + + // Right + 0.30, -0.125, 1.45, 48/64, 20/32, 1, 1, 1, 1, + 0.30, 0.125, 1.45, 52/64, 20/32, 1, 1, 1, 1, + 0.30, 0.125, 0.73, 52/64, 32/32, 1, 1, 1, 1, + 0.30, 0.125, 0.73, 52/64, 32/32, 1, 1, 1, 1, + 0.30, -0.125, 0.73, 48/64, 32/32, 1, 1, 1, 1, + 0.30, -0.125, 1.45, 48/64, 20/32, 1, 1, 1, 1, + + // Left + 0.55, -0.125, 1.45, 44/64, 20/32, 1, 1, 1, 1, + 0.55, -0.125, 0.73, 44/64, 32/32, 1, 1, 1, 1, + 0.55, 0.125, 0.73, 40/64, 32/32, 1, 1, 1, 1, + 0.55, 0.125, 0.73, 40/64, 32/32, 1, 1, 1, 1, + 0.55, 0.125, 1.45, 40/64, 20/32, 1, 1, 1, 1, + 0.55, -0.125, 1.45, 44/64, 20/32, 1, 1, 1, 1, + + // Right arm + + // Top + -0.55, -0.125, 1.45, 44/64, 16/32, 1, 1, 1, 1, + -0.30, -0.125, 1.45, 48/64, 16/32, 1, 1, 1, 1, + -0.30, 0.125, 1.45, 48/64, 20/32, 1, 1, 1, 1, + -0.30, 0.125, 1.45, 48/64, 20/32, 1, 1, 1, 1, + -0.55, 0.125, 1.45, 44/64, 20/32, 1, 1, 1, 1, + -0.55, -0.125, 1.45, 44/64, 16/32, 1, 1, 1, 1, + + // Bottom + -0.55, -0.125, 0.73, 28/64, 16/32, 1, 1, 1, 1, + -0.55, 0.125, 0.73, 28/64, 20/32, 1, 1, 1, 1, + -0.30, 0.125, 0.73, 36/64, 20/32, 1, 1, 1, 1, + -0.30, 0.125, 0.73, 36/64, 20/32, 1, 1, 1, 1, + -0.30, -0.125, 0.73, 36/64, 16/32, 1, 1, 1, 1, + -0.55, -0.125, 0.73, 28/64, 16/32, 1, 1, 1, 1, + + // Front + -0.55, -0.125, 1.45, 44/64, 20/32, 1, 1, 1, 1, + -0.55, -0.125, 0.73, 44/64, 32/32, 1, 1, 1, 1, + -0.30, -0.125, 0.73, 48/64, 32/32, 1, 1, 1, 1, + -0.30, -0.125, 0.73, 48/64, 32/32, 1, 1, 1, 1, + -0.30, -0.125, 1.45, 48/64, 20/32, 1, 1, 1, 1, + -0.55, -0.125, 1.45, 44/64, 20/32, 1, 1, 1, 1, + + // Rear + -0.55, 0.125, 1.45, 56/64, 20/32, 1, 1, 1, 1, + -0.30, 0.125, 1.45, 52/64, 20/32, 1, 1, 1, 1, + -0.30, 0.125, 0.73, 52/64, 32/32, 1, 1, 1, 1, + -0.30, 0.125, 0.73, 52/64, 32/32, 1, 1, 1, 1, + -0.55, 0.125, 0.73, 56/64, 32/32, 1, 1, 1, 1, + -0.55, 0.125, 1.45, 56/64, 20/32, 1, 1, 1, 1, + + // Right + -0.55, -0.125, 1.45, 44/64, 20/32, 1, 1, 1, 1, + -0.55, 0.125, 1.45, 40/64, 20/32, 1, 1, 1, 1, + -0.55, 0.125, 0.73, 40/64, 32/32, 1, 1, 1, 1, + -0.55, 0.125, 0.73, 40/64, 32/32, 1, 1, 1, 1, + -0.55, -0.125, 0.73, 44/64, 32/32, 1, 1, 1, 1, + -0.55, -0.125, 1.45, 44/64, 20/32, 1, 1, 1, 1, + + // Left + -0.30, -0.125, 1.45, 48/64, 20/32, 1, 1, 1, 1, + -0.30, -0.125, 0.73, 48/64, 32/32, 1, 1, 1, 1, + -0.30, 0.125, 0.73, 52/64, 32/32, 1, 1, 1, 1, + -0.30, 0.125, 0.73, 52/64, 32/32, 1, 1, 1, 1, + -0.30, 0.125, 1.45, 52/64, 20/32, 1, 1, 1, 1, + -0.30, -0.125, 1.45, 48/64, 20/32, 1, 1, 1, 1, + + // Left leg + + // Top + 0.01, -0.125, 0.73, 4/64, 16/32, 1, 1, 1, 1, + 0.30, -0.125, 0.73, 8/64, 16/32, 1, 1, 1, 1, + 0.30, 0.125, 0.73, 8/64, 20/32, 1, 1, 1, 1, + 0.30, 0.125, 0.73, 8/64, 20/32, 1, 1, 1, 1, + 0.01, 0.125, 0.73, 4/64, 20/32, 1, 1, 1, 1, + 0.01, -0.125, 0.73, 4/64, 16/32, 1, 1, 1, 1, + + // Bottom + 0.01, -0.125, 0, 28/64, 16/32, 1, 1, 1, 1, + 0.01, 0.125, 0, 28/64, 20/32, 1, 1, 1, 1, + 0.30, 0.125, 0, 36/64, 20/32, 1, 1, 1, 1, + 0.30, 0.125, 0, 36/64, 20/32, 1, 1, 1, 1, + 0.30, -0.125, 0, 36/64, 16/32, 1, 1, 1, 1, + 0.01, -0.125, 0, 28/64, 16/32, 1, 1, 1, 1, + + // Front + 0.01, -0.125, 0.73, 4/64, 20/32, 1, 1, 1, 1, + 0.01, -0.125, 0, 4/64, 32/32, 1, 1, 1, 1, + 0.30, -0.125, 0, 8/64, 32/32, 1, 1, 1, 1, + 0.30, -0.125, 0, 8/64, 32/32, 1, 1, 1, 1, + 0.30, -0.125, 0.73, 8/64, 20/32, 1, 1, 1, 1, + 0.01, -0.125, 0.73, 4/64, 20/32, 1, 1, 1, 1, + + // Rear + 0.01, 0.125, 0.73, 12/64, 20/32, 1, 1, 1, 1, + 0.30, 0.125, 0.73, 16/64, 20/32, 1, 1, 1, 1, + 0.30, 0.125, 0, 16/64, 32/32, 1, 1, 1, 1, + 0.30, 0.125, 0, 16/64, 32/32, 1, 1, 1, 1, + 0.01, 0.125, 0, 12/64, 32/32, 1, 1, 1, 1, + 0.01, 0.125, 0.73, 12/64, 20/32, 1, 1, 1, 1, + + // Right + 0.01, -0.125, 0.73, 8/64, 20/32, 1, 1, 1, 1, + 0.01, 0.125, 0.73, 12/64, 20/32, 1, 1, 1, 1, + 0.01, 0.125, 0, 12/64, 32/32, 1, 1, 1, 1, + 0.01, 0.125, 0, 12/64, 32/32, 1, 1, 1, 1, + 0.01, -0.125, 0, 8/64, 32/32, 1, 1, 1, 1, + 0.01, -0.125, 0.73, 8/64, 20/32, 1, 1, 1, 1, + + // Left + 0.30, -0.125, 0.73, 4/64, 20/32, 1, 1, 1, 1, + 0.30, -0.125, 0, 4/64, 32/32, 1, 1, 1, 1, + 0.30, 0.125, 0, 0, 32/32, 1, 1, 1, 1, + 0.30, 0.125, 0, 0, 32/32, 1, 1, 1, 1, + 0.30, 0.125, 0.73, 0, 20/32, 1, 1, 1, 1, + 0.30, -0.125, 0.73, 4/64, 20/32, 1, 1, 1, 1, + + // Right leg + + // Top + -0.30, -0.125, 0.73, 4/64, 16/32, 1, 1, 1, 1, + -0.01, -0.125, 0.73, 8/64, 16/32, 1, 1, 1, 1, + -0.01, 0.125, 0.73, 8/64, 20/32, 1, 1, 1, 1, + -0.01, 0.125, 0.73, 8/64, 20/32, 1, 1, 1, 1, + -0.30, 0.125, 0.73, 4/64, 20/32, 1, 1, 1, 1, + -0.30, -0.125, 0.73, 4/64, 16/32, 1, 1, 1, 1, + + // Bottom + -0.30, -0.125, 0, 28/64, 16/32, 1, 1, 1, 1, + -0.30, 0.125, 0, 28/64, 20/32, 1, 1, 1, 1, + -0.01, 0.125, 0, 36/64, 20/32, 1, 1, 1, 1, + -0.01, 0.125, 0, 36/64, 20/32, 1, 1, 1, 1, + -0.01, -0.125, 0, 36/64, 16/32, 1, 1, 1, 1, + -0.30, -0.125, 0, 28/64, 16/32, 1, 1, 1, 1, + + // Front + -0.30, -0.125, 0.73, 4/64, 20/32, 1, 1, 1, 1, + -0.30, -0.125, 0, 4/64, 32/32, 1, 1, 1, 1, + -0.01, -0.125, 0, 8/64, 32/32, 1, 1, 1, 1, + -0.01, -0.125, 0, 8/64, 32/32, 1, 1, 1, 1, + -0.01, -0.125, 0.73, 8/64, 20/32, 1, 1, 1, 1, + -0.30, -0.125, 0.73, 4/64, 20/32, 1, 1, 1, 1, + + // Rear + -0.30, 0.125, 0.73, 16/64, 20/32, 1, 1, 1, 1, + -0.01, 0.125, 0.73, 12/64, 20/32, 1, 1, 1, 1, + -0.01, 0.125, 0, 12/64, 32/32, 1, 1, 1, 1, + -0.01, 0.125, 0, 12/64, 32/32, 1, 1, 1, 1, + -0.30, 0.125, 0, 16/64, 32/32, 1, 1, 1, 1, + -0.30, 0.125, 0.73, 16/64, 20/32, 1, 1, 1, 1, + + // Right + -0.30, -0.125, 0.73, 4/64, 20/32, 1, 1, 1, 1, + -0.30, 0.125, 0.73, 0, 20/32, 1, 1, 1, 1, + -0.30, 0.125, 0, 0, 32/32, 1, 1, 1, 1, + -0.30, 0.125, 0, 0, 32/32, 1, 1, 1, 1, + -0.30, -0.125, 0, 4/64, 32/32, 1, 1, 1, 1, + -0.30, -0.125, 0.73, 4/64, 20/32, 1, 1, 1, 1, + + // Left + -0.01, -0.125, 0.73, 8/64, 20/32, 1, 1, 1, 1, + -0.01, -0.125, 0, 8/64, 32/32, 1, 1, 1, 1, + -0.01, 0.125, 0,12/64, 32/32, 1, 1, 1, 1, + -0.01, 0.125, 0, 12/64, 32/32, 1, 1, 1, 1, + -0.01, 0.125, 0.73, 12/64, 20/32, 1, 1, 1, 1, + -0.01, -0.125, 0.73, 8/64, 20/32, 1, 1, 1, 1 + ]; + + var buffer = this.playerBody = gl.createBuffer(); + buffer.vertices = vertices.length / 9; + gl.bindBuffer( gl.ARRAY_BUFFER, buffer ); + gl.bufferData( gl.ARRAY_BUFFER, new Float32Array( vertices ), gl.DYNAMIC_DRAW ); } \ No newline at end of file