├── Camera3D.js ├── DirLight3D.js ├── GeometryBuffer3D.js ├── Graphics3D.js ├── Graphics3DRenderer.js ├── Material3D.js ├── PointLight3D.js ├── README.md ├── StaticMesh3D.js ├── data ├── meshes │ ├── cube.obj │ ├── monkey.obj │ ├── rock.obj │ ├── sphere.obj │ ├── suzanne.obj │ ├── teapot.obj │ └── torus.obj └── textures │ ├── 165.jpg │ ├── 165_norm.jpg │ ├── Cube.png │ ├── brick.jpg │ ├── brick_normal.png │ ├── rocks_01_dif.jpg │ ├── rocks_01_dif.png │ ├── rocks_01_nm.jpg │ ├── rocks_01_nm.png │ └── sao-sinon.png ├── gl-matrix.min.js ├── gl-utils.js ├── index.html ├── main.js ├── objpar.js └── shaders ├── LitTextured.js ├── LitUntextured.js ├── UnlitTextured.js └── UnlitUntextured.js /Camera3D.js: -------------------------------------------------------------------------------- 1 | function Camera3D() 2 | { 3 | this.projection = mat4.create(); 4 | this.view = mat4.create(); 5 | this.position = vec3.create(); 6 | this.clearColor = vec3.create(); 7 | } 8 | 9 | Camera3D.prototype.setClearColor = function (r, g, b) 10 | { 11 | this.clearColor[0] = r; 12 | this.clearColor[1] = g; 13 | this.clearColor[2] = b; 14 | 15 | return this; 16 | }; 17 | 18 | Camera3D.prototype.setPosition = function (x, y, z) 19 | { 20 | this.position[0] = x; 21 | this.position[1] = y; 22 | this.position[2] = z; 23 | 24 | return this; 25 | }; 26 | 27 | Camera3D.prototype.setOrtho = function (left, right, bottom, top, near, far) 28 | { 29 | mat4.identity(this.projection); 30 | mat4.ortho(this.projection, left, right, bottom, top, near, far); 31 | 32 | return this; 33 | }; 34 | 35 | Camera3D.prototype.setPerspective = function (fieldOfView, aspectRatio, near, far) 36 | { 37 | mat4.identity(this.projection); 38 | mat4.perspective(this.projection, fieldOfView, aspectRatio, near, far); 39 | 40 | return this; 41 | }; 42 | 43 | Camera3D.prototype.lookAt = function (px, py, pz, x, y, z) 44 | { 45 | this.setPosition(px, py, pz); 46 | mat4.identity(this.view); 47 | mat4.lookAt(this.view, this.position, [x, y, z], [0, 1, 0]); 48 | 49 | return this; 50 | }; -------------------------------------------------------------------------------- /DirLight3D.js: -------------------------------------------------------------------------------- 1 | function DirLight3D(x, y, z) 2 | { 3 | this.direction = vec3.fromValues(x, y, z); 4 | this.ambient = vec3.fromValues(0.1, 0.1, 0.1); 5 | this.diffuse = vec3.fromValues(0.1, 0.1, 0.1); 6 | this.specular = vec3.fromValues(0.1, 0.1, 0.1); 7 | this.active = false; 8 | this.lastActiveState = false; 9 | } 10 | 11 | DirLight3D.prototype.setDirection = function (x, y, z) 12 | { 13 | this.direction[0] = x; 14 | this.direction[1] = y; 15 | this.direction[2] = z; 16 | 17 | return this; 18 | }; 19 | 20 | DirLight3D.prototype.setAmbient = function (r, g, b) 21 | { 22 | this.ambient[0] = r; 23 | this.ambient[1] = g; 24 | this.ambient[2] = b; 25 | 26 | return this; 27 | }; 28 | 29 | DirLight3D.prototype.setDiffuse = function (r, g, b) 30 | { 31 | this.diffuse[0] = r; 32 | this.diffuse[1] = g; 33 | this.diffuse[2] = b; 34 | 35 | return this; 36 | }; 37 | 38 | DirLight3D.prototype.setSpecular = function (r, g, b) 39 | { 40 | this.specular[0] = r; 41 | this.specular[1] = g; 42 | this.specular[2] = b; 43 | 44 | return this; 45 | }; -------------------------------------------------------------------------------- /GeometryBuffer3D.js: -------------------------------------------------------------------------------- 1 | function GeometryBuffer3D() 2 | { 3 | this.vbo = null; 4 | this.vertices = null; 5 | this.vertexCount = 0; 6 | } 7 | -------------------------------------------------------------------------------- /Graphics3D.js: -------------------------------------------------------------------------------- 1 | function Graphics3D(renderer) 2 | { 3 | this.renderer = renderer; 4 | this.displayList = []; 5 | this.camera = null; 6 | this.dirLight = new DirLight3D(0, 0, 0); 7 | this.pointLights = []; 8 | 9 | for (var index = 0; index < Graphics3D.MAX_LIGHTS; ++index) 10 | { 11 | this.pointLights[index] = new PointLight3D(0, 0, 0); 12 | } 13 | } 14 | 15 | Graphics3D.MAX_LIGHTS = 16; 16 | 17 | Graphics3D.prototype.cloneStaticMesh = function (x, y, z, staticMesh) 18 | { 19 | var mesh = new StaticMesh3D(x, y, z, staticMesh.geometry); 20 | 21 | return mesh; 22 | }; 23 | 24 | Graphics3D.prototype.makeGeometryBuffer = function (vertices, vertexCount) 25 | { 26 | // Vertex Definition 27 | // 28 | // struct Vertex { 29 | // vec3 position; 30 | // vec3 normals; 31 | // vec2 texcoord; 32 | // }; 33 | // 34 | 35 | var gl = this.renderer.gl; 36 | var geometry = new GeometryBuffer3D(); 37 | 38 | geometry.vbo = gl.createBuffer(); 39 | geometry.vertices = vertices; 40 | geometry.vertexCount = vertexCount; 41 | 42 | gl.bindBuffer(gl.ARRAY_BUFFER, geometry.vbo); 43 | gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW); 44 | gl.bindBuffer(gl.ARRAY_BUFFER, null); 45 | 46 | return geometry; 47 | }; 48 | 49 | Graphics3D.prototype.makeStaticMesh = function (x, y, z, geometry, texture, normal) 50 | { 51 | var gl = this.renderer.gl; 52 | var mesh = new StaticMesh3D(x, y, z, geometry, texture, normal); 53 | 54 | return mesh; 55 | }; 56 | 57 | Graphics3D.prototype.makeQuadGeometryBuffer = function () 58 | { 59 | return this.makeGeometryBuffer(new Float32Array([ 60 | -1.0, +1.0, +0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 61 | -1.0, -1.0, +0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 62 | +1.0, -1.0, +0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 63 | -1.0, +1.0, +0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 64 | +1.0, -1.0, +0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 65 | +1.0, +1.0, +0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0 66 | ]), 67 | 6); 68 | }; 69 | 70 | Graphics3D.prototype.makeCubeGeometryBuffer = function () 71 | { 72 | return this.makeGeometryBuffer(new Float32Array([ 73 | -1, +1, +1, -1, +0, +0, +0, +0, 0.0, 0.0, 0.0, 74 | -1, -1, -1, -1, +0, +0, +0, +0, 0.0, 0.0, 0.0, 75 | -1, -1, +1, -1, +0, +0, +0, +0, 0.0, 0.0, 0.0, 76 | -1, +1, -1, +0, +0, -1, +0, +0, 0.0, 0.0, 0.0, 77 | +1, -1, -1, +0, +0, -1, +0, +0, 0.0, 0.0, 0.0, 78 | -1, -1, -1, +0, +0, -1, +0, +0, 0.0, 0.0, 0.0, 79 | +1, +1, -1, +1, +0, +0, +0, +0, 0.0, 0.0, 0.0, 80 | +1, -1, +1, +1, +0, +0, +0, +0, 0.0, 0.0, 0.0, 81 | +1, -1, -1, +1, +0, +0, +0, +0, 0.0, 0.0, 0.0, 82 | +1, +1, +1, +0, +0, +1, +0, +0, 0.0, 0.0, 0.0, 83 | -1, -1, +1, +0, +0, +1, +0, +0, 0.0, 0.0, 0.0, 84 | +1, -1, +1, +0, +0, +1, +0, +0, 0.0, 0.0, 0.0, 85 | +1, -1, -1, +0, -1, +0, +0, +0, 0.0, 0.0, 0.0, 86 | -1, -1, +1, +0, -1, +0, +0, +0, 0.0, 0.0, 0.0, 87 | -1, -1, -1, +0, -1, +0, +0, +0, 0.0, 0.0, 0.0, 88 | -1, +1, -1, +0, +1, +0, +0, +0, 0.0, 0.0, 0.0, 89 | +1, +1, +1, +0, +1, +0, +0, +0, 0.0, 0.0, 0.0, 90 | +1, +1, -1, +0, +1, +0, +0, +0, 0.0, 0.0, 0.0, 91 | -1, +1, +1, -1, +0, +0, +0, +0, 0.0, 0.0, 0.0, 92 | -1, +1, -1, -1, +0, +0, +0, +0, 0.0, 0.0, 0.0, 93 | -1, -1, -1, -1, +0, +0, +0, +0, 0.0, 0.0, 0.0, 94 | -1, +1, -1, +0, +0, -1, +0, +0, 0.0, 0.0, 0.0, 95 | +1, +1, -1, +0, +0, -1, +0, +0, 0.0, 0.0, 0.0, 96 | +1, -1, -1, +0, +0, -1, +0, +0, 0.0, 0.0, 0.0, 97 | +1, +1, -1, +1, +0, +0, +0, +0, 0.0, 0.0, 0.0, 98 | +1, +1, +1, +1, +0, +0, +0, +0, 0.0, 0.0, 0.0, 99 | +1, -1, +1, +1, +0, +0, +0, +0, 0.0, 0.0, 0.0, 100 | +1, +1, +1, +0, +0, +1, +0, +0, 0.0, 0.0, 0.0, 101 | -1, +1, +1, +0, +0, +1, +0, +0, 0.0, 0.0, 0.0, 102 | -1, -1, +1, +0, +0, +1, +0, +0, 0.0, 0.0, 0.0, 103 | +1, -1, -1, +0, -1, +0, +0, +0, 0.0, 0.0, 0.0, 104 | +1, -1, +1, +0, -1, +0, +0, +0, 0.0, 0.0, 0.0, 105 | -1, -1, +1, +0, -1, +0, +0, +0, 0.0, 0.0, 0.0, 106 | -1, +1, -1, +0, +1, +0, +0, +0, 0.0, 0.0, 0.0, 107 | -1, +1, +1, +0, +1, +0, +0, +0, 0.0, 0.0, 0.0, 108 | +1, +1, +1, +0, +1, +0, +0, +0, 0.0, 0.0, 0.0 109 | ]), 110 | 36); 111 | }; 112 | 113 | Graphics3D.prototype.add = function () 114 | { 115 | var args = Array.prototype.slice.call(arguments); 116 | var displayList = this.displayList; 117 | 118 | for (var index = 0; index < args.length; ++index) 119 | { 120 | var mesh = args[index]; 121 | if (displayList.indexOf(mesh) < 0) 122 | { 123 | displayList.push(mesh); 124 | } 125 | } 126 | }; 127 | 128 | Graphics3D.prototype.render = function () 129 | { 130 | var camera = this.camera; 131 | 132 | if (camera) 133 | { 134 | var renderer = this.renderer; 135 | var displayList = this.displayList; 136 | var dirLight = this.dirLight; 137 | var pointLights = this.pointLights; 138 | var displayListLength = displayList.length; 139 | var gl = renderer.gl; 140 | 141 | gl.clearColor(camera.clearColor[0], camera.clearColor[1], camera.clearColor[2], 1.0); 142 | gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT); 143 | gl.enable(gl.DEPTH_TEST); 144 | gl.depthFunc(gl.LESS); 145 | 146 | renderer.updateUniforms({ 147 | dirLight: dirLight, 148 | pointLights: pointLights, 149 | camera: camera 150 | }); 151 | 152 | for (var meshIndex = 0; meshIndex < displayListLength; ++meshIndex) 153 | { 154 | renderer.draw({ 155 | mesh: displayList[meshIndex] 156 | }); 157 | } 158 | 159 | gl.disable(gl.DEPTH_TEST); 160 | } 161 | }; -------------------------------------------------------------------------------- /Graphics3DRenderer.js: -------------------------------------------------------------------------------- 1 | // Vertex Definition 2 | // 3 | // struct Vertex { 4 | // vec3 position; 5 | // vec3 normals; 6 | // vec2 texcoord; 7 | // }; 8 | 9 | function Graphics3DRenderer(webglContext) 10 | { 11 | this.gl = webglContext; 12 | this.programs = []; 13 | this.cachedModel = []; 14 | this.cachedModel[0] = mat4.create(); 15 | this.cachedModel[1] = mat4.create(); 16 | this.emptyTexture = GLutils.createTextureFromBuffer(webglContext, 1, 1, new Uint8Array([127, 127, 255, 255])); 17 | 18 | this.init(); 19 | } 20 | 21 | Graphics3DRenderer.VERTEX_SIZE = Float32Array.BYTES_PER_ELEMENT * 11; 22 | Graphics3DRenderer.VERTEX_POSITION = 0; 23 | Graphics3DRenderer.VERTEX_NORMALS = Float32Array.BYTES_PER_ELEMENT * 3; 24 | Graphics3DRenderer.VERTEX_TEXCOORD = Float32Array.BYTES_PER_ELEMENT * 6; 25 | Graphics3DRenderer.VERTEX_TANGENT = Float32Array.BYTES_PER_ELEMENT * 8; 26 | Graphics3DRenderer.SHADER_UNLIT_UNTEXTURED = 0; 27 | Graphics3DRenderer.SHADER_LIT_UNTEXTURED = 1; 28 | Graphics3DRenderer.SHADER_UNLIT_TEXTURED = 2; 29 | Graphics3DRenderer.SHADER_LIT_TEXTURED = 3; 30 | 31 | Graphics3DRenderer.prototype.init = function () 32 | { 33 | var gl = this.gl; 34 | 35 | // SHADER_UNLIT_UNTEXTURED 36 | { 37 | this.programs[Graphics3DRenderer.SHADER_UNLIT_UNTEXTURED] = GLutils.createProgram(gl, UnlitUntextured.vert, UnlitUntextured.frag); 38 | 39 | gl.bindAttribLocation(this.programs[Graphics3DRenderer.SHADER_UNLIT_UNTEXTURED], 0, 'inPosition'); 40 | } 41 | 42 | // SHADER_LIT_UNTEXTURED 43 | { 44 | this.programs[Graphics3DRenderer.SHADER_LIT_UNTEXTURED] = GLutils.createProgram(gl, LitUntextured.vert, LitUntextured.frag); 45 | 46 | gl.bindAttribLocation(this.programs[Graphics3DRenderer.SHADER_LIT_UNTEXTURED], 0, 'inPosition'); 47 | gl.bindAttribLocation(this.programs[Graphics3DRenderer.SHADER_LIT_UNTEXTURED], 1, 'inNormal'); 48 | } 49 | 50 | // SHADER_UNLIT_TEXTURED 51 | { 52 | this.programs[Graphics3DRenderer.SHADER_UNLIT_TEXTURED] = GLutils.createProgram(gl, UnlitTextured.vert, UnlitTextured.frag); 53 | 54 | gl.bindAttribLocation(this.programs[Graphics3DRenderer.SHADER_UNLIT_TEXTURED], 0, 'inPosition'); 55 | gl.bindAttribLocation(this.programs[Graphics3DRenderer.SHADER_UNLIT_TEXTURED], 1, 'inTexCoord'); 56 | } 57 | 58 | // SHADER_LIT_TEXTURED 59 | { 60 | this.programs[Graphics3DRenderer.SHADER_LIT_TEXTURED] = GLutils.createProgram(gl, LitTextured.vert, LitTextured.frag); 61 | 62 | gl.bindAttribLocation(this.programs[Graphics3DRenderer.SHADER_LIT_TEXTURED], 0, 'inPosition'); 63 | gl.bindAttribLocation(this.programs[Graphics3DRenderer.SHADER_LIT_TEXTURED], 1, 'inNormal'); 64 | gl.bindAttribLocation(this.programs[Graphics3DRenderer.SHADER_LIT_TEXTURED], 2, 'inTexCoord'); 65 | gl.bindAttribLocation(this.programs[Graphics3DRenderer.SHADER_LIT_TEXTURED], 3, 'inTangent'); 66 | 67 | gl.useProgram(this.programs[Graphics3DRenderer.SHADER_LIT_TEXTURED]); 68 | gl.uniform1i(gl.getUniformLocation(this.programs[Graphics3DRenderer.SHADER_LIT_TEXTURED], 'uNormalSampler'), 1); 69 | gl.useProgram(null); 70 | } 71 | }; 72 | 73 | // Call this only once per frame. 74 | Graphics3DRenderer.prototype.updateUniforms = function (uniformData) 75 | { 76 | var gl = this.gl; 77 | var camera = uniformData.camera; 78 | var dirLight = uniformData.dirLight; 79 | var pointLights = uniformData.pointLights; 80 | var programs = this.programs; 81 | 82 | for (var index = 0; index < programs.length; ++index) 83 | { 84 | var program = programs[index]; 85 | 86 | gl.useProgram(program); 87 | gl.uniformMatrix4fv(gl.getUniformLocation(program, 'uViewMatrix'), false, camera.view); 88 | gl.uniformMatrix4fv(gl.getUniformLocation(program, 'uProjectionMatrix'), false, camera.projection); 89 | } 90 | 91 | var litIndices = [Graphics3DRenderer.SHADER_LIT_UNTEXTURED, Graphics3DRenderer.SHADER_LIT_TEXTURED]; 92 | 93 | // Update Lit uniforms 94 | for (var programIndex = 0; programIndex < litIndices.length; ++programIndex) 95 | { 96 | var program = programs[litIndices[programIndex]]; 97 | 98 | gl.useProgram(program); 99 | gl.uniform3fv(gl.getUniformLocation(program, 'uCameraPosition'), camera.position); 100 | 101 | if (dirLight.lastActiveState !== dirLight.active) 102 | { 103 | dirLight.lastActiveState = dirLight.active; 104 | gl.uniform1i(gl.getUniformLocation(program, 'uDirLight.active'), dirLight.active); 105 | } 106 | 107 | if (dirLight.active) 108 | { 109 | gl.uniform3fv(gl.getUniformLocation(program, 'uDirLight.direction'), dirLight.direction); 110 | gl.uniform3fv(gl.getUniformLocation(program, 'uDirLight.ambient'), dirLight.ambient); 111 | gl.uniform3fv(gl.getUniformLocation(program, 'uDirLight.diffuse'), dirLight.diffuse); 112 | gl.uniform3fv(gl.getUniformLocation(program, 'uDirLight.specular'), dirLight.specular); 113 | gl.uniform1i(gl.getUniformLocation(program, 'uDirLight.active'), dirLight.active); 114 | } 115 | 116 | for (var index = 0; index < pointLights.length; ++index) 117 | { 118 | var light = pointLights[index]; 119 | 120 | if (light.lastActiveState !== light.active) 121 | { 122 | gl.uniform1i(gl.getUniformLocation(program, 'uPointLights[' + index + '].active'), light.active); 123 | } 124 | 125 | if (light.active) 126 | { 127 | gl.uniform3fv(gl.getUniformLocation(program, 'uPointLights[' + index + '].position'), light.position); 128 | gl.uniform3fv(gl.getUniformLocation(program, 'uPointLights[' + index + '].color'), light.color); 129 | gl.uniform1f(gl.getUniformLocation(program, 'uPointLights[' + index + '].intensity'), light.intensity); 130 | gl.uniform1f(gl.getUniformLocation(program, 'uPointLights[' + index + '].range'), light.range); 131 | } 132 | } 133 | } 134 | 135 | for (var index = 0; index < pointLights.length; ++index) 136 | { 137 | var light = pointLights[index]; 138 | light.lastActiveState = light.active; 139 | } 140 | 141 | }; 142 | 143 | Graphics3DRenderer.prototype.draw = function (drawPacket) 144 | { 145 | var gl = this.gl; 146 | var model = mat4.identity(this.cachedModel[0]); 147 | var program = null; 148 | var mesh = drawPacket.mesh; 149 | var camera = drawPacket.camera; 150 | var dirLight = drawPacket.dirLight; 151 | var pointLights = drawPacket.pointLights; 152 | var geometry = mesh.geometry; 153 | 154 | if (!geometry || geometry.vertexCount === 0) return; 155 | 156 | gl.bindBuffer(gl.ARRAY_BUFFER, geometry.vbo); 157 | 158 | mat4.fromRotationTranslationScale(model, mesh.quaternion, mesh.position, mesh.scale); 159 | 160 | if (mesh.texture === null) 161 | { 162 | if (mesh.material === null) 163 | { 164 | program = this.programs[Graphics3DRenderer.SHADER_UNLIT_UNTEXTURED]; 165 | gl.useProgram(program); 166 | 167 | // Vertex Layout 168 | gl.enableVertexAttribArray(0); 169 | gl.vertexAttribPointer(0, 3, gl.FLOAT, false, Graphics3DRenderer.VERTEX_SIZE, Graphics3DRenderer.VERTEX_POSITION); 170 | 171 | // Per mesh uniform data 172 | gl.uniform3fv(gl.getUniformLocation(program, 'uFlatColor'), mesh.flatColor); 173 | } 174 | else 175 | { 176 | var material = mesh.material; 177 | var invModel = mat4.invert(this.cachedModel[1], model); 178 | 179 | invModel = mat4.transpose(invModel, invModel); 180 | program = this.programs[Graphics3DRenderer.SHADER_LIT_UNTEXTURED]; 181 | 182 | gl.useProgram(program); 183 | 184 | // Vertex Layout 185 | gl.enableVertexAttribArray(0); 186 | gl.enableVertexAttribArray(1); 187 | gl.vertexAttribPointer(0, 3, gl.FLOAT, false, Graphics3DRenderer.VERTEX_SIZE, Graphics3DRenderer.VERTEX_POSITION); 188 | gl.vertexAttribPointer(1, 3, gl.FLOAT, false, Graphics3DRenderer.VERTEX_SIZE, Graphics3DRenderer.VERTEX_NORMALS); 189 | 190 | // Per mesh uniform data 191 | gl.uniformMatrix4fv(gl.getUniformLocation(program, 'uInvModelMatrix'), false, invModel); 192 | gl.uniform1f(gl.getUniformLocation(program, 'uMaterial.shininess'), material.shininess); 193 | gl.uniform3fv(gl.getUniformLocation(program, 'uMaterial.ambient'), material.ambient); 194 | gl.uniform3fv(gl.getUniformLocation(program, 'uMaterial.diffuse'), material.diffuse); 195 | gl.uniform3fv(gl.getUniformLocation(program, 'uMaterial.specular'), material.specular); 196 | gl.uniform3fv(gl.getUniformLocation(program, 'uMaterial.emission'), material.emission); 197 | } 198 | } 199 | else 200 | { 201 | gl.activeTexture(gl.TEXTURE0); 202 | gl.bindTexture(gl.TEXTURE_2D, mesh.texture); 203 | 204 | gl.activeTexture(gl.TEXTURE1); 205 | if (mesh.normal) 206 | gl.bindTexture(gl.TEXTURE_2D, mesh.normal); 207 | else 208 | gl.bindTexture(gl.TEXTURE_2D, this.emptyTexture); 209 | 210 | if (mesh.material === null) 211 | { 212 | program = this.programs[Graphics3DRenderer.SHADER_UNLIT_TEXTURED]; 213 | gl.useProgram(program); 214 | 215 | // Vertex Layout 216 | gl.enableVertexAttribArray(0); 217 | gl.enableVertexAttribArray(1); 218 | gl.vertexAttribPointer(0, 3, gl.FLOAT, false, Graphics3DRenderer.VERTEX_SIZE, Graphics3DRenderer.VERTEX_POSITION); 219 | gl.vertexAttribPointer(1, 2, gl.FLOAT, false, Graphics3DRenderer.VERTEX_SIZE, Graphics3DRenderer.VERTEX_TEXCOORD); 220 | 221 | // Per mesh uniform data 222 | gl.uniform3fv(gl.getUniformLocation(program, 'uFlatColor'), mesh.flatColor); 223 | } 224 | else 225 | { 226 | var material = mesh.material; 227 | var invModel = mat4.invert(this.cachedModel[1], model); 228 | 229 | invModel = mat4.transpose(invModel, invModel); 230 | program = this.programs[Graphics3DRenderer.SHADER_LIT_TEXTURED]; 231 | 232 | gl.useProgram(program); 233 | 234 | // Vertex Layout 235 | gl.enableVertexAttribArray(0); 236 | gl.enableVertexAttribArray(1); 237 | gl.enableVertexAttribArray(2); 238 | gl.enableVertexAttribArray(3); 239 | gl.vertexAttribPointer(0, 3, gl.FLOAT, false, Graphics3DRenderer.VERTEX_SIZE, Graphics3DRenderer.VERTEX_POSITION); 240 | gl.vertexAttribPointer(1, 3, gl.FLOAT, false, Graphics3DRenderer.VERTEX_SIZE, Graphics3DRenderer.VERTEX_NORMALS); 241 | gl.vertexAttribPointer(2, 2, gl.FLOAT, false, Graphics3DRenderer.VERTEX_SIZE, Graphics3DRenderer.VERTEX_TEXCOORD); 242 | gl.vertexAttribPointer(3, 3, gl.FLOAT, false, Graphics3DRenderer.VERTEX_SIZE, Graphics3DRenderer.VERTEX_TANGENT); 243 | 244 | // Per mesh uniform data 245 | gl.uniformMatrix4fv(gl.getUniformLocation(program, 'uInvModelMatrix'), false, invModel); 246 | gl.uniform1f(gl.getUniformLocation(program, 'uMaterial.shininess'), material.shininess); 247 | gl.uniform3fv(gl.getUniformLocation(program, 'uMaterial.ambient'), material.ambient); 248 | gl.uniform3fv(gl.getUniformLocation(program, 'uMaterial.diffuse'), material.diffuse); 249 | gl.uniform3fv(gl.getUniformLocation(program, 'uMaterial.specular'), material.specular); 250 | gl.uniform3fv(gl.getUniformLocation(program, 'uMaterial.emission'), material.emission); 251 | 252 | } 253 | } 254 | 255 | gl.uniformMatrix4fv(gl.getUniformLocation(program, 'uModelMatrix'), false, model); 256 | gl.drawArrays(gl.TRIANGLES, 0, geometry.vertexCount); 257 | }; 258 | -------------------------------------------------------------------------------- /Material3D.js: -------------------------------------------------------------------------------- 1 | function Material3D() 2 | { 3 | this.ambient = vec3.fromValues(0.2, 0.2, 0.2); 4 | this.diffuse = vec3.fromValues(0.5, 0.5, 0.5); 5 | this.specular = vec3.fromValues(0.0, 0.0, 0.0); 6 | this.emission = vec3.fromValues(0.0, 0.0, 0.0); 7 | this.shininess = 0; 8 | } 9 | 10 | Material3D.prototype.setAmbient = function (r, g, b) 11 | { 12 | this.ambient[0] = r; 13 | this.ambient[1] = g; 14 | this.ambient[2] = b; 15 | 16 | return this; 17 | }; 18 | 19 | Material3D.prototype.setDiffuse = function (r, g, b) 20 | { 21 | this.diffuse[0] = r; 22 | this.diffuse[1] = g; 23 | this.diffuse[2] = b; 24 | 25 | return this; 26 | }; 27 | 28 | Material3D.prototype.setSpecular = function (r, g, b) 29 | { 30 | this.specular[0] = r; 31 | this.specular[1] = g; 32 | this.specular[2] = b; 33 | 34 | return this; 35 | }; 36 | 37 | Material3D.prototype.setEmission = function (r, g, b) 38 | { 39 | this.emission[0] = r; 40 | this.emission[1] = g; 41 | this.emission[2] = b; 42 | 43 | return this; 44 | }; 45 | 46 | Material3D.prototype.setShininess = function (shininess) 47 | { 48 | this.shininess = Math.max(shininess, 0.0); 49 | 50 | return this; 51 | }; -------------------------------------------------------------------------------- /PointLight3D.js: -------------------------------------------------------------------------------- 1 | function PointLight3D(x, y, z) 2 | { 3 | this.position = vec3.fromValues(x, y, z); 4 | this.color = vec3.fromValues(1.0, 1.0, 1.0); 5 | this.range = 5.0; 6 | this.intensity = 0.5; 7 | this.active = false; 8 | this.lastActiveState = false; 9 | } 10 | 11 | PointLight3D.prototype.setPosition = function (x, y, z) 12 | { 13 | this.position[0] = x; 14 | this.position[1] = y; 15 | this.position[2] = z; 16 | return this; 17 | }; 18 | 19 | PointLight3D.prototype.setColor = function (r, g, b) 20 | { 21 | this.color[0] = r; 22 | this.color[1] = g; 23 | this.color[2] = b; 24 | return this; 25 | }; 26 | 27 | PointLight3D.prototype.setIntensity = function (intensity) 28 | { 29 | this.intensity = intensity; 30 | return this; 31 | }; 32 | 33 | PointLight3D.prototype.setRange = function (range) 34 | { 35 | this.range = range; 36 | return this; 37 | }; 38 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # phaser-graphics3d 2 | Working concept of the new Graphics3D Object for Phaser 3 3 | -------------------------------------------------------------------------------- /StaticMesh3D.js: -------------------------------------------------------------------------------- 1 | function StaticMesh3D(x, y, z, geometry, texture, normal) 2 | { 3 | 4 | this.position = vec3.fromValues(x, y, z); 5 | this.scale = vec3.fromValues(1.0, 1.0, 1.0); 6 | this.quaternion = quat.create(); 7 | this.geometry = geometry ? geometry : new MeshData3D(); 8 | this.material = null; 9 | this.flatColor = vec3.fromValues(1.0, 1.0, 1.0); 10 | this.texture = texture ? texture : null; 11 | this.normal = normal ? normal : null; 12 | 13 | } 14 | 15 | StaticMesh3D.prototype.setFlatColor = function (r, g, b) 16 | { 17 | this.flatColor = vec3.fromValues(r, g, b); 18 | return this; 19 | }; 20 | 21 | StaticMesh3D.prototype.setPosition = function (x, y, z) 22 | { 23 | this.position[0] = x; 24 | this.position[1] = y; 25 | this.position[2] = z; 26 | return this; 27 | }; 28 | 29 | StaticMesh3D.prototype.setScale = function (x, y, z) 30 | { 31 | this.scale[0] = x; 32 | this.scale[1] = y; 33 | this.scale[2] = z; 34 | return this; 35 | }; 36 | 37 | StaticMesh3D.prototype.setEulerRotation = function (x, y, z) 38 | { 39 | quat.fromEuler(this.quaternion, x, y, z); 40 | return this; 41 | }; 42 | 43 | StaticMesh3D.prototype.rotateX = function (radian) 44 | { 45 | quat.rotateX(this.quaternion, this.quaternion, radian); 46 | return this; 47 | }; 48 | 49 | StaticMesh3D.prototype.rotateY = function (radian) 50 | { 51 | quat.rotateY(this.quaternion, this.quaternion, radian); 52 | return this; 53 | }; 54 | 55 | StaticMesh3D.prototype.rotateZ = function (radian) 56 | { 57 | quat.rotateZ(this.quaternion, this.quaternion, radian); 58 | return this; 59 | }; 60 | -------------------------------------------------------------------------------- /data/meshes/cube.obj: -------------------------------------------------------------------------------- 1 | # Blender v2.78 (sub 0) OBJ File: '' 2 | # www.blender.org 3 | o Cube 4 | v 1.000000 -1.000000 -1.000000 5 | v 1.000000 -1.000000 1.000000 6 | v -1.000000 -1.000000 1.000000 7 | v -1.000000 -1.000000 -1.000000 8 | v 1.000000 1.000000 -0.999999 9 | v 0.999999 1.000000 1.000001 10 | v -1.000000 1.000000 1.000000 11 | v -1.000000 1.000000 -1.000000 12 | vt 0.3331 0.9998 13 | vt 0.0002 0.6669 14 | vt 0.0002 0.9998 15 | vt 0.0002 0.0002 16 | vt 0.3331 0.3331 17 | vt 0.0002 0.3331 18 | vt 0.0002 0.3335 19 | vt 0.3331 0.6665 20 | vt 0.0002 0.6665 21 | vt 0.3335 0.3335 22 | vt 0.6665 0.6665 23 | vt 0.3335 0.6665 24 | vt 0.9998 0.0002 25 | vt 0.6669 0.3331 26 | vt 0.9998 0.3331 27 | vt 0.6665 0.3331 28 | vt 0.3335 0.0002 29 | vt 0.3335 0.3331 30 | vt 0.3331 0.6669 31 | vt 0.3331 0.0002 32 | vt 0.3331 0.3335 33 | vt 0.6665 0.3335 34 | vt 0.6669 0.0002 35 | vt 0.6665 0.0002 36 | vn 0.0000 -1.0000 0.0000 37 | vn 0.0000 1.0000 0.0000 38 | vn 1.0000 -0.0000 0.0000 39 | vn 0.0000 -0.0000 1.0000 40 | vn -1.0000 -0.0000 -0.0000 41 | vn 0.0000 0.0000 -1.0000 42 | s off 43 | f 2/1/1 4/2/1 1/3/1 44 | f 8/4/2 6/5/2 5/6/2 45 | f 5/7/3 2/8/3 1/9/3 46 | f 6/10/4 3/11/4 2/12/4 47 | f 3/13/5 8/14/5 4/15/5 48 | f 1/16/6 8/17/6 5/18/6 49 | f 2/1/1 3/19/1 4/2/1 50 | f 8/4/2 7/20/2 6/5/2 51 | f 5/7/3 6/21/3 2/8/3 52 | f 6/10/4 7/22/4 3/11/4 53 | f 3/13/5 7/23/5 8/14/5 54 | f 1/16/6 4/24/6 8/17/6 55 | -------------------------------------------------------------------------------- /data/meshes/sphere.obj: -------------------------------------------------------------------------------- 1 | # Blender v2.78 (sub 0) OBJ File: '' 2 | # www.blender.org 3 | o Sphere 4 | v 0.038060 0.980785 -0.191342 5 | v 0.074658 0.923880 -0.375330 6 | v 0.108386 0.831470 -0.544895 7 | v 0.137950 0.707107 -0.693520 8 | v 0.162212 0.555570 -0.815493 9 | v 0.180240 0.382683 -0.906127 10 | v 0.191342 0.195090 -0.961940 11 | v 0.195090 0.000000 -0.980785 12 | v 0.191342 -0.195090 -0.961940 13 | v 0.180240 -0.382683 -0.906127 14 | v 0.162212 -0.555570 -0.815493 15 | v 0.137950 -0.707107 -0.693520 16 | v 0.108386 -0.831470 -0.544895 17 | v 0.074658 -0.923880 -0.375330 18 | v 0.038060 -0.980785 -0.191341 19 | v 0.074658 0.980785 -0.180240 20 | v 0.146447 0.923880 -0.353553 21 | v 0.212608 0.831470 -0.513280 22 | v 0.270598 0.707107 -0.653281 23 | v 0.318190 0.555570 -0.768178 24 | v 0.353553 0.382683 -0.853553 25 | v 0.375330 0.195090 -0.906127 26 | v 0.382684 0.000000 -0.923879 27 | v 0.375330 -0.195090 -0.906127 28 | v 0.353554 -0.382683 -0.853553 29 | v 0.318190 -0.555570 -0.768178 30 | v 0.270598 -0.707107 -0.653281 31 | v 0.212608 -0.831470 -0.513280 32 | v 0.146447 -0.923880 -0.353553 33 | v 0.074658 -0.980785 -0.180240 34 | v 0.108387 0.980785 -0.162212 35 | v 0.212608 0.923880 -0.318190 36 | v 0.308658 0.831470 -0.461940 37 | v 0.392848 0.707107 -0.587938 38 | v 0.461940 0.555570 -0.691342 39 | v 0.513280 0.382683 -0.768178 40 | v 0.544895 0.195090 -0.815493 41 | v 0.555570 0.000000 -0.831469 42 | v 0.544895 -0.195090 -0.815493 43 | v 0.513280 -0.382683 -0.768178 44 | v 0.461940 -0.555570 -0.691342 45 | v 0.392848 -0.707107 -0.587938 46 | v 0.308658 -0.831470 -0.461940 47 | v 0.212608 -0.923880 -0.318189 48 | v 0.108386 -0.980785 -0.162211 49 | v 0.137950 0.980785 -0.137950 50 | v 0.270598 0.923880 -0.270598 51 | v 0.392848 0.831470 -0.392847 52 | v 0.500000 0.707107 -0.500000 53 | v 0.587938 0.555570 -0.587938 54 | v 0.653282 0.382683 -0.653281 55 | v 0.693520 0.195090 -0.693520 56 | v 0.707107 0.000000 -0.707107 57 | v 0.693520 -0.195090 -0.693520 58 | v 0.653282 -0.382683 -0.653281 59 | v 0.587938 -0.555570 -0.587938 60 | v 0.500000 -0.707107 -0.500000 61 | v 0.392848 -0.831470 -0.392847 62 | v 0.270598 -0.923880 -0.270598 63 | v 0.137950 -0.980785 -0.137949 64 | v 0.162212 0.980785 -0.108386 65 | v 0.318190 0.923880 -0.212607 66 | v 0.461940 0.831470 -0.308658 67 | v 0.587938 0.707107 -0.392847 68 | v 0.691342 0.555570 -0.461940 69 | v 0.768178 0.382683 -0.513280 70 | v 0.815493 0.195090 -0.544895 71 | v 0.831470 0.000000 -0.555570 72 | v 0.815493 -0.195090 -0.544895 73 | v 0.768178 -0.382683 -0.513280 74 | v 0.691342 -0.555570 -0.461940 75 | v 0.587938 -0.707107 -0.392847 76 | v 0.461940 -0.831470 -0.308658 77 | v 0.318190 -0.923880 -0.212607 78 | v 0.162212 -0.980785 -0.108386 79 | v 0.000000 -1.000000 0.000000 80 | v 0.180240 0.980785 -0.074658 81 | v 0.353554 0.923880 -0.146446 82 | v 0.513280 0.831470 -0.212607 83 | v 0.653282 0.707107 -0.270598 84 | v 0.768178 0.555570 -0.318189 85 | v 0.853554 0.382683 -0.353553 86 | v 0.906128 0.195090 -0.375330 87 | v 0.923880 0.000000 -0.382683 88 | v 0.906128 -0.195090 -0.375330 89 | v 0.853554 -0.382683 -0.353553 90 | v 0.768178 -0.555570 -0.318189 91 | v 0.653282 -0.707107 -0.270598 92 | v 0.513280 -0.831470 -0.212607 93 | v 0.353554 -0.923880 -0.146446 94 | v 0.180240 -0.980785 -0.074658 95 | v 0.191342 0.980785 -0.038060 96 | v 0.375331 0.923880 -0.074658 97 | v 0.544895 0.831470 -0.108386 98 | v 0.693520 0.707107 -0.137949 99 | v 0.815493 0.555570 -0.162211 100 | v 0.906128 0.382683 -0.180240 101 | v 0.961940 0.195090 -0.191341 102 | v 0.980785 0.000000 -0.195090 103 | v 0.961940 -0.195090 -0.191341 104 | v 0.906128 -0.382683 -0.180240 105 | v 0.815493 -0.555570 -0.162211 106 | v 0.693520 -0.707107 -0.137949 107 | v 0.544895 -0.831470 -0.108386 108 | v 0.375330 -0.923880 -0.074658 109 | v 0.191342 -0.980785 -0.038060 110 | v 0.195091 0.980785 0.000000 111 | v 0.382684 0.923880 0.000000 112 | v 0.555570 0.831470 0.000000 113 | v 0.707107 0.707107 0.000000 114 | v 0.831470 0.555570 0.000000 115 | v 0.923880 0.382683 0.000000 116 | v 0.980785 0.195090 0.000000 117 | v 1.000000 0.000000 0.000000 118 | v 0.980785 -0.195090 0.000000 119 | v 0.923880 -0.382683 0.000000 120 | v 0.831470 -0.555570 0.000000 121 | v 0.707107 -0.707107 0.000000 122 | v 0.555570 -0.831470 0.000000 123 | v 0.382684 -0.923880 0.000000 124 | v 0.195090 -0.980785 0.000000 125 | v 0.191342 0.980785 0.038061 126 | v 0.375331 0.923880 0.074658 127 | v 0.544895 0.831470 0.108387 128 | v 0.693520 0.707107 0.137950 129 | v 0.815493 0.555570 0.162212 130 | v 0.906128 0.382683 0.180240 131 | v 0.961940 0.195090 0.191342 132 | v 0.980785 0.000000 0.195091 133 | v 0.961940 -0.195090 0.191342 134 | v 0.906128 -0.382683 0.180240 135 | v 0.815493 -0.555570 0.162212 136 | v 0.693520 -0.707107 0.137950 137 | v 0.544895 -0.831470 0.108387 138 | v 0.375330 -0.923880 0.074658 139 | v 0.191342 -0.980785 0.038061 140 | v 0.180240 0.980785 0.074658 141 | v 0.353554 0.923880 0.146447 142 | v 0.513280 0.831470 0.212608 143 | v 0.653282 0.707107 0.270598 144 | v 0.768178 0.555570 0.318190 145 | v 0.853554 0.382683 0.353554 146 | v 0.906127 0.195090 0.375331 147 | v 0.923880 0.000000 0.382684 148 | v 0.906127 -0.195090 0.375331 149 | v 0.853554 -0.382683 0.353554 150 | v 0.768178 -0.555570 0.318190 151 | v 0.653282 -0.707107 0.270598 152 | v 0.513280 -0.831470 0.212608 153 | v 0.353553 -0.923880 0.146447 154 | v 0.180240 -0.980785 0.074658 155 | v 0.162212 0.980785 0.108387 156 | v 0.318190 0.923880 0.212608 157 | v 0.461940 0.831470 0.308659 158 | v 0.587938 0.707107 0.392848 159 | v 0.691342 0.555570 0.461940 160 | v 0.768178 0.382683 0.513280 161 | v 0.815493 0.195090 0.544895 162 | v 0.831470 0.000000 0.555571 163 | v 0.815493 -0.195090 0.544895 164 | v 0.768178 -0.382683 0.513280 165 | v 0.691342 -0.555570 0.461940 166 | v 0.587938 -0.707107 0.392848 167 | v 0.461940 -0.831470 0.308659 168 | v 0.318190 -0.923880 0.212608 169 | v 0.162212 -0.980785 0.108387 170 | v 0.137950 0.980785 0.137950 171 | v 0.270598 0.923880 0.270599 172 | v 0.392848 0.831470 0.392848 173 | v 0.500000 0.707107 0.500000 174 | v 0.587938 0.555570 0.587938 175 | v 0.653282 0.382683 0.653282 176 | v 0.693520 0.195090 0.693520 177 | v 0.707107 0.000000 0.707107 178 | v 0.693520 -0.195090 0.693520 179 | v 0.653282 -0.382683 0.653282 180 | v 0.587938 -0.555570 0.587938 181 | v 0.500000 -0.707107 0.500000 182 | v 0.392848 -0.831470 0.392848 183 | v 0.270598 -0.923880 0.270598 184 | v 0.137950 -0.980785 0.137950 185 | v 0.108386 0.980785 0.162212 186 | v 0.212608 0.923880 0.318190 187 | v 0.308658 0.831470 0.461940 188 | v 0.392848 0.707107 0.587938 189 | v 0.461940 0.555570 0.691342 190 | v 0.513280 0.382683 0.768178 191 | v 0.544895 0.195090 0.815493 192 | v 0.555570 0.000000 0.831470 193 | v 0.544895 -0.195090 0.815493 194 | v 0.513280 -0.382683 0.768178 195 | v 0.461940 -0.555570 0.691342 196 | v 0.392848 -0.707107 0.587938 197 | v 0.308658 -0.831470 0.461940 198 | v 0.212608 -0.923880 0.318190 199 | v 0.108386 -0.980785 0.162212 200 | v 0.074658 0.980785 0.180240 201 | v 0.146447 0.923880 0.353554 202 | v 0.212608 0.831470 0.513280 203 | v 0.270598 0.707107 0.653282 204 | v 0.318190 0.555570 0.768178 205 | v 0.353553 0.382683 0.853554 206 | v 0.375330 0.195090 0.906128 207 | v 0.382683 0.000000 0.923880 208 | v 0.375330 -0.195090 0.906128 209 | v 0.353553 -0.382683 0.853554 210 | v 0.318190 -0.555570 0.768178 211 | v 0.270598 -0.707107 0.653282 212 | v 0.212608 -0.831470 0.513280 213 | v 0.146447 -0.923880 0.353554 214 | v 0.074658 -0.980785 0.180240 215 | v 0.038060 0.980785 0.191342 216 | v 0.074658 0.923880 0.375331 217 | v 0.108386 0.831470 0.544896 218 | v 0.137950 0.707107 0.693520 219 | v 0.162212 0.555570 0.815493 220 | v 0.180240 0.382683 0.906128 221 | v 0.191342 0.195090 0.961940 222 | v 0.195090 0.000000 0.980786 223 | v 0.191342 -0.195090 0.961940 224 | v 0.180240 -0.382683 0.906128 225 | v 0.162212 -0.555570 0.815493 226 | v 0.137950 -0.707107 0.693520 227 | v 0.108386 -0.831470 0.544895 228 | v 0.074658 -0.923880 0.375331 229 | v 0.038060 -0.980785 0.191342 230 | v -0.000000 0.980785 0.195091 231 | v 0.000000 0.923880 0.382684 232 | v 0.000000 0.831470 0.555571 233 | v -0.000000 0.707107 0.707107 234 | v -0.000000 0.555570 0.831470 235 | v 0.000000 0.382683 0.923880 236 | v -0.000000 0.195090 0.980785 237 | v -0.000000 0.000000 1.000000 238 | v -0.000000 -0.195090 0.980785 239 | v 0.000000 -0.382683 0.923880 240 | v -0.000000 -0.555570 0.831470 241 | v -0.000000 -0.707107 0.707107 242 | v -0.000000 -0.831470 0.555570 243 | v 0.000000 -0.923880 0.382684 244 | v 0.000000 -0.980785 0.195091 245 | v -0.038060 0.980785 0.191342 246 | v -0.074658 0.923880 0.375331 247 | v -0.108386 0.831470 0.544896 248 | v -0.137950 0.707107 0.693520 249 | v -0.162212 0.555570 0.815493 250 | v -0.180240 0.382683 0.906128 251 | v -0.191342 0.195090 0.961940 252 | v -0.195090 0.000000 0.980786 253 | v -0.191342 -0.195090 0.961940 254 | v -0.180240 -0.382683 0.906128 255 | v -0.162212 -0.555570 0.815493 256 | v -0.137950 -0.707107 0.693520 257 | v -0.108386 -0.831470 0.544895 258 | v -0.074658 -0.923880 0.375331 259 | v -0.038060 -0.980785 0.191342 260 | v -0.074658 0.980785 0.180240 261 | v -0.146447 0.923880 0.353554 262 | v -0.212608 0.831470 0.513280 263 | v -0.270598 0.707107 0.653282 264 | v -0.318190 0.555570 0.768178 265 | v -0.353553 0.382683 0.853554 266 | v -0.375330 0.195090 0.906127 267 | v -0.382684 0.000000 0.923880 268 | v -0.375330 -0.195090 0.906127 269 | v -0.353553 -0.382683 0.853554 270 | v -0.318190 -0.555570 0.768178 271 | v -0.270598 -0.707107 0.653282 272 | v -0.212608 -0.831470 0.513280 273 | v -0.146447 -0.923880 0.353554 274 | v -0.074658 -0.980785 0.180240 275 | v -0.000000 1.000000 0.000001 276 | v -0.108386 0.980785 0.162212 277 | v -0.212608 0.923880 0.318190 278 | v -0.308658 0.831470 0.461940 279 | v -0.392847 0.707107 0.587938 280 | v -0.461940 0.555570 0.691342 281 | v -0.513280 0.382683 0.768178 282 | v -0.544895 0.195090 0.815493 283 | v -0.555570 0.000000 0.831470 284 | v -0.544895 -0.195090 0.815493 285 | v -0.513280 -0.382683 0.768178 286 | v -0.461940 -0.555570 0.691342 287 | v -0.392847 -0.707107 0.587938 288 | v -0.308658 -0.831470 0.461940 289 | v -0.212607 -0.923880 0.318190 290 | v -0.108386 -0.980785 0.162212 291 | v -0.137950 0.980785 0.137950 292 | v -0.270598 0.923880 0.270598 293 | v -0.392848 0.831470 0.392848 294 | v -0.500000 0.707107 0.500000 295 | v -0.587938 0.555570 0.587938 296 | v -0.653281 0.382683 0.653282 297 | v -0.693520 0.195090 0.693520 298 | v -0.707107 0.000000 0.707107 299 | v -0.693520 -0.195090 0.693520 300 | v -0.653281 -0.382683 0.653282 301 | v -0.587938 -0.555570 0.587938 302 | v -0.500000 -0.707107 0.500000 303 | v -0.392847 -0.831470 0.392848 304 | v -0.270598 -0.923880 0.270598 305 | v -0.137950 -0.980785 0.137950 306 | v -0.162212 0.980785 0.108387 307 | v -0.318190 0.923880 0.212608 308 | v -0.461940 0.831470 0.308659 309 | v -0.587938 0.707107 0.392848 310 | v -0.691342 0.555570 0.461940 311 | v -0.768178 0.382683 0.513280 312 | v -0.815493 0.195090 0.544895 313 | v -0.831470 0.000000 0.555570 314 | v -0.815493 -0.195090 0.544895 315 | v -0.768178 -0.382683 0.513280 316 | v -0.691342 -0.555570 0.461940 317 | v -0.587938 -0.707107 0.392848 318 | v -0.461940 -0.831470 0.308658 319 | v -0.318190 -0.923880 0.212608 320 | v -0.162212 -0.980785 0.108387 321 | v -0.180240 0.980785 0.074658 322 | v -0.353553 0.923880 0.146447 323 | v -0.513280 0.831470 0.212608 324 | v -0.653281 0.707107 0.270598 325 | v -0.768177 0.555570 0.318190 326 | v -0.853553 0.382683 0.353554 327 | v -0.906127 0.195090 0.375330 328 | v -0.923880 0.000000 0.382684 329 | v -0.906127 -0.195090 0.375330 330 | v -0.853553 -0.382683 0.353554 331 | v -0.768177 -0.555570 0.318190 332 | v -0.653281 -0.707107 0.270598 333 | v -0.513280 -0.831470 0.212608 334 | v -0.353553 -0.923880 0.146447 335 | v -0.180240 -0.980785 0.074658 336 | v -0.191342 0.980785 0.038061 337 | v -0.375330 0.923880 0.074658 338 | v -0.544895 0.831470 0.108387 339 | v -0.693520 0.707107 0.137950 340 | v -0.815493 0.555570 0.162212 341 | v -0.906127 0.382683 0.180240 342 | v -0.961939 0.195090 0.191342 343 | v -0.980785 0.000000 0.195090 344 | v -0.961939 -0.195090 0.191342 345 | v -0.906127 -0.382683 0.180240 346 | v -0.815493 -0.555570 0.162212 347 | v -0.693520 -0.707107 0.137950 348 | v -0.544895 -0.831470 0.108387 349 | v -0.375330 -0.923880 0.074658 350 | v -0.191342 -0.980785 0.038061 351 | v -0.195090 0.980785 0.000000 352 | v -0.382683 0.923880 0.000000 353 | v -0.555570 0.831470 0.000000 354 | v -0.707107 0.707107 0.000000 355 | v -0.831469 0.555570 0.000000 356 | v -0.923879 0.382683 0.000000 357 | v -0.980785 0.195090 0.000000 358 | v -1.000000 0.000000 0.000000 359 | v -0.980785 -0.195090 0.000000 360 | v -0.923879 -0.382683 0.000000 361 | v -0.831469 -0.555570 0.000000 362 | v -0.707107 -0.707107 0.000000 363 | v -0.555570 -0.831470 0.000000 364 | v -0.382683 -0.923880 0.000000 365 | v -0.195090 -0.980785 0.000000 366 | v -0.191342 0.980785 -0.038060 367 | v -0.375330 0.923880 -0.074658 368 | v -0.544895 0.831470 -0.108386 369 | v -0.693520 0.707107 -0.137949 370 | v -0.815493 0.555570 -0.162211 371 | v -0.906127 0.382683 -0.180240 372 | v -0.961939 0.195090 -0.191342 373 | v -0.980785 0.000000 -0.195090 374 | v -0.961939 -0.195090 -0.191342 375 | v -0.906127 -0.382683 -0.180240 376 | v -0.815493 -0.555570 -0.162211 377 | v -0.693520 -0.707107 -0.137949 378 | v -0.544895 -0.831470 -0.108386 379 | v -0.375330 -0.923880 -0.074658 380 | v -0.191342 -0.980785 -0.038060 381 | v -0.180240 0.980785 -0.074658 382 | v -0.353553 0.923880 -0.146446 383 | v -0.513280 0.831470 -0.212607 384 | v -0.653281 0.707107 -0.270598 385 | v -0.768177 0.555570 -0.318189 386 | v -0.853553 0.382683 -0.353553 387 | v -0.906127 0.195090 -0.375330 388 | v -0.923879 0.000000 -0.382683 389 | v -0.906127 -0.195090 -0.375330 390 | v -0.853553 -0.382683 -0.353553 391 | v -0.768177 -0.555570 -0.318189 392 | v -0.653281 -0.707107 -0.270598 393 | v -0.513280 -0.831470 -0.212607 394 | v -0.353553 -0.923880 -0.146446 395 | v -0.180240 -0.980785 -0.074657 396 | v -0.162212 0.980785 -0.108386 397 | v -0.318190 0.923880 -0.212607 398 | v -0.461940 0.831470 -0.308658 399 | v -0.587938 0.707107 -0.392847 400 | v -0.691341 0.555570 -0.461939 401 | v -0.768178 0.382683 -0.513280 402 | v -0.815493 0.195090 -0.544895 403 | v -0.831469 0.000000 -0.555570 404 | v -0.815493 -0.195090 -0.544895 405 | v -0.768178 -0.382683 -0.513280 406 | v -0.691341 -0.555570 -0.461939 407 | v -0.587938 -0.707107 -0.392847 408 | v -0.461940 -0.831470 -0.308658 409 | v -0.318189 -0.923880 -0.212607 410 | v -0.162212 -0.980785 -0.108386 411 | v -0.137950 0.980785 -0.137949 412 | v -0.270598 0.923880 -0.270598 413 | v -0.392847 0.831470 -0.392847 414 | v -0.500000 0.707107 -0.500000 415 | v -0.587937 0.555570 -0.587937 416 | v -0.653281 0.382683 -0.653281 417 | v -0.693519 0.195090 -0.693519 418 | v -0.707106 0.000000 -0.707106 419 | v -0.693519 -0.195090 -0.693519 420 | v -0.653281 -0.382683 -0.653281 421 | v -0.587937 -0.555570 -0.587937 422 | v -0.500000 -0.707107 -0.500000 423 | v -0.392847 -0.831470 -0.392847 424 | v -0.270598 -0.923880 -0.270598 425 | v -0.137950 -0.980785 -0.137949 426 | v -0.108386 0.980785 -0.162211 427 | v -0.212607 0.923880 -0.318189 428 | v -0.308658 0.831470 -0.461939 429 | v -0.392847 0.707107 -0.587937 430 | v -0.461939 0.555570 -0.691341 431 | v -0.513280 0.382683 -0.768177 432 | v -0.544895 0.195090 -0.815492 433 | v -0.555570 0.000000 -0.831469 434 | v -0.544895 -0.195090 -0.815492 435 | v -0.513280 -0.382683 -0.768177 436 | v -0.461939 -0.555570 -0.691341 437 | v -0.392847 -0.707107 -0.587937 438 | v -0.308658 -0.831470 -0.461939 439 | v -0.212607 -0.923880 -0.318189 440 | v -0.108386 -0.980785 -0.162211 441 | v -0.074658 0.980785 -0.180240 442 | v -0.146447 0.923880 -0.353553 443 | v -0.212607 0.831470 -0.513280 444 | v -0.270598 0.707107 -0.653281 445 | v -0.318189 0.555570 -0.768177 446 | v -0.353553 0.382683 -0.853553 447 | v -0.375330 0.195090 -0.906127 448 | v -0.382683 0.000000 -0.923879 449 | v -0.375330 -0.195090 -0.906127 450 | v -0.353553 -0.382683 -0.853553 451 | v -0.318189 -0.555570 -0.768177 452 | v -0.270598 -0.707107 -0.653281 453 | v -0.212607 -0.831470 -0.513279 454 | v -0.146446 -0.923880 -0.353553 455 | v -0.074658 -0.980785 -0.180240 456 | v -0.038060 0.980785 -0.191342 457 | v -0.074658 0.923880 -0.375330 458 | v -0.108386 0.831470 -0.544895 459 | v -0.137950 0.707107 -0.693520 460 | v -0.162211 0.555570 -0.815492 461 | v -0.180240 0.382683 -0.906127 462 | v -0.191341 0.195090 -0.961939 463 | v -0.195090 0.000000 -0.980785 464 | v -0.191341 -0.195090 -0.961939 465 | v -0.180240 -0.382683 -0.906127 466 | v -0.162211 -0.555570 -0.815492 467 | v -0.137950 -0.707107 -0.693520 468 | v -0.108386 -0.831470 -0.544895 469 | v -0.074658 -0.923880 -0.375330 470 | v -0.038060 -0.980785 -0.191341 471 | v 0.000000 0.980785 -0.195090 472 | v 0.000000 0.923880 -0.382683 473 | v 0.000000 0.831470 -0.555570 474 | v 0.000000 0.707107 -0.707106 475 | v 0.000000 0.555570 -0.831469 476 | v 0.000000 0.382683 -0.923879 477 | v 0.000000 0.195090 -0.980784 478 | v 0.000000 0.000000 -0.999999 479 | v 0.000000 -0.195090 -0.980784 480 | v 0.000000 -0.382683 -0.923879 481 | v 0.000000 -0.555570 -0.831469 482 | v 0.000000 -0.707107 -0.707106 483 | v 0.000000 -0.831470 -0.555570 484 | v 0.000000 -0.923880 -0.382683 485 | v 0.000000 -0.980785 -0.195090 486 | vt 0.5537 0.7565 487 | vt 0.6182 0.7807 488 | vt 0.6147 0.7545 489 | vt 0.1811 0.2500 490 | vt 0.1148 0.3137 491 | vt 0.1811 0.3176 492 | vt 0.6828 0.7656 493 | vt 0.6810 0.7522 494 | vt 0.2500 0.2500 495 | vt 0.2500 0.3189 496 | vt 0.1810 0.7522 497 | vt 0.2499 0.7499 498 | vt 0.1828 0.7656 499 | vt 0.7499 0.7499 500 | vt 0.3189 0.3176 501 | vt 0.3189 0.2500 502 | vt 0.1147 0.7545 503 | vt 0.1182 0.7807 504 | vt 0.3852 0.3137 505 | vt 0.3852 0.2500 506 | vt 0.0537 0.7565 507 | vt 0.0588 0.7947 508 | vt 0.4463 0.3073 509 | vt 0.4463 0.2500 510 | vt 0.0002 0.7584 511 | vt 0.0067 0.8069 512 | vt 0.4998 0.2987 513 | vt 0.4998 0.2500 514 | vt 0.0537 0.2500 515 | vt 0.0002 0.2987 516 | vt 0.0537 0.3073 517 | vt 0.5002 0.7584 518 | vt 0.5588 0.7947 519 | vt 0.1148 0.2500 520 | vt 0.5225 0.8533 521 | vt 0.5712 0.8311 522 | vt 0.1148 0.3749 523 | vt 0.6268 0.8058 524 | vt 0.1811 0.3826 525 | vt 0.6871 0.7784 526 | vt 0.2500 0.3852 527 | vt 0.1871 0.7784 528 | vt 0.3189 0.3826 529 | vt 0.1268 0.8058 530 | vt 0.3852 0.3749 531 | vt 0.0712 0.8311 532 | vt 0.4463 0.3624 533 | vt 0.0225 0.8533 534 | vt 0.4998 0.3456 535 | vt 0.0537 0.3624 536 | vt 0.1401 0.8288 537 | vt 0.3852 0.4313 538 | vt 0.0905 0.8644 539 | vt 0.4463 0.4132 540 | vt 0.0470 0.8956 541 | vt 0.4998 0.3888 542 | vt 0.0002 0.3456 543 | vt 0.0537 0.4132 544 | vt 0.5470 0.8956 545 | vt 0.5905 0.8644 546 | vt 0.1148 0.4313 547 | vt 0.6401 0.8288 548 | vt 0.1811 0.4425 549 | vt 0.6939 0.7901 550 | vt 0.2500 0.4463 551 | vt 0.1939 0.7901 552 | vt 0.3189 0.4425 553 | vt 0.1148 0.4808 554 | vt 0.6576 0.8487 555 | vt 0.1811 0.4950 556 | vt 0.7028 0.8002 557 | vt 0.2500 0.4998 558 | vt 0.2028 0.8002 559 | vt 0.3189 0.4950 560 | vt 0.1576 0.8487 561 | vt 0.3852 0.4808 562 | vt 0.1159 0.8933 563 | vt 0.4463 0.4577 564 | vt 0.0793 0.9324 565 | vt 0.5113 0.9213 566 | vt 0.5793 0.9324 567 | vt 0.0113 0.9213 568 | vt 0.0494 0.9645 569 | vt 0.6159 0.8933 570 | vt 0.3852 0.4313 571 | vt 0.1464 0.9167 572 | vt 0.4463 0.4132 573 | vt 0.1182 0.9622 574 | vt 0.5494 0.9645 575 | vt 0.6182 0.9622 576 | vt 0.0951 0.9995 577 | vt 0.6464 0.9167 578 | vt 0.0537 0.4577 579 | vt 0.1148 0.4313 580 | vt 0.6786 0.8648 581 | vt 0.1811 0.4425 582 | vt 0.7135 0.8084 583 | vt 0.2500 0.4463 584 | vt 0.2135 0.8084 585 | vt 0.3189 0.4425 586 | vt 0.1786 0.8648 587 | vt 0.7024 0.8764 588 | vt 0.1148 0.3749 589 | vt 0.1811 0.3826 590 | vt 0.7257 0.8144 591 | vt 0.2500 0.3852 592 | vt 0.2257 0.8144 593 | vt 0.3189 0.3826 594 | vt 0.2024 0.8764 595 | vt 0.3852 0.3749 596 | vt 0.1810 0.9336 597 | vt 0.4463 0.3624 598 | vt 0.1622 0.9838 599 | vt 0.4998 0.3456 600 | vt 0.4998 0.3888 601 | vt 0.0002 0.3888 602 | vt 0.0537 0.3624 603 | vt 0.0537 0.4132 604 | vt 0.6622 0.9838 605 | vt 0.6810 0.9336 606 | vt 0.3852 0.3137 607 | vt 0.4463 0.3073 608 | vt 0.2095 0.9964 609 | vt 0.4998 0.2987 610 | vt 0.0002 0.3456 611 | vt 0.0537 0.3073 612 | vt 0.7095 0.9964 613 | vt 0.7182 0.9435 614 | vt 0.1148 0.3137 615 | vt 0.7280 0.8833 616 | vt 0.1811 0.3176 617 | vt 0.7387 0.8179 618 | vt 0.2500 0.3189 619 | vt 0.2387 0.8179 620 | vt 0.3189 0.3176 621 | vt 0.2280 0.8833 622 | vt 0.2182 0.9435 623 | vt 0.7545 0.8850 624 | vt 0.7522 0.8187 625 | vt 0.2500 0.2500 626 | vt 0.2522 0.8187 627 | vt 0.3189 0.2500 628 | vt 0.2545 0.8850 629 | vt 0.3852 0.2500 630 | vt 0.2565 0.9460 631 | vt 0.4463 0.2500 632 | vt 0.2584 0.9995 633 | vt 0.4998 0.2500 634 | vt 0.0002 0.2987 635 | vt 0.0537 0.2500 636 | vt 0.7584 0.9995 637 | vt 0.7565 0.9460 638 | vt 0.1148 0.2500 639 | vt 0.1811 0.2500 640 | vt 0.3069 0.9931 641 | vt 0.4998 0.2013 642 | vt 0.0002 0.2500 643 | vt 0.0537 0.1927 644 | vt 0.8069 0.9931 645 | vt 0.7947 0.9409 646 | vt 0.1148 0.1863 647 | vt 0.7807 0.8815 648 | vt 0.1811 0.1824 649 | vt 0.7656 0.8170 650 | vt 0.2500 0.1811 651 | vt 0.2656 0.8170 652 | vt 0.3189 0.1824 653 | vt 0.2807 0.8815 654 | vt 0.3852 0.1863 655 | vt 0.2947 0.9409 656 | vt 0.4463 0.1927 657 | vt 0.2500 0.1148 658 | vt 0.2784 0.8126 659 | vt 0.7784 0.8126 660 | vt 0.3189 0.1174 661 | vt 0.3058 0.8729 662 | vt 0.3852 0.1251 663 | vt 0.3311 0.9285 664 | vt 0.4463 0.1376 665 | vt 0.3533 0.9772 666 | vt 0.4998 0.1544 667 | vt 0.0002 0.2013 668 | vt 0.0537 0.1376 669 | vt 0.8311 0.9285 670 | vt 0.1148 0.1251 671 | vt 0.8058 0.8729 672 | vt 0.1811 0.1174 673 | vt 0.4998 0.1112 674 | vt 0.0002 0.1112 675 | vt 0.0537 0.0868 676 | vt 0.8956 0.9527 677 | vt 0.8644 0.9092 678 | vt 0.1148 0.0687 679 | vt 0.8288 0.8596 680 | vt 0.1811 0.0575 681 | vt 0.7901 0.8058 682 | vt 0.2500 0.0537 683 | vt 0.2901 0.8058 684 | vt 0.3189 0.0575 685 | vt 0.3288 0.8596 686 | vt 0.3852 0.0687 687 | vt 0.3644 0.9092 688 | vt 0.4463 0.0868 689 | vt 0.3956 0.9527 690 | vt 0.3002 0.7969 691 | vt 0.8002 0.7969 692 | vt 0.3189 0.0050 693 | vt 0.3487 0.8421 694 | vt 0.3852 0.0192 695 | vt 0.3933 0.8838 696 | vt 0.4463 0.0423 697 | vt 0.4324 0.9204 698 | vt 0.9213 0.9884 699 | vt 0.9324 0.9204 700 | vt 0.4645 0.9504 701 | vt 0.4213 0.9884 702 | vt 0.8933 0.8838 703 | vt 0.1148 0.0192 704 | vt 0.8487 0.8421 705 | vt 0.1811 0.0050 706 | vt 0.2500 0.0002 707 | vt 0.4622 0.8815 708 | vt 0.4995 0.9046 709 | vt 0.9167 0.8533 710 | vt 0.5537 0.4577 711 | vt 0.6148 0.4313 712 | vt 0.6148 0.4808 713 | vt 0.8648 0.8211 714 | vt 0.6811 0.4950 715 | vt 0.6811 0.4425 716 | vt 0.8084 0.7862 717 | vt 0.7500 0.4463 718 | vt 0.7500 0.4998 719 | vt 0.3084 0.7862 720 | vt 0.8189 0.4425 721 | vt 0.8189 0.4950 722 | vt 0.3648 0.8211 723 | vt 0.8852 0.4313 724 | vt 0.8852 0.4808 725 | vt 0.4167 0.8533 726 | vt 0.9463 0.4577 727 | vt 0.9463 0.4132 728 | vt 0.9645 0.9504 729 | vt 0.9622 0.8815 730 | vt 0.7500 0.3852 731 | vt 0.8189 0.3826 732 | vt 0.3764 0.7973 733 | vt 0.8852 0.3749 734 | vt 0.4336 0.8187 735 | vt 0.9463 0.3624 736 | vt 0.4838 0.8375 737 | vt 0.9998 0.3888 738 | vt 0.9998 0.3456 739 | vt 0.5002 0.3888 740 | vt 0.5537 0.3624 741 | vt 0.5537 0.4132 742 | vt 0.9838 0.8375 743 | vt 0.9336 0.8187 744 | vt 0.6148 0.3749 745 | vt 0.8764 0.7973 746 | vt 0.6811 0.3826 747 | vt 0.8144 0.7740 748 | vt 0.3144 0.7740 749 | vt 0.9435 0.7816 750 | vt 0.6148 0.3137 751 | vt 0.8833 0.7717 752 | vt 0.6811 0.3176 753 | vt 0.8179 0.7610 754 | vt 0.7500 0.3189 755 | vt 0.3179 0.7610 756 | vt 0.8189 0.3176 757 | vt 0.3833 0.7717 758 | vt 0.8852 0.3137 759 | vt 0.4435 0.7816 760 | vt 0.9463 0.3073 761 | vt 0.4964 0.7902 762 | vt 0.9998 0.2987 763 | vt 0.5002 0.2987 764 | vt 0.5537 0.3073 765 | vt 0.8852 0.2500 766 | vt 0.3850 0.7452 767 | vt 0.4460 0.7432 768 | vt 0.9463 0.2500 769 | vt 0.4995 0.7413 770 | vt 0.9998 0.2500 771 | vt 0.5002 0.2500 772 | vt 0.5537 0.2500 773 | vt 0.9995 0.7413 774 | vt 0.9460 0.7432 775 | vt 0.6148 0.2500 776 | vt 0.8850 0.7452 777 | vt 0.6811 0.2500 778 | vt 0.8187 0.7475 779 | vt 0.7500 0.2500 780 | vt 0.3187 0.7475 781 | vt 0.8189 0.2500 782 | vt 0.8815 0.7190 783 | vt 0.6148 0.1863 784 | vt 0.6811 0.1824 785 | vt 0.8170 0.7341 786 | vt 0.7500 0.1811 787 | vt 0.3170 0.7341 788 | vt 0.8189 0.1824 789 | vt 0.3815 0.7190 790 | vt 0.8852 0.1863 791 | vt 0.4409 0.7050 792 | vt 0.9463 0.1927 793 | vt 0.4931 0.6928 794 | vt 0.9998 0.2013 795 | vt 0.5002 0.2013 796 | vt 0.5537 0.1927 797 | vt 0.9409 0.7050 798 | vt 0.4285 0.6686 799 | vt 0.8852 0.1251 800 | vt 0.9463 0.1376 801 | vt 0.4772 0.6464 802 | vt 0.9998 0.1544 803 | vt 0.5002 0.1544 804 | vt 0.5537 0.1376 805 | vt 0.9931 0.6928 806 | vt 0.9285 0.6686 807 | vt 0.6148 0.1251 808 | vt 0.8729 0.6939 809 | vt 0.6811 0.1174 810 | vt 0.8126 0.7213 811 | vt 0.7500 0.1148 812 | vt 0.3126 0.7213 813 | vt 0.8189 0.1174 814 | vt 0.3729 0.6939 815 | vt 0.6148 0.0687 816 | vt 0.6811 0.0575 817 | vt 0.8596 0.6710 818 | vt 0.8058 0.7096 819 | vt 0.7500 0.0537 820 | vt 0.3058 0.7096 821 | vt 0.8189 0.0575 822 | vt 0.3596 0.6710 823 | vt 0.8852 0.0687 824 | vt 0.4092 0.6353 825 | vt 0.9463 0.0868 826 | vt 0.4527 0.6041 827 | vt 0.9998 0.1112 828 | vt 0.5002 0.1112 829 | vt 0.5537 0.0868 830 | vt 0.9772 0.6464 831 | vt 0.9092 0.6353 832 | vt 0.8852 0.0192 833 | vt 0.9463 0.0423 834 | vt 0.3838 0.6064 835 | vt 0.4204 0.5673 836 | vt 0.9884 0.5784 837 | vt 0.9204 0.5673 838 | vt 0.9527 0.6041 839 | vt 0.4884 0.5784 840 | vt 0.4504 0.5352 841 | vt 0.8838 0.6064 842 | vt 0.6148 0.0192 843 | vt 0.8421 0.6511 844 | vt 0.6811 0.0050 845 | vt 0.7969 0.6995 846 | vt 0.7500 0.0002 847 | vt 0.2969 0.6995 848 | vt 0.8189 0.0050 849 | vt 0.3421 0.6511 850 | vt 0.7862 0.6913 851 | vt 0.6811 0.0575 852 | vt 0.7500 0.0537 853 | vt 0.2862 0.6913 854 | vt 0.8189 0.0575 855 | vt 0.3211 0.6350 856 | vt 0.8852 0.0687 857 | vt 0.3533 0.5830 858 | vt 0.9463 0.0868 859 | vt 0.3815 0.5375 860 | vt 0.9504 0.5352 861 | vt 0.8815 0.5375 862 | vt 0.4046 0.5002 863 | vt 0.8533 0.5830 864 | vt 0.5537 0.0423 865 | vt 0.6148 0.0687 866 | vt 0.8211 0.6350 867 | vt 0.3187 0.5661 868 | vt 0.3375 0.5159 869 | vt 0.9998 0.1544 870 | vt 0.9998 0.1112 871 | vt 0.5537 0.0868 872 | vt 0.5002 0.1544 873 | vt 0.5537 0.1376 874 | vt 0.8187 0.5661 875 | vt 0.6148 0.1251 876 | vt 0.7973 0.6233 877 | vt 0.6811 0.1174 878 | vt 0.7740 0.6853 879 | vt 0.7500 0.1148 880 | vt 0.2740 0.6853 881 | vt 0.8189 0.1174 882 | vt 0.2973 0.6233 883 | vt 0.8852 0.1251 884 | vt 0.9463 0.1376 885 | vt 0.7500 0.1811 886 | vt 0.2610 0.6818 887 | vt 0.7610 0.6818 888 | vt 0.8189 0.1824 889 | vt 0.2717 0.6164 890 | vt 0.8852 0.1863 891 | vt 0.2816 0.5562 892 | vt 0.9463 0.1927 893 | vt 0.2902 0.5033 894 | vt 0.9998 0.2013 895 | vt 0.5002 0.2013 896 | vt 0.5537 0.1927 897 | vt 0.8375 0.5159 898 | vt 0.7816 0.5562 899 | vt 0.6148 0.1863 900 | vt 0.7717 0.6164 901 | vt 0.6811 0.1824 902 | vt 0.9998 0.2500 903 | vt 0.5002 0.2500 904 | vt 0.5537 0.2500 905 | vt 0.7902 0.5033 906 | vt 0.7432 0.5537 907 | vt 0.6148 0.2500 908 | vt 0.7452 0.6147 909 | vt 0.6811 0.2500 910 | vt 0.7475 0.6810 911 | vt 0.7500 0.2500 912 | vt 0.2475 0.6810 913 | vt 0.8189 0.2500 914 | vt 0.2452 0.6147 915 | vt 0.8852 0.2500 916 | vt 0.2432 0.5537 917 | vt 0.9463 0.2500 918 | vt 0.2413 0.5002 919 | vt 0.7341 0.6828 920 | vt 0.7500 0.3189 921 | vt 0.8189 0.3176 922 | vt 0.2190 0.6182 923 | vt 0.8852 0.3137 924 | vt 0.2050 0.5588 925 | vt 0.9463 0.3073 926 | vt 0.1928 0.5067 927 | vt 0.9998 0.2987 928 | vt 0.5537 0.3073 929 | vt 0.7413 0.5002 930 | vt 0.7050 0.5588 931 | vt 0.6148 0.3137 932 | vt 0.7190 0.6182 933 | vt 0.6811 0.3176 934 | vt 0.2341 0.6828 935 | vt 0.6928 0.5067 936 | vt 0.6686 0.5712 937 | vt 0.6148 0.3749 938 | vt 0.6939 0.6268 939 | vt 0.6811 0.3826 940 | vt 0.7213 0.6871 941 | vt 0.7500 0.3852 942 | vt 0.2213 0.6871 943 | vt 0.8189 0.3826 944 | vt 0.1939 0.6268 945 | vt 0.8852 0.3749 946 | vt 0.1686 0.5712 947 | vt 0.9463 0.3624 948 | vt 0.1464 0.5225 949 | vt 0.9998 0.3456 950 | vt 0.5002 0.2987 951 | vt 0.5537 0.3624 952 | vt 0.2096 0.6939 953 | vt 0.1710 0.6401 954 | vt 0.8852 0.4313 955 | vt 0.1353 0.5905 956 | vt 0.9463 0.4132 957 | vt 0.1041 0.5470 958 | vt 0.9998 0.3888 959 | vt 0.5002 0.3888 960 | vt 0.5537 0.4132 961 | vt 0.6464 0.5225 962 | vt 0.6353 0.5905 963 | vt 0.6148 0.4313 964 | vt 0.6710 0.6401 965 | vt 0.6811 0.4425 966 | vt 0.7096 0.6939 967 | vt 0.7500 0.4463 968 | vt 0.8189 0.4425 969 | vt 0.6148 0.4808 970 | vt 0.6511 0.6576 971 | vt 0.6811 0.4950 972 | vt 0.6995 0.7028 973 | vt 0.7500 0.4998 974 | vt 0.1995 0.7028 975 | vt 0.8189 0.4950 976 | vt 0.1511 0.6576 977 | vt 0.8852 0.4808 978 | vt 0.1064 0.6159 979 | vt 0.9463 0.4577 980 | vt 0.0673 0.5793 981 | vt 0.5784 0.5113 982 | vt 0.5673 0.5793 983 | vt 0.6041 0.5470 984 | vt 0.0784 0.5113 985 | vt 0.0352 0.5494 986 | vt 0.6064 0.6159 987 | vt 0.3189 0.0050 988 | vt 0.3852 0.0687 989 | vt 0.3852 0.0192 990 | vt 0.0830 0.6464 991 | vt 0.4463 0.0423 992 | vt 0.4463 0.0868 993 | vt 0.0375 0.6182 994 | vt 0.5352 0.5494 995 | vt 0.5375 0.6182 996 | vt 0.0002 0.5951 997 | vt 0.5830 0.6464 998 | vt 0.0537 0.0423 999 | vt 0.1148 0.0687 1000 | vt 0.1148 0.0192 1001 | vt 0.6350 0.6786 1002 | vt 0.1811 0.0050 1003 | vt 0.1811 0.0575 1004 | vt 0.6913 0.7135 1005 | vt 0.2500 0.0002 1006 | vt 0.2500 0.0537 1007 | vt 0.1913 0.7135 1008 | vt 0.3189 0.0575 1009 | vt 0.1350 0.6786 1010 | vt 0.5661 0.6810 1011 | vt 0.6233 0.7024 1012 | vt 0.1148 0.1251 1013 | vt 0.1811 0.1174 1014 | vt 0.6853 0.7257 1015 | vt 0.2500 0.1148 1016 | vt 0.1853 0.7257 1017 | vt 0.3189 0.1174 1018 | vt 0.1233 0.7024 1019 | vt 0.3852 0.1251 1020 | vt 0.0661 0.6810 1021 | vt 0.4463 0.1376 1022 | vt 0.0159 0.6622 1023 | vt 0.4998 0.1544 1024 | vt 0.4998 0.1112 1025 | vt 0.0537 0.0868 1026 | vt 0.0002 0.1544 1027 | vt 0.0537 0.1376 1028 | vt 0.5159 0.6622 1029 | vt 0.0562 0.7182 1030 | vt 0.3852 0.1863 1031 | vt 0.4463 0.1927 1032 | vt 0.0033 0.7095 1033 | vt 0.4998 0.2013 1034 | vt 0.0002 0.2013 1035 | vt 0.0537 0.1927 1036 | vt 0.5033 0.7095 1037 | vt 0.5562 0.7182 1038 | vt 0.1148 0.1863 1039 | vt 0.6164 0.7280 1040 | vt 0.1811 0.1824 1041 | vt 0.6818 0.7387 1042 | vt 0.2500 0.1811 1043 | vt 0.1818 0.7387 1044 | vt 0.3189 0.1824 1045 | vt 0.1164 0.7280 1046 | vt 0.0002 0.2500 1047 | vt 0.5067 0.8069 1048 | vt 0.0002 0.3888 1049 | vt 0.5951 0.9995 1050 | vt 0.0002 0.1544 1051 | vt 0.8533 0.9772 1052 | vt 0.0537 0.0423 1053 | vt 0.9995 0.9046 1054 | vt 0.5002 0.3456 1055 | vt 0.9964 0.7902 1056 | vt 0.9046 0.5002 1057 | vt 0.5002 0.1112 1058 | vt 0.5002 0.3456 1059 | vt 0.5537 0.4577 1060 | vt 0.5002 0.5951 1061 | vt 0.0002 0.1112 1062 | vn 0.0000 -0.8286 -0.5598 1063 | vn 0.0757 -0.9217 -0.3804 1064 | vn 0.0000 -0.9217 -0.3879 1065 | vn 0.0000 0.1939 -0.9810 1066 | vn 0.1804 0.3805 -0.9070 1067 | vn 0.1914 0.1939 -0.9622 1068 | vn 0.0392 -0.9796 -0.1971 1069 | vn 0.0000 -0.9796 -0.2010 1070 | vn 0.0000 0.0000 -1.0000 1071 | vn 0.1951 0.0000 -0.9808 1072 | vn 0.0000 0.9796 -0.2010 1073 | vn 0.0000 1.0000 0.0000 1074 | vn 0.0392 0.9796 -0.1971 1075 | vn 0.0000 -1.0000 0.0000 1076 | vn 0.1914 -0.1939 -0.9622 1077 | vn 0.0000 -0.1939 -0.9810 1078 | vn 0.0000 0.9217 -0.3879 1079 | vn 0.0757 0.9217 -0.3804 1080 | vn 0.1804 -0.3805 -0.9070 1081 | vn 0.0000 -0.3805 -0.9247 1082 | vn 0.0000 0.8286 -0.5598 1083 | vn 0.1092 0.8286 -0.5490 1084 | vn 0.1626 -0.5528 -0.8173 1085 | vn 0.0000 -0.5528 -0.8333 1086 | vn 0.0000 0.7040 -0.7101 1087 | vn 0.1385 0.7040 -0.6965 1088 | vn 0.1385 -0.7040 -0.6965 1089 | vn 0.0000 -0.7040 -0.7101 1090 | vn 0.0000 0.5528 -0.8333 1091 | vn 0.1626 0.5528 -0.8173 1092 | vn 0.1092 -0.8286 -0.5490 1093 | vn 0.0000 0.3805 -0.9247 1094 | vn 0.2717 -0.7040 -0.6561 1095 | vn 0.2142 -0.8286 -0.5171 1096 | vn 0.3539 0.3805 -0.8544 1097 | vn 0.1484 -0.9217 -0.3583 1098 | vn 0.3754 0.1939 -0.9063 1099 | vn 0.0769 -0.9796 -0.1856 1100 | vn 0.3827 0.0000 -0.9239 1101 | vn 0.0769 0.9796 -0.1856 1102 | vn 0.3754 -0.1939 -0.9063 1103 | vn 0.1484 0.9217 -0.3583 1104 | vn 0.3539 -0.3805 -0.8544 1105 | vn 0.2142 0.8286 -0.5171 1106 | vn 0.3189 -0.5528 -0.7699 1107 | vn 0.2717 0.7040 -0.6561 1108 | vn 0.3189 0.5528 -0.7699 1109 | vn 0.2155 0.9217 -0.3225 1110 | vn 0.5137 -0.3805 -0.7689 1111 | vn 0.3110 0.8286 -0.4654 1112 | vn 0.4630 -0.5528 -0.6929 1113 | vn 0.3945 0.7040 -0.5904 1114 | vn 0.3945 -0.7040 -0.5904 1115 | vn 0.4630 0.5528 -0.6929 1116 | vn 0.3110 -0.8286 -0.4654 1117 | vn 0.5137 0.3805 -0.7689 1118 | vn 0.2155 -0.9217 -0.3225 1119 | vn 0.5450 0.1939 -0.8157 1120 | vn 0.1116 -0.9796 -0.1671 1121 | vn 0.5556 0.0000 -0.8314 1122 | vn 0.1116 0.9796 -0.1671 1123 | vn 0.5450 -0.1939 -0.8157 1124 | vn 0.6539 0.3805 -0.6539 1125 | vn 0.2743 -0.9217 -0.2743 1126 | vn 0.6937 0.1939 -0.6937 1127 | vn 0.1421 -0.9796 -0.1421 1128 | vn 0.7071 0.0000 -0.7071 1129 | vn 0.1421 0.9796 -0.1421 1130 | vn 0.6937 -0.1939 -0.6937 1131 | vn 0.2743 0.9217 -0.2743 1132 | vn 0.6539 -0.3805 -0.6539 1133 | vn 0.3958 0.8286 -0.3958 1134 | vn 0.5893 -0.5528 -0.5893 1135 | vn 0.5021 0.7040 -0.5021 1136 | vn 0.5021 -0.7040 -0.5021 1137 | vn 0.5893 0.5528 -0.5893 1138 | vn 0.3958 -0.8286 -0.3958 1139 | vn 0.7689 -0.3805 -0.5137 1140 | vn 0.4654 0.8286 -0.3110 1141 | vn 0.6929 -0.5528 -0.4630 1142 | vn 0.5904 0.7040 -0.3945 1143 | vn 0.5904 -0.7040 -0.3945 1144 | vn 0.6929 0.5528 -0.4630 1145 | vn 0.4654 -0.8286 -0.3110 1146 | vn 0.7689 0.3805 -0.5137 1147 | vn 0.3225 -0.9217 -0.2155 1148 | vn 0.8157 0.1939 -0.5450 1149 | vn 0.1671 -0.9796 -0.1116 1150 | vn 0.8314 0.0000 -0.5556 1151 | vn 0.1671 0.9796 -0.1116 1152 | vn 0.8157 -0.1939 -0.5450 1153 | vn 0.3225 0.9217 -0.2155 1154 | vn 0.3583 -0.9217 -0.1484 1155 | vn 0.8544 0.3805 -0.3539 1156 | vn 0.9063 0.1939 -0.3754 1157 | vn 0.1856 -0.9796 -0.0769 1158 | vn 0.9239 0.0000 -0.3827 1159 | vn 0.1856 0.9796 -0.0769 1160 | vn 0.9063 -0.1939 -0.3754 1161 | vn 0.3583 0.9217 -0.1484 1162 | vn 0.8544 -0.3805 -0.3539 1163 | vn 0.5171 0.8286 -0.2142 1164 | vn 0.7699 -0.5528 -0.3189 1165 | vn 0.6561 0.7040 -0.2717 1166 | vn 0.6561 -0.7040 -0.2717 1167 | vn 0.7699 0.5528 -0.3189 1168 | vn 0.5171 -0.8286 -0.2142 1169 | vn 0.9070 -0.3805 -0.1804 1170 | vn 0.8173 -0.5528 -0.1626 1171 | vn 0.6965 0.7040 -0.1385 1172 | vn 0.6965 -0.7040 -0.1385 1173 | vn 0.8173 0.5528 -0.1626 1174 | vn 0.5490 -0.8286 -0.1092 1175 | vn 0.9070 0.3805 -0.1804 1176 | vn 0.3804 -0.9217 -0.0757 1177 | vn 0.9622 0.1939 -0.1914 1178 | vn 0.1971 -0.9796 -0.0392 1179 | vn 0.9808 0.0000 -0.1951 1180 | vn 0.1971 0.9796 -0.0392 1181 | vn 0.9622 -0.1939 -0.1914 1182 | vn 0.3804 0.9217 -0.0757 1183 | vn 0.5490 0.8286 -0.1092 1184 | vn 0.3879 -0.9217 0.0000 1185 | vn 0.2010 -0.9796 0.0000 1186 | vn 1.0000 0.0000 0.0000 1187 | vn 0.2010 0.9796 0.0000 1188 | vn 0.9810 -0.1939 0.0000 1189 | vn 0.3879 0.9217 0.0000 1190 | vn 0.9247 -0.3805 0.0000 1191 | vn 0.5598 0.8286 0.0000 1192 | vn 0.8333 -0.5528 0.0000 1193 | vn 0.7101 0.7040 0.0000 1194 | vn 0.7101 -0.7040 0.0000 1195 | vn 0.8333 0.5528 0.0000 1196 | vn 0.5598 -0.8286 0.0000 1197 | vn 0.9247 0.3805 0.0000 1198 | vn 0.9810 0.1939 0.0000 1199 | vn 0.6965 0.7040 0.1385 1200 | vn 0.6965 -0.7040 0.1385 1201 | vn 0.8173 0.5528 0.1626 1202 | vn 0.5490 -0.8286 0.1092 1203 | vn 0.9070 0.3805 0.1804 1204 | vn 0.3804 -0.9217 0.0757 1205 | vn 0.9622 0.1939 0.1914 1206 | vn 0.1971 -0.9796 0.0392 1207 | vn 0.9808 0.0000 0.1951 1208 | vn 0.1971 0.9796 0.0392 1209 | vn 0.9622 -0.1939 0.1914 1210 | vn 0.3804 0.9217 0.0757 1211 | vn 0.9070 -0.3805 0.1804 1212 | vn 0.5490 0.8286 0.1092 1213 | vn 0.8173 -0.5528 0.1626 1214 | vn 0.9239 0.0000 0.3827 1215 | vn 0.1856 0.9796 0.0769 1216 | vn 0.1856 -0.9796 0.0769 1217 | vn 0.9063 -0.1939 0.3754 1218 | vn 0.3583 0.9217 0.1484 1219 | vn 0.8544 -0.3805 0.3539 1220 | vn 0.5171 0.8286 0.2142 1221 | vn 0.7699 -0.5528 0.3189 1222 | vn 0.6561 0.7040 0.2717 1223 | vn 0.6561 -0.7040 0.2717 1224 | vn 0.7699 0.5528 0.3189 1225 | vn 0.5171 -0.8286 0.2142 1226 | vn 0.8544 0.3805 0.3539 1227 | vn 0.3583 -0.9217 0.1484 1228 | vn 0.9063 0.1939 0.3754 1229 | vn 0.5904 -0.7040 0.3945 1230 | vn 0.5904 0.7040 0.3945 1231 | vn 0.6929 0.5528 0.4630 1232 | vn 0.4654 -0.8286 0.3110 1233 | vn 0.7689 0.3805 0.5137 1234 | vn 0.3225 -0.9217 0.2155 1235 | vn 0.8157 0.1939 0.5450 1236 | vn 0.1671 -0.9796 0.1116 1237 | vn 0.8314 0.0000 0.5556 1238 | vn 0.1671 0.9796 0.1116 1239 | vn 0.8157 -0.1939 0.5450 1240 | vn 0.3225 0.9217 0.2155 1241 | vn 0.7689 -0.3805 0.5137 1242 | vn 0.4654 0.8286 0.3110 1243 | vn 0.6929 -0.5528 0.4630 1244 | vn 0.1421 0.9796 0.1421 1245 | vn 0.1421 -0.9796 0.1421 1246 | vn 0.6937 -0.1939 0.6937 1247 | vn 0.2743 0.9217 0.2743 1248 | vn 0.6539 -0.3805 0.6539 1249 | vn 0.3958 0.8286 0.3958 1250 | vn 0.5893 -0.5528 0.5893 1251 | vn 0.5021 0.7040 0.5021 1252 | vn 0.5021 -0.7040 0.5021 1253 | vn 0.5893 0.5528 0.5893 1254 | vn 0.3958 -0.8286 0.3958 1255 | vn 0.6539 0.3805 0.6539 1256 | vn 0.2743 -0.9217 0.2743 1257 | vn 0.6937 0.1939 0.6937 1258 | vn 0.7071 0.0000 0.7071 1259 | vn 0.3945 0.7040 0.5904 1260 | vn 0.4630 0.5528 0.6929 1261 | vn 0.3110 -0.8286 0.4654 1262 | vn 0.5137 0.3805 0.7689 1263 | vn 0.2155 -0.9217 0.3225 1264 | vn 0.5450 0.1939 0.8157 1265 | vn 0.1116 -0.9796 0.1671 1266 | vn 0.5556 0.0000 0.8314 1267 | vn 0.1116 0.9796 0.1671 1268 | vn 0.5450 -0.1939 0.8157 1269 | vn 0.2155 0.9217 0.3225 1270 | vn 0.5137 -0.3805 0.7689 1271 | vn 0.3110 0.8286 0.4654 1272 | vn 0.4630 -0.5528 0.6929 1273 | vn 0.3945 -0.7040 0.5904 1274 | vn 0.3827 0.0000 0.9239 1275 | vn 0.3754 -0.1939 0.9063 1276 | vn 0.1484 0.9217 0.3583 1277 | vn 0.3539 -0.3805 0.8544 1278 | vn 0.2142 0.8286 0.5171 1279 | vn 0.3189 -0.5528 0.7699 1280 | vn 0.2717 0.7040 0.6561 1281 | vn 0.2717 -0.7040 0.6561 1282 | vn 0.3189 0.5528 0.7699 1283 | vn 0.2142 -0.8286 0.5171 1284 | vn 0.3539 0.3805 0.8544 1285 | vn 0.1484 -0.9217 0.3583 1286 | vn 0.3754 0.1939 0.9063 1287 | vn 0.0769 -0.9796 0.1856 1288 | vn 0.0769 0.9796 0.1856 1289 | vn 0.1092 -0.8286 0.5490 1290 | vn 0.1804 0.3805 0.9070 1291 | vn 0.0757 -0.9217 0.3804 1292 | vn 0.1914 0.1939 0.9622 1293 | vn 0.0392 -0.9796 0.1971 1294 | vn 0.1951 0.0000 0.9808 1295 | vn 0.0392 0.9796 0.1971 1296 | vn 0.1914 -0.1939 0.9622 1297 | vn 0.0757 0.9217 0.3804 1298 | vn 0.1804 -0.3805 0.9070 1299 | vn 0.1092 0.8286 0.5490 1300 | vn 0.1626 -0.5528 0.8173 1301 | vn 0.1385 0.7040 0.6965 1302 | vn 0.1385 -0.7040 0.6965 1303 | vn 0.1626 0.5528 0.8173 1304 | vn 0.0000 -0.3805 0.9247 1305 | vn 0.0000 0.9217 0.3879 1306 | vn 0.0000 0.8286 0.5598 1307 | vn 0.0000 -0.5528 0.8333 1308 | vn 0.0000 0.7040 0.7101 1309 | vn 0.0000 -0.7040 0.7101 1310 | vn 0.0000 0.5528 0.8333 1311 | vn 0.0000 -0.8286 0.5598 1312 | vn 0.0000 0.3805 0.9247 1313 | vn 0.0000 -0.9217 0.3879 1314 | vn 0.0000 0.1939 0.9810 1315 | vn 0.0000 -0.9796 0.2010 1316 | vn 0.0000 0.0000 1.0000 1317 | vn 0.0000 0.9796 0.2010 1318 | vn 0.0000 -0.1939 0.9810 1319 | vn -0.0757 -0.9217 0.3804 1320 | vn -0.1804 0.3805 0.9070 1321 | vn -0.1914 0.1939 0.9622 1322 | vn -0.0392 -0.9796 0.1971 1323 | vn -0.1951 0.0000 0.9808 1324 | vn -0.0392 0.9796 0.1971 1325 | vn -0.1914 -0.1939 0.9622 1326 | vn -0.0757 0.9217 0.3804 1327 | vn -0.1804 -0.3805 0.9070 1328 | vn -0.1092 0.8286 0.5490 1329 | vn -0.1626 -0.5528 0.8173 1330 | vn -0.1385 0.7040 0.6965 1331 | vn -0.1385 -0.7040 0.6965 1332 | vn -0.1626 0.5528 0.8173 1333 | vn -0.1092 -0.8286 0.5490 1334 | vn -0.2142 0.8286 0.5171 1335 | vn -0.3539 -0.3805 0.8544 1336 | vn -0.3189 -0.5528 0.7699 1337 | vn -0.2717 0.7040 0.6561 1338 | vn -0.2717 -0.7040 0.6561 1339 | vn -0.3189 0.5528 0.7699 1340 | vn -0.2142 -0.8286 0.5171 1341 | vn -0.3539 0.3805 0.8544 1342 | vn -0.1484 -0.9217 0.3583 1343 | vn -0.3754 0.1939 0.9063 1344 | vn -0.0769 -0.9796 0.1856 1345 | vn -0.3827 0.0000 0.9239 1346 | vn -0.0769 0.9796 0.1856 1347 | vn -0.3754 -0.1939 0.9063 1348 | vn -0.1484 0.9217 0.3583 1349 | vn -0.5137 0.3805 0.7689 1350 | vn -0.5450 0.1939 0.8157 1351 | vn -0.2155 -0.9217 0.3225 1352 | vn -0.1116 -0.9796 0.1671 1353 | vn -0.5556 0.0000 0.8314 1354 | vn -0.1116 0.9796 0.1671 1355 | vn -0.5450 -0.1939 0.8157 1356 | vn -0.2155 0.9217 0.3225 1357 | vn -0.5137 -0.3805 0.7689 1358 | vn -0.3110 0.8286 0.4654 1359 | vn -0.4630 -0.5528 0.6929 1360 | vn -0.3945 0.7040 0.5904 1361 | vn -0.3945 -0.7040 0.5904 1362 | vn -0.4630 0.5528 0.6929 1363 | vn -0.3110 -0.8286 0.4654 1364 | vn -0.6539 -0.3805 0.6539 1365 | vn -0.5893 -0.5528 0.5893 1366 | vn -0.3958 0.8286 0.3958 1367 | vn -0.5021 0.7040 0.5021 1368 | vn -0.5021 -0.7040 0.5021 1369 | vn -0.5893 0.5528 0.5893 1370 | vn -0.3958 -0.8286 0.3958 1371 | vn -0.6539 0.3805 0.6539 1372 | vn -0.2743 -0.9217 0.2743 1373 | vn -0.6937 0.1939 0.6937 1374 | vn -0.1421 -0.9796 0.1421 1375 | vn -0.7071 0.0000 0.7071 1376 | vn -0.1421 0.9796 0.1421 1377 | vn -0.6937 -0.1939 0.6937 1378 | vn -0.2743 0.9217 0.2743 1379 | vn -0.1671 -0.9796 0.1116 1380 | vn -0.8157 0.1939 0.5450 1381 | vn -0.8314 0.0000 0.5556 1382 | vn -0.1671 0.9796 0.1116 1383 | vn -0.8157 -0.1939 0.5450 1384 | vn -0.3225 0.9217 0.2155 1385 | vn -0.7689 -0.3805 0.5137 1386 | vn -0.4654 0.8286 0.3110 1387 | vn -0.6929 -0.5528 0.4630 1388 | vn -0.5904 0.7040 0.3945 1389 | vn -0.5904 -0.7040 0.3945 1390 | vn -0.6929 0.5528 0.4630 1391 | vn -0.4654 -0.8286 0.3110 1392 | vn -0.7689 0.3805 0.5137 1393 | vn -0.3225 -0.9217 0.2155 1394 | vn -0.5171 0.8286 0.2142 1395 | vn -0.6561 0.7040 0.2717 1396 | vn -0.6561 -0.7040 0.2717 1397 | vn -0.7699 0.5528 0.3189 1398 | vn -0.5171 -0.8286 0.2142 1399 | vn -0.8544 0.3805 0.3539 1400 | vn -0.3583 -0.9217 0.1484 1401 | vn -0.9063 0.1939 0.3754 1402 | vn -0.1856 -0.9796 0.0769 1403 | vn -0.9239 0.0000 0.3827 1404 | vn -0.1856 0.9796 0.0769 1405 | vn -0.9063 -0.1939 0.3754 1406 | vn -0.3583 0.9217 0.1484 1407 | vn -0.8544 -0.3805 0.3539 1408 | vn -0.7699 -0.5528 0.3189 1409 | vn -0.9808 0.0000 0.1951 1410 | vn -0.1971 0.9796 0.0392 1411 | vn -0.1971 -0.9796 0.0392 1412 | vn -0.9622 -0.1939 0.1914 1413 | vn -0.3804 0.9217 0.0757 1414 | vn -0.9070 -0.3805 0.1804 1415 | vn -0.5490 0.8286 0.1092 1416 | vn -0.8173 -0.5528 0.1626 1417 | vn -0.6965 0.7040 0.1385 1418 | vn -0.6965 -0.7040 0.1385 1419 | vn -0.8173 0.5528 0.1626 1420 | vn -0.5490 -0.8286 0.1092 1421 | vn -0.9070 0.3805 0.1804 1422 | vn -0.3804 -0.9217 0.0757 1423 | vn -0.9622 0.1939 0.1914 1424 | vn -0.7101 -0.7040 0.0000 1425 | vn -0.7101 0.7040 0.0000 1426 | vn -0.8333 0.5528 0.0000 1427 | vn -0.5598 -0.8286 0.0000 1428 | vn -0.9247 0.3805 0.0000 1429 | vn -0.3879 -0.9217 0.0000 1430 | vn -0.9810 0.1939 0.0000 1431 | vn -0.2010 -0.9796 0.0000 1432 | vn -1.0000 0.0000 0.0000 1433 | vn -0.2010 0.9796 0.0000 1434 | vn -0.9810 -0.1939 0.0000 1435 | vn -0.3879 0.9217 0.0000 1436 | vn -0.9247 -0.3805 0.0000 1437 | vn -0.5598 0.8286 0.0000 1438 | vn -0.8333 -0.5528 0.0000 1439 | vn -0.1971 -0.9796 -0.0392 1440 | vn -0.9808 0.0000 -0.1951 1441 | vn -0.9622 -0.1939 -0.1914 1442 | vn -0.3804 0.9217 -0.0757 1443 | vn -0.9070 -0.3805 -0.1804 1444 | vn -0.5490 0.8286 -0.1092 1445 | vn -0.8173 -0.5528 -0.1626 1446 | vn -0.6965 0.7040 -0.1385 1447 | vn -0.6965 -0.7040 -0.1385 1448 | vn -0.8173 0.5528 -0.1626 1449 | vn -0.5490 -0.8286 -0.1092 1450 | vn -0.9070 0.3805 -0.1804 1451 | vn -0.3804 -0.9217 -0.0757 1452 | vn -0.9622 0.1939 -0.1914 1453 | vn -0.1971 0.9796 -0.0392 1454 | vn -0.5171 -0.8286 -0.2142 1455 | vn -0.8544 0.3805 -0.3539 1456 | vn -0.3583 -0.9217 -0.1484 1457 | vn -0.9063 0.1939 -0.3754 1458 | vn -0.1856 -0.9796 -0.0769 1459 | vn -0.9239 0.0000 -0.3827 1460 | vn -0.1856 0.9796 -0.0769 1461 | vn -0.9063 -0.1939 -0.3754 1462 | vn -0.3583 0.9217 -0.1484 1463 | vn -0.8544 -0.3805 -0.3539 1464 | vn -0.5171 0.8286 -0.2142 1465 | vn -0.7699 -0.5528 -0.3189 1466 | vn -0.6561 0.7040 -0.2717 1467 | vn -0.6561 -0.7040 -0.2717 1468 | vn -0.7699 0.5528 -0.3189 1469 | vn -0.1671 0.9796 -0.1116 1470 | vn -0.3225 0.9217 -0.2155 1471 | vn -0.7689 -0.3805 -0.5137 1472 | vn -0.4654 0.8286 -0.3110 1473 | vn -0.6929 -0.5528 -0.4630 1474 | vn -0.5904 0.7040 -0.3945 1475 | vn -0.5904 -0.7040 -0.3945 1476 | vn -0.6929 0.5528 -0.4630 1477 | vn -0.4654 -0.8286 -0.3110 1478 | vn -0.7689 0.3805 -0.5137 1479 | vn -0.3225 -0.9217 -0.2155 1480 | vn -0.8157 0.1939 -0.5450 1481 | vn -0.1671 -0.9796 -0.1116 1482 | vn -0.8314 0.0000 -0.5556 1483 | vn -0.8157 -0.1939 -0.5450 1484 | vn -0.6539 0.3805 -0.6539 1485 | vn -0.2743 -0.9217 -0.2743 1486 | vn -0.6937 0.1939 -0.6937 1487 | vn -0.1421 -0.9796 -0.1421 1488 | vn -0.7071 0.0000 -0.7071 1489 | vn -0.1421 0.9796 -0.1421 1490 | vn -0.6937 -0.1939 -0.6937 1491 | vn -0.2743 0.9217 -0.2743 1492 | vn -0.6539 -0.3805 -0.6539 1493 | vn -0.3958 0.8286 -0.3958 1494 | vn -0.5893 -0.5528 -0.5893 1495 | vn -0.5021 0.7040 -0.5021 1496 | vn -0.5021 -0.7040 -0.5021 1497 | vn -0.5893 0.5528 -0.5893 1498 | vn -0.3958 -0.8286 -0.3958 1499 | vn -0.5137 -0.3805 -0.7689 1500 | vn -0.3110 0.8286 -0.4654 1501 | vn -0.4630 -0.5528 -0.6929 1502 | vn -0.3945 0.7040 -0.5904 1503 | vn -0.3945 -0.7040 -0.5904 1504 | vn -0.4630 0.5528 -0.6929 1505 | vn -0.3110 -0.8286 -0.4654 1506 | vn -0.5137 0.3805 -0.7689 1507 | vn -0.2155 -0.9217 -0.3225 1508 | vn -0.5450 0.1939 -0.8157 1509 | vn -0.1116 -0.9796 -0.1671 1510 | vn -0.5556 0.0000 -0.8314 1511 | vn -0.1116 0.9796 -0.1671 1512 | vn -0.5450 -0.1939 -0.8157 1513 | vn -0.2155 0.9217 -0.3225 1514 | vn -0.2142 -0.8286 -0.5171 1515 | vn -0.1484 -0.9217 -0.3583 1516 | vn -0.3539 0.3805 -0.8544 1517 | vn -0.3754 0.1939 -0.9063 1518 | vn -0.0769 -0.9796 -0.1856 1519 | vn -0.3827 0.0000 -0.9239 1520 | vn -0.0769 0.9796 -0.1856 1521 | vn -0.3754 -0.1939 -0.9063 1522 | vn -0.1484 0.9217 -0.3583 1523 | vn -0.3539 -0.3805 -0.8544 1524 | vn -0.2142 0.8286 -0.5171 1525 | vn -0.3189 -0.5528 -0.7699 1526 | vn -0.2717 0.7040 -0.6561 1527 | vn -0.2717 -0.7040 -0.6561 1528 | vn -0.3189 0.5528 -0.7699 1529 | vn -0.1092 0.8286 -0.5490 1530 | vn -0.1804 -0.3805 -0.9070 1531 | vn -0.1626 -0.5528 -0.8173 1532 | vn -0.1385 0.7040 -0.6965 1533 | vn -0.1385 -0.7040 -0.6965 1534 | vn -0.1626 0.5528 -0.8173 1535 | vn -0.1092 -0.8286 -0.5490 1536 | vn -0.1804 0.3805 -0.9070 1537 | vn -0.0757 -0.9217 -0.3804 1538 | vn -0.1914 0.1939 -0.9622 1539 | vn -0.0392 -0.9796 -0.1971 1540 | vn -0.1951 0.0000 -0.9808 1541 | vn -0.0392 0.9796 -0.1971 1542 | vn -0.1914 -0.1939 -0.9622 1543 | vn -0.0757 0.9217 -0.3804 1544 | s 1 1545 | f 480/1/1 14/2/2 481/3/3 1546 | f 474/4/4 6/5/5 7/6/6 1547 | f 481/3/3 15/7/7 482/8/8 1548 | f 475/9/9 7/6/6 8/10/10 1549 | f 468/11/11 272/12/12 1/13/13 1550 | f 76/14/14 482/8/8 15/7/7 1551 | f 475/9/9 9/15/15 476/16/16 1552 | f 469/17/17 1/13/13 2/18/18 1553 | f 476/16/16 10/19/19 477/20/20 1554 | f 470/21/21 2/18/18 3/22/22 1555 | f 477/20/20 11/23/23 478/24/24 1556 | f 471/25/25 3/22/22 4/26/26 1557 | f 478/24/24 12/27/27 479/28/28 1558 | f 472/29/29 4/30/26 5/31/30 1559 | f 479/32/28 13/33/31 480/1/1 1560 | f 473/34/32 5/31/30 6/5/5 1561 | f 13/33/31 27/35/33 28/36/34 1562 | f 5/31/30 21/37/35 6/5/5 1563 | f 13/33/31 29/38/36 14/2/2 1564 | f 6/5/5 22/39/37 7/6/6 1565 | f 15/7/7 29/38/36 30/40/38 1566 | f 7/6/6 23/41/39 8/10/10 1567 | f 1/13/13 272/12/12 16/42/40 1568 | f 76/14/14 15/7/7 30/40/38 1569 | f 9/15/15 23/41/39 24/43/41 1570 | f 1/13/13 17/44/42 2/18/18 1571 | f 9/15/15 25/45/43 10/19/19 1572 | f 2/18/18 18/46/44 3/22/22 1573 | f 10/19/19 26/47/45 11/23/23 1574 | f 3/22/22 19/48/46 4/26/26 1575 | f 12/27/27 26/47/45 27/49/33 1576 | f 4/30/26 20/50/47 5/31/30 1577 | f 16/42/40 32/51/48 17/44/42 1578 | f 24/43/41 40/52/49 25/45/43 1579 | f 17/44/42 33/53/50 18/46/44 1580 | f 26/47/45 40/52/49 41/54/51 1581 | f 18/46/44 34/55/52 19/48/46 1582 | f 26/47/45 42/56/53 27/49/33 1583 | f 19/57/46 35/58/54 20/50/47 1584 | f 28/36/34 42/59/53 43/60/55 1585 | f 20/50/47 36/61/56 21/37/35 1586 | f 29/38/36 43/60/55 44/62/57 1587 | f 21/37/35 37/63/58 22/39/37 1588 | f 29/38/36 45/64/59 30/40/38 1589 | f 22/39/37 38/65/60 23/41/39 1590 | f 16/42/40 272/12/12 31/66/61 1591 | f 76/14/14 30/40/38 45/64/59 1592 | f 23/41/39 39/67/62 24/43/41 1593 | f 35/58/54 51/68/63 36/61/56 1594 | f 43/60/55 59/69/64 44/62/57 1595 | f 36/61/56 52/70/65 37/63/58 1596 | f 44/62/57 60/71/66 45/64/59 1597 | f 37/63/58 53/72/67 38/65/60 1598 | f 31/66/61 272/12/12 46/73/68 1599 | f 76/14/14 45/64/59 60/71/66 1600 | f 38/65/60 54/74/69 39/67/62 1601 | f 32/51/48 46/73/68 47/75/70 1602 | f 39/67/62 55/76/71 40/52/49 1603 | f 32/51/48 48/77/72 33/53/50 1604 | f 41/54/51 55/76/71 56/78/73 1605 | f 33/53/50 49/79/74 34/55/52 1606 | f 41/80/51 57/81/75 42/59/53 1607 | f 35/82/54 49/79/74 50/83/76 1608 | f 42/59/53 58/84/77 43/60/55 1609 | f 54/74/69 70/85/78 55/76/71 1610 | f 47/75/70 63/86/79 48/77/72 1611 | f 56/78/73 70/85/78 71/87/80 1612 | f 48/77/72 64/88/81 49/79/74 1613 | f 56/89/73 72/90/82 57/81/75 1614 | f 50/83/76 64/88/81 65/91/83 1615 | f 57/81/75 73/92/84 58/84/77 1616 | f 50/93/76 66/94/85 51/68/63 1617 | f 58/84/77 74/95/86 59/69/64 1618 | f 52/70/65 66/94/85 67/96/87 1619 | f 60/71/66 74/95/86 75/97/88 1620 | f 53/72/67 67/96/87 68/98/89 1621 | f 46/73/68 272/12/12 61/99/90 1622 | f 76/14/14 60/71/66 75/97/88 1623 | f 53/72/67 69/100/91 54/74/69 1624 | f 46/73/68 62/101/92 47/75/70 1625 | f 73/92/84 90/102/93 74/95/86 1626 | f 67/96/87 82/103/94 83/104/95 1627 | f 74/95/86 91/105/96 75/97/88 1628 | f 67/96/87 84/106/97 68/98/89 1629 | f 61/99/90 272/12/12 77/107/98 1630 | f 76/14/14 75/97/88 91/105/96 1631 | f 68/98/89 85/108/99 69/100/91 1632 | f 61/99/90 78/109/100 62/101/92 1633 | f 69/100/91 86/110/101 70/85/78 1634 | f 62/101/92 79/111/102 63/86/79 1635 | f 71/87/80 86/110/101 87/112/103 1636 | f 63/86/79 80/113/104 64/88/81 1637 | f 71/87/80 88/114/105 72/115/82 1638 | f 64/116/81 81/117/106 65/118/83 1639 | f 73/92/84 88/119/105 89/120/107 1640 | f 65/118/83 82/103/94 66/94/85 1641 | f 87/112/103 101/121/108 102/122/109 1642 | f 79/111/102 95/123/110 80/113/104 1643 | f 88/114/105 102/122/109 103/124/111 1644 | f 80/125/104 96/126/112 81/117/106 1645 | f 89/120/107 103/127/111 104/128/113 1646 | f 81/117/106 97/129/114 82/103/94 1647 | f 89/120/107 105/130/115 90/102/93 1648 | f 83/104/95 97/129/114 98/131/116 1649 | f 90/102/93 106/132/117 91/105/96 1650 | f 83/104/95 99/133/118 84/106/97 1651 | f 77/107/98 272/12/12 92/134/119 1652 | f 76/14/14 91/105/96 106/132/117 1653 | f 84/106/97 100/135/120 85/108/99 1654 | f 77/107/98 93/136/121 78/109/100 1655 | f 85/108/99 101/121/108 86/110/101 1656 | f 78/109/100 94/137/122 79/111/102 1657 | f 106/132/117 120/138/123 121/139/124 1658 | f 98/131/116 114/140/125 99/133/118 1659 | f 92/134/119 272/12/12 107/141/126 1660 | f 76/14/14 106/132/117 121/139/124 1661 | f 99/133/118 115/142/127 100/135/120 1662 | f 92/134/119 108/143/128 93/136/121 1663 | f 100/135/120 116/144/129 101/121/108 1664 | f 93/136/121 109/145/130 94/137/122 1665 | f 102/122/109 116/144/129 117/146/131 1666 | f 94/137/122 110/147/132 95/123/110 1667 | f 103/124/111 117/146/131 118/148/133 1668 | f 95/149/110 111/150/134 96/126/112 1669 | f 104/128/113 118/151/133 119/152/135 1670 | f 96/126/112 112/153/136 97/129/114 1671 | f 104/128/113 120/138/123 105/130/115 1672 | f 98/131/116 112/153/136 113/154/137 1673 | f 109/145/130 125/155/138 110/147/132 1674 | f 117/146/131 133/156/139 118/148/133 1675 | f 110/157/132 126/158/140 111/150/134 1676 | f 119/152/135 133/159/139 134/160/141 1677 | f 111/150/134 127/161/142 112/153/136 1678 | f 119/152/135 135/162/143 120/138/123 1679 | f 113/154/137 127/161/142 128/163/144 1680 | f 120/138/123 136/164/145 121/139/124 1681 | f 113/154/137 129/165/146 114/140/125 1682 | f 107/141/126 272/12/12 122/166/147 1683 | f 76/14/14 121/139/124 136/164/145 1684 | f 114/140/125 130/167/148 115/142/127 1685 | f 107/141/126 123/168/149 108/143/128 1686 | f 115/142/127 131/169/150 116/144/129 1687 | f 108/143/128 124/170/151 109/145/130 1688 | f 117/146/131 131/169/150 132/171/152 1689 | f 128/163/144 144/172/153 129/165/146 1690 | f 122/166/147 272/12/12 137/173/154 1691 | f 76/14/14 136/164/145 151/174/155 1692 | f 130/167/148 144/172/153 145/175/156 1693 | f 122/166/147 138/176/157 123/168/149 1694 | f 130/167/148 146/177/158 131/169/150 1695 | f 123/168/149 139/178/159 124/170/151 1696 | f 132/171/152 146/177/158 147/179/160 1697 | f 125/155/138 139/178/159 140/180/161 1698 | f 132/171/152 148/181/162 133/156/139 1699 | f 125/182/138 141/183/163 126/158/140 1700 | f 133/159/139 149/184/164 134/160/141 1701 | f 126/158/140 142/185/165 127/161/142 1702 | f 134/160/141 150/186/166 135/162/143 1703 | f 128/163/144 142/185/165 143/187/167 1704 | f 136/164/145 150/186/166 151/174/155 1705 | f 147/179/160 163/188/168 148/181/162 1706 | f 141/183/163 155/189/169 156/190/170 1707 | f 149/184/164 163/191/168 164/192/171 1708 | f 141/183/163 157/193/172 142/185/165 1709 | f 149/184/164 165/194/173 150/186/166 1710 | f 143/187/167 157/193/172 158/195/174 1711 | f 151/174/155 165/194/173 166/196/175 1712 | f 143/187/167 159/197/176 144/172/153 1713 | f 137/173/154 272/12/12 152/198/177 1714 | f 76/14/14 151/174/155 166/196/175 1715 | f 145/175/156 159/197/176 160/199/178 1716 | f 137/173/154 153/200/179 138/176/157 1717 | f 145/175/156 161/201/180 146/177/158 1718 | f 138/176/157 154/202/181 139/178/159 1719 | f 147/179/160 161/201/180 162/203/182 1720 | f 139/178/159 155/204/169 140/180/161 1721 | f 152/198/177 272/12/12 167/205/183 1722 | f 76/14/14 166/196/175 181/206/184 1723 | f 159/197/176 175/207/185 160/199/178 1724 | f 152/198/177 168/208/186 153/200/179 1725 | f 160/199/178 176/209/187 161/201/180 1726 | f 153/200/179 169/210/188 154/202/181 1727 | f 162/203/182 176/209/187 177/211/189 1728 | f 154/202/181 170/212/190 155/204/169 1729 | f 162/213/182 178/214/191 163/191/168 1730 | f 155/204/169 171/215/192 156/216/170 1731 | f 164/192/171 178/214/191 179/217/193 1732 | f 156/190/170 172/218/194 157/193/172 1733 | f 165/194/173 179/217/193 180/219/195 1734 | f 158/195/174 172/218/194 173/220/196 1735 | f 166/196/175 180/219/195 181/206/184 1736 | f 158/195/174 174/221/197 159/197/176 1737 | f 171/215/192 185/222/198 186/223/199 1738 | f 178/214/191 194/224/200 179/217/193 1739 | f 171/225/192 187/226/201 172/227/194 1740 | f 180/219/195 194/224/200 195/228/202 1741 | f 173/229/196 187/226/201 188/230/203 1742 | f 180/219/195 196/231/204 181/206/184 1743 | f 173/229/196 189/232/205 174/233/197 1744 | f 167/205/183 272/12/12 182/234/206 1745 | f 76/14/14 181/206/184 196/231/204 1746 | f 174/233/197 190/235/207 175/236/185 1747 | f 167/205/183 183/237/208 168/208/186 1748 | f 175/236/185 191/238/209 176/239/187 1749 | f 168/208/186 184/240/210 169/210/188 1750 | f 177/241/189 191/238/209 192/242/211 1751 | f 169/210/188 185/222/198 170/212/190 1752 | f 177/243/189 193/244/212 178/214/191 1753 | f 190/235/207 204/245/213 205/246/214 1754 | f 182/234/206 198/247/215 183/237/208 1755 | f 190/235/207 206/248/216 191/238/209 1756 | f 183/237/208 199/249/217 184/240/210 1757 | f 192/242/211 206/248/216 207/250/218 1758 | f 184/240/210 200/251/219 185/222/198 1759 | f 193/252/212 207/250/218 208/253/220 1760 | f 185/254/198 201/255/221 186/256/199 1761 | f 194/224/200 208/257/220 209/258/222 1762 | f 186/256/199 202/259/223 187/226/201 1763 | f 195/228/202 209/258/222 210/260/224 1764 | f 188/230/203 202/259/223 203/261/225 1765 | f 196/231/204 210/260/224 211/262/226 1766 | f 188/230/203 204/245/213 189/232/205 1767 | f 182/234/206 272/12/12 197/263/227 1768 | f 76/14/14 196/231/204 211/262/226 1769 | f 208/257/220 224/264/228 209/258/222 1770 | f 201/255/221 217/265/229 202/259/223 1771 | f 209/258/222 225/266/230 210/260/224 1772 | f 203/261/225 217/265/229 218/267/231 1773 | f 210/260/224 226/268/232 211/262/226 1774 | f 204/245/213 218/267/231 219/269/233 1775 | f 197/263/227 272/12/12 212/270/234 1776 | f 76/14/14 211/262/226 226/268/232 1777 | f 204/245/213 220/271/235 205/246/214 1778 | f 197/263/227 213/272/236 198/247/215 1779 | f 205/246/214 221/273/237 206/248/216 1780 | f 199/249/217 213/272/236 214/274/238 1781 | f 207/250/218 221/273/237 222/275/239 1782 | f 200/251/219 214/274/238 215/276/240 1783 | f 208/253/220 222/275/239 223/277/241 1784 | f 201/255/221 215/278/240 216/279/242 1785 | f 220/271/235 236/280/243 221/273/237 1786 | f 214/274/238 228/281/244 229/282/245 1787 | f 222/275/239 236/280/243 237/283/246 1788 | f 215/276/240 229/282/245 230/284/247 1789 | f 222/275/239 238/285/248 223/277/241 1790 | f 216/279/242 230/286/247 231/287/249 1791 | f 224/264/228 238/288/248 239/289/250 1792 | f 216/279/242 232/290/251 217/265/229 1793 | f 225/266/230 239/289/250 240/291/252 1794 | f 218/267/231 232/290/251 233/292/253 1795 | f 226/268/232 240/291/252 241/293/254 1796 | f 218/267/231 234/294/255 219/269/233 1797 | f 212/270/234 272/12/12 227/295/256 1798 | f 76/14/14 226/268/232 241/293/254 1799 | f 219/269/233 235/296/257 220/271/235 1800 | f 212/270/234 228/281/244 213/272/236 1801 | f 239/289/250 255/297/258 240/291/252 1802 | f 233/292/253 247/298/259 248/299/260 1803 | f 241/293/254 255/297/258 256/300/261 1804 | f 233/292/253 249/301/262 234/294/255 1805 | f 227/295/256 272/12/12 242/302/263 1806 | f 76/14/14 241/293/254 256/300/261 1807 | f 234/294/255 250/303/264 235/296/257 1808 | f 227/295/256 243/304/265 228/281/244 1809 | f 235/296/257 251/305/266 236/280/243 1810 | f 228/281/244 244/306/267 229/282/245 1811 | f 237/283/246 251/305/266 252/307/268 1812 | f 230/284/247 244/306/267 245/308/269 1813 | f 237/283/246 253/309/270 238/285/248 1814 | f 231/287/249 245/310/269 246/311/271 1815 | f 238/288/248 254/312/272 239/289/250 1816 | f 231/287/249 247/298/259 232/290/251 1817 | f 243/304/265 259/313/273 244/306/267 1818 | f 252/307/268 266/314/274 267/315/275 1819 | f 245/308/269 259/313/273 260/316/276 1820 | f 252/307/268 268/317/277 253/309/270 1821 | f 246/311/271 260/318/276 261/319/278 1822 | f 253/320/270 269/321/279 254/312/272 1823 | f 246/311/271 262/322/280 247/298/259 1824 | f 255/297/258 269/321/279 270/323/281 1825 | f 248/299/260 262/322/280 263/324/282 1826 | f 256/300/261 270/323/281 271/325/283 1827 | f 248/299/260 264/326/284 249/301/262 1828 | f 242/302/263 272/12/12 257/327/285 1829 | f 76/14/14 256/300/261 271/325/283 1830 | f 249/301/262 265/328/286 250/303/264 1831 | f 242/302/263 258/329/287 243/304/265 1832 | f 250/303/264 266/314/274 251/305/266 1833 | f 263/324/282 278/330/288 279/331/289 1834 | f 271/325/283 286/332/290 287/333/291 1835 | f 263/324/282 280/334/292 264/326/284 1836 | f 257/327/285 272/12/12 273/335/293 1837 | f 76/14/14 271/325/283 287/333/291 1838 | f 264/326/284 281/336/294 265/328/286 1839 | f 257/327/285 274/337/295 258/329/287 1840 | f 265/328/286 282/338/296 266/314/274 1841 | f 258/329/287 275/339/297 259/313/273 1842 | f 267/315/275 282/338/296 283/340/298 1843 | f 260/316/276 275/339/297 276/341/299 1844 | f 267/315/275 284/342/300 268/317/277 1845 | f 261/319/278 276/343/299 277/344/301 1846 | f 268/345/277 285/346/302 269/321/279 1847 | f 261/319/278 278/330/288 262/322/280 1848 | f 270/323/281 285/346/302 286/332/290 1849 | f 283/340/298 297/347/303 298/348/304 1850 | f 276/341/299 290/349/305 291/350/306 1851 | f 283/351/298 299/352/307 284/353/300 1852 | f 277/354/301 291/350/306 292/355/308 1853 | f 284/353/300 300/356/309 285/346/302 1854 | f 277/344/301 293/357/310 278/330/288 1855 | f 285/346/302 301/358/311 286/332/290 1856 | f 279/331/289 293/357/310 294/359/312 1857 | f 286/332/290 302/360/313 287/333/291 1858 | f 280/334/292 294/359/312 295/361/314 1859 | f 273/335/293 272/12/12 288/362/315 1860 | f 76/14/14 287/333/291 302/360/313 1861 | f 280/334/292 296/363/316 281/336/294 1862 | f 274/337/295 288/362/315 289/364/317 1863 | f 281/336/294 297/347/303 282/338/296 1864 | f 274/337/295 290/349/305 275/339/297 1865 | f 301/358/311 317/365/318 302/360/313 1866 | f 295/361/314 309/366/319 310/367/320 1867 | f 288/362/315 272/12/12 303/368/321 1868 | f 76/14/14 302/360/313 317/365/318 1869 | f 295/361/314 311/369/322 296/363/316 1870 | f 288/362/315 304/370/323 289/364/317 1871 | f 296/363/316 312/371/324 297/347/303 1872 | f 289/364/317 305/372/325 290/349/305 1873 | f 298/348/304 312/371/324 313/373/326 1874 | f 290/349/305 306/374/327 291/350/306 1875 | f 298/375/304 314/376/328 299/352/307 1876 | f 292/355/308 306/374/327 307/377/329 1877 | f 299/352/307 315/378/330 300/356/309 1878 | f 292/379/308 308/380/331 293/357/310 1879 | f 301/358/311 315/378/330 316/381/332 1880 | f 294/359/312 308/380/331 309/366/319 1881 | f 306/374/327 320/382/333 321/383/334 1882 | f 313/373/326 329/384/335 314/385/328 1883 | f 307/386/329 321/387/334 322/388/336 1884 | f 314/376/328 330/389/337 315/378/330 1885 | f 307/386/329 323/390/338 308/380/331 1886 | f 316/381/332 330/389/337 331/391/339 1887 | f 309/366/319 323/390/338 324/392/340 1888 | f 317/365/318 331/391/339 332/393/341 1889 | f 309/366/319 325/394/342 310/367/320 1890 | f 303/368/321 272/12/12 318/395/343 1891 | f 76/14/14 317/365/318 332/393/341 1892 | f 310/367/320 326/396/344 311/369/322 1893 | f 303/368/321 319/397/345 304/370/323 1894 | f 311/369/322 327/398/346 312/371/324 1895 | f 304/370/323 320/382/333 305/372/325 1896 | f 313/373/326 327/398/346 328/399/347 1897 | f 324/392/340 340/400/348 325/394/342 1898 | f 318/395/343 272/12/12 333/401/349 1899 | f 76/14/14 332/393/341 347/402/350 1900 | f 326/396/344 340/400/348 341/403/351 1901 | f 318/395/343 334/404/352 319/397/345 1902 | f 326/396/344 342/405/353 327/398/346 1903 | f 320/382/333 334/404/352 335/406/354 1904 | f 328/399/347 342/405/353 343/407/355 1905 | f 321/383/334 335/406/354 336/408/356 1906 | f 328/399/347 344/409/357 329/384/335 1907 | f 322/388/336 336/410/356 337/411/358 1908 | f 329/412/335 345/413/359 330/389/337 1909 | f 322/388/336 338/414/360 323/390/338 1910 | f 330/389/337 346/415/361 331/391/339 1911 | f 324/392/340 338/414/360 339/416/362 1912 | f 331/391/339 347/402/350 332/393/341 1913 | f 343/407/355 359/417/363 344/409/357 1914 | f 337/411/358 351/418/364 352/419/365 1915 | f 344/420/357 360/421/366 345/413/359 1916 | f 337/411/358 353/422/367 338/414/360 1917 | f 346/415/361 360/421/366 361/423/368 1918 | f 339/416/362 353/422/367 354/424/369 1919 | f 346/415/361 362/425/370 347/402/350 1920 | f 339/416/362 355/426/371 340/400/348 1921 | f 333/401/349 272/12/12 348/427/372 1922 | f 76/14/14 347/402/350 362/425/370 1923 | f 341/403/351 355/426/371 356/428/373 1924 | f 333/401/349 349/429/374 334/404/352 1925 | f 341/403/351 357/430/375 342/405/353 1926 | f 334/404/352 350/431/376 335/406/354 1927 | f 343/407/355 357/430/375 358/432/377 1928 | f 336/408/356 350/431/376 351/433/364 1929 | f 76/14/14 362/425/370 377/434/378 1930 | f 356/428/373 370/435/379 371/436/380 1931 | f 348/427/372 364/437/381 349/429/374 1932 | f 356/428/373 372/438/382 357/430/375 1933 | f 349/429/374 365/439/383 350/431/376 1934 | f 358/432/377 372/438/382 373/440/384 1935 | f 351/433/364 365/439/383 366/441/385 1936 | f 358/432/377 374/442/386 359/417/363 1937 | f 351/418/364 367/443/387 352/419/365 1938 | f 359/444/363 375/445/388 360/421/366 1939 | f 352/419/365 368/446/389 353/422/367 1940 | f 361/423/368 375/445/388 376/447/390 1941 | f 354/424/369 368/446/389 369/448/391 1942 | f 362/425/370 376/447/390 377/434/378 1943 | f 354/424/369 370/435/379 355/426/371 1944 | f 348/427/372 272/12/12 363/449/392 1945 | f 374/450/386 390/451/393 375/445/388 1946 | f 367/443/387 383/452/394 368/446/389 1947 | f 376/447/390 390/451/393 391/453/395 1948 | f 369/448/391 383/452/394 384/454/396 1949 | f 376/447/390 392/455/397 377/434/378 1950 | f 369/448/391 385/456/398 370/435/379 1951 | f 363/449/392 272/12/12 378/457/399 1952 | f 76/14/14 377/434/378 392/455/397 1953 | f 371/436/380 385/456/398 386/458/400 1954 | f 363/449/392 379/459/401 364/437/381 1955 | f 371/436/380 387/460/402 372/438/382 1956 | f 365/439/383 379/459/401 380/461/403 1957 | f 373/440/384 387/460/402 388/462/404 1958 | f 366/441/385 380/461/403 381/463/405 1959 | f 373/440/384 389/464/406 374/442/386 1960 | f 366/465/385 382/466/407 367/443/387 1961 | f 379/459/401 393/467/408 394/468/409 1962 | f 386/458/400 402/469/410 387/460/402 1963 | f 379/459/401 395/470/411 380/461/403 1964 | f 388/462/404 402/469/410 403/471/412 1965 | f 381/463/405 395/470/411 396/472/413 1966 | f 388/462/404 404/473/414 389/464/406 1967 | f 382/466/407 396/474/413 397/475/415 1968 | f 389/476/406 405/477/416 390/451/393 1969 | f 382/466/407 398/478/417 383/452/394 1970 | f 390/451/393 406/479/418 391/453/395 1971 | f 384/454/396 398/478/417 399/480/419 1972 | f 391/453/395 407/481/420 392/455/397 1973 | f 384/454/396 400/482/421 385/456/398 1974 | f 378/457/399 272/12/12 393/467/408 1975 | f 76/14/14 392/455/397 407/481/420 1976 | f 385/456/398 401/483/422 386/458/400 1977 | f 397/475/415 413/484/423 398/478/417 1978 | f 405/477/416 421/485/424 406/479/418 1979 | f 399/480/419 413/484/423 414/486/425 1980 | f 406/479/418 422/487/426 407/481/420 1981 | f 399/480/419 415/488/427 400/482/421 1982 | f 393/467/408 272/12/12 408/489/428 1983 | f 76/14/14 407/481/420 422/487/426 1984 | f 401/483/422 415/488/427 416/490/429 1985 | f 393/467/408 409/491/430 394/468/409 1986 | f 401/483/422 417/492/431 402/469/410 1987 | f 395/470/411 409/491/430 410/493/432 1988 | f 403/471/412 417/492/431 418/494/433 1989 | f 396/472/413 410/493/432 411/495/434 1990 | f 403/496/412 419/497/435 404/498/414 1991 | f 397/499/415 411/495/434 412/500/436 1992 | f 404/498/414 420/501/437 405/477/416 1993 | f 416/502/429 432/503/438 417/504/431 1994 | f 409/491/430 425/505/439 410/493/432 1995 | f 418/506/433 432/503/438 433/507/440 1996 | f 410/493/432 426/508/441 411/495/434 1997 | f 418/509/433 434/510/442 419/497/435 1998 | f 412/500/436 426/508/441 427/511/443 1999 | f 419/497/435 435/512/444 420/501/437 2000 | f 412/513/436 428/514/445 413/515/423 2001 | f 421/485/424 435/512/444 436/516/446 2002 | f 414/517/425 428/514/445 429/518/447 2003 | f 421/485/424 437/519/448 422/487/426 2004 | f 415/520/427 429/518/447 430/521/449 2005 | f 408/489/428 272/12/12 423/522/450 2006 | f 76/14/14 422/487/426 437/519/448 2007 | f 415/520/427 431/523/451 416/502/429 2008 | f 409/491/430 423/522/450 424/524/452 2009 | f 436/516/446 450/525/453 451/526/454 2010 | f 429/518/447 443/527/455 444/528/456 2011 | f 436/516/446 452/529/457 437/519/448 2012 | f 429/518/447 445/530/458 430/521/449 2013 | f 423/522/450 272/12/12 438/531/459 2014 | f 76/14/14 437/519/448 452/529/457 2015 | f 431/523/451 445/530/458 446/532/460 2016 | f 423/522/450 439/533/461 424/524/452 2017 | f 431/523/451 447/534/462 432/503/438 2018 | f 425/505/439 439/533/461 440/535/463 2019 | f 433/507/440 447/534/462 448/536/464 2020 | f 425/505/439 441/537/465 426/508/441 2021 | f 433/507/440 449/538/466 434/539/442 2022 | f 427/540/443 441/541/465 442/542/467 2023 | f 435/512/444 449/543/466 450/525/453 2024 | f 427/540/443 443/527/455 428/514/445 2025 | f 439/533/461 455/544/468 440/535/463 2026 | f 448/536/464 462/545/469 463/546/470 2027 | f 440/535/463 456/547/471 441/537/465 2028 | f 448/536/464 464/548/472 449/538/466 2029 | f 442/542/467 456/549/471 457/550/473 2030 | f 450/525/453 464/551/472 465/552/474 2031 | f 442/542/467 458/553/475 443/527/455 2032 | f 450/525/453 466/554/476 451/526/454 2033 | f 444/528/456 458/553/475 459/555/477 2034 | f 451/526/454 467/556/478 452/529/457 2035 | f 444/528/456 460/557/479 445/530/458 2036 | f 438/531/459 272/12/12 453/558/480 2037 | f 76/14/14 452/529/457 467/556/478 2038 | f 445/530/458 461/559/481 446/532/460 2039 | f 438/531/459 454/560/482 439/533/461 2040 | f 446/532/460 462/545/469 447/534/462 2041 | f 459/555/477 473/34/32 474/4/4 2042 | f 466/554/476 482/8/8 467/556/478 2043 | f 459/555/477 475/9/9 460/557/479 2044 | f 453/558/480 272/12/12 468/11/11 2045 | f 76/14/14 467/556/478 482/8/8 2046 | f 460/557/479 476/16/16 461/559/481 2047 | f 454/560/482 468/11/11 469/17/17 2048 | f 461/559/481 477/20/20 462/545/469 2049 | f 454/560/482 470/21/21 455/544/468 2050 | f 463/546/470 477/20/20 478/24/24 2051 | f 456/547/471 470/21/21 471/25/25 2052 | f 463/546/470 479/28/28 464/548/472 2053 | f 457/550/473 471/561/25 472/29/29 2054 | f 465/552/474 479/32/28 480/1/1 2055 | f 457/550/473 473/34/32 458/553/475 2056 | f 465/552/474 481/3/3 466/554/476 2057 | f 480/1/1 13/33/31 14/2/2 2058 | f 474/4/4 473/34/32 6/5/5 2059 | f 481/3/3 14/2/2 15/7/7 2060 | f 475/9/9 474/4/4 7/6/6 2061 | f 475/9/9 8/10/10 9/15/15 2062 | f 469/17/17 468/11/11 1/13/13 2063 | f 476/16/16 9/15/15 10/19/19 2064 | f 470/21/21 469/17/17 2/18/18 2065 | f 477/20/20 10/19/19 11/23/23 2066 | f 471/25/25 470/21/21 3/22/22 2067 | f 478/24/24 11/23/23 12/27/27 2068 | f 472/29/29 471/561/25 4/30/26 2069 | f 479/32/28 12/562/27 13/33/31 2070 | f 473/34/32 472/29/29 5/31/30 2071 | f 13/33/31 12/562/27 27/35/33 2072 | f 5/31/30 20/50/47 21/37/35 2073 | f 13/33/31 28/36/34 29/38/36 2074 | f 6/5/5 21/37/35 22/39/37 2075 | f 15/7/7 14/2/2 29/38/36 2076 | f 7/6/6 22/39/37 23/41/39 2077 | f 9/15/15 8/10/10 23/41/39 2078 | f 1/13/13 16/42/40 17/44/42 2079 | f 9/15/15 24/43/41 25/45/43 2080 | f 2/18/18 17/44/42 18/46/44 2081 | f 10/19/19 25/45/43 26/47/45 2082 | f 3/22/22 18/46/44 19/48/46 2083 | f 12/27/27 11/23/23 26/47/45 2084 | f 4/30/26 19/57/46 20/50/47 2085 | f 16/42/40 31/66/61 32/51/48 2086 | f 24/43/41 39/67/62 40/52/49 2087 | f 17/44/42 32/51/48 33/53/50 2088 | f 26/47/45 25/45/43 40/52/49 2089 | f 18/46/44 33/53/50 34/55/52 2090 | f 26/47/45 41/54/51 42/56/53 2091 | f 19/57/46 34/563/52 35/58/54 2092 | f 28/36/34 27/35/33 42/59/53 2093 | f 20/50/47 35/58/54 36/61/56 2094 | f 29/38/36 28/36/34 43/60/55 2095 | f 21/37/35 36/61/56 37/63/58 2096 | f 29/38/36 44/62/57 45/64/59 2097 | f 22/39/37 37/63/58 38/65/60 2098 | f 23/41/39 38/65/60 39/67/62 2099 | f 35/58/54 50/93/76 51/68/63 2100 | f 43/60/55 58/84/77 59/69/64 2101 | f 36/61/56 51/68/63 52/70/65 2102 | f 44/62/57 59/69/64 60/71/66 2103 | f 37/63/58 52/70/65 53/72/67 2104 | f 38/65/60 53/72/67 54/74/69 2105 | f 32/51/48 31/66/61 46/73/68 2106 | f 39/67/62 54/74/69 55/76/71 2107 | f 32/51/48 47/75/70 48/77/72 2108 | f 41/54/51 40/52/49 55/76/71 2109 | f 33/53/50 48/77/72 49/79/74 2110 | f 41/80/51 56/89/73 57/81/75 2111 | f 35/82/54 34/55/52 49/79/74 2112 | f 42/59/53 57/81/75 58/84/77 2113 | f 54/74/69 69/100/91 70/85/78 2114 | f 47/75/70 62/101/92 63/86/79 2115 | f 56/78/73 55/76/71 70/85/78 2116 | f 48/77/72 63/86/79 64/88/81 2117 | f 56/89/73 71/564/80 72/90/82 2118 | f 50/83/76 49/79/74 64/88/81 2119 | f 57/81/75 72/90/82 73/92/84 2120 | f 50/93/76 65/118/83 66/94/85 2121 | f 58/84/77 73/92/84 74/95/86 2122 | f 52/70/65 51/68/63 66/94/85 2123 | f 60/71/66 59/69/64 74/95/86 2124 | f 53/72/67 52/70/65 67/96/87 2125 | f 53/72/67 68/98/89 69/100/91 2126 | f 46/73/68 61/99/90 62/101/92 2127 | f 73/92/84 89/120/107 90/102/93 2128 | f 67/96/87 66/94/85 82/103/94 2129 | f 74/95/86 90/102/93 91/105/96 2130 | f 67/96/87 83/104/95 84/106/97 2131 | f 68/98/89 84/106/97 85/108/99 2132 | f 61/99/90 77/107/98 78/109/100 2133 | f 69/100/91 85/108/99 86/110/101 2134 | f 62/101/92 78/109/100 79/111/102 2135 | f 71/87/80 70/85/78 86/110/101 2136 | f 63/86/79 79/111/102 80/113/104 2137 | f 71/87/80 87/112/103 88/114/105 2138 | f 64/116/81 80/125/104 81/117/106 2139 | f 73/92/84 72/90/82 88/119/105 2140 | f 65/118/83 81/117/106 82/103/94 2141 | f 87/112/103 86/110/101 101/121/108 2142 | f 79/111/102 94/137/122 95/123/110 2143 | f 88/114/105 87/112/103 102/122/109 2144 | f 80/125/104 95/149/110 96/126/112 2145 | f 89/120/107 88/119/105 103/127/111 2146 | f 81/117/106 96/126/112 97/129/114 2147 | f 89/120/107 104/128/113 105/130/115 2148 | f 83/104/95 82/103/94 97/129/114 2149 | f 90/102/93 105/130/115 106/132/117 2150 | f 83/104/95 98/131/116 99/133/118 2151 | f 84/106/97 99/133/118 100/135/120 2152 | f 77/107/98 92/134/119 93/136/121 2153 | f 85/108/99 100/135/120 101/121/108 2154 | f 78/109/100 93/136/121 94/137/122 2155 | f 106/132/117 105/130/115 120/138/123 2156 | f 98/131/116 113/154/137 114/140/125 2157 | f 99/133/118 114/140/125 115/142/127 2158 | f 92/134/119 107/141/126 108/143/128 2159 | f 100/135/120 115/142/127 116/144/129 2160 | f 93/136/121 108/143/128 109/145/130 2161 | f 102/122/109 101/121/108 116/144/129 2162 | f 94/137/122 109/145/130 110/147/132 2163 | f 103/124/111 102/122/109 117/146/131 2164 | f 95/149/110 110/157/132 111/150/134 2165 | f 104/128/113 103/127/111 118/151/133 2166 | f 96/126/112 111/150/134 112/153/136 2167 | f 104/128/113 119/152/135 120/138/123 2168 | f 98/131/116 97/129/114 112/153/136 2169 | f 109/145/130 124/170/151 125/155/138 2170 | f 117/146/131 132/171/152 133/156/139 2171 | f 110/157/132 125/182/138 126/158/140 2172 | f 119/152/135 118/151/133 133/159/139 2173 | f 111/150/134 126/158/140 127/161/142 2174 | f 119/152/135 134/160/141 135/162/143 2175 | f 113/154/137 112/153/136 127/161/142 2176 | f 120/138/123 135/162/143 136/164/145 2177 | f 113/154/137 128/163/144 129/165/146 2178 | f 114/140/125 129/165/146 130/167/148 2179 | f 107/141/126 122/166/147 123/168/149 2180 | f 115/142/127 130/167/148 131/169/150 2181 | f 108/143/128 123/168/149 124/170/151 2182 | f 117/146/131 116/144/129 131/169/150 2183 | f 128/163/144 143/187/167 144/172/153 2184 | f 130/167/148 129/165/146 144/172/153 2185 | f 122/166/147 137/173/154 138/176/157 2186 | f 130/167/148 145/175/156 146/177/158 2187 | f 123/168/149 138/176/157 139/178/159 2188 | f 132/171/152 131/169/150 146/177/158 2189 | f 125/155/138 124/170/151 139/178/159 2190 | f 132/171/152 147/179/160 148/181/162 2191 | f 125/182/138 140/565/161 141/183/163 2192 | f 133/159/139 148/566/162 149/184/164 2193 | f 126/158/140 141/183/163 142/185/165 2194 | f 134/160/141 149/184/164 150/186/166 2195 | f 128/163/144 127/161/142 142/185/165 2196 | f 136/164/145 135/162/143 150/186/166 2197 | f 147/179/160 162/203/182 163/188/168 2198 | f 141/183/163 140/565/161 155/189/169 2199 | f 149/184/164 148/566/162 163/191/168 2200 | f 141/183/163 156/190/170 157/193/172 2201 | f 149/184/164 164/192/171 165/194/173 2202 | f 143/187/167 142/185/165 157/193/172 2203 | f 151/174/155 150/186/166 165/194/173 2204 | f 143/187/167 158/195/174 159/197/176 2205 | f 145/175/156 144/172/153 159/197/176 2206 | f 137/173/154 152/198/177 153/200/179 2207 | f 145/175/156 160/199/178 161/201/180 2208 | f 138/176/157 153/200/179 154/202/181 2209 | f 147/179/160 146/177/158 161/201/180 2210 | f 139/178/159 154/202/181 155/204/169 2211 | f 159/197/176 174/221/197 175/207/185 2212 | f 152/198/177 167/205/183 168/208/186 2213 | f 160/199/178 175/207/185 176/209/187 2214 | f 153/200/179 168/208/186 169/210/188 2215 | f 162/203/182 161/201/180 176/209/187 2216 | f 154/202/181 169/210/188 170/212/190 2217 | f 162/213/182 177/243/189 178/214/191 2218 | f 155/204/169 170/212/190 171/215/192 2219 | f 164/192/171 163/191/168 178/214/191 2220 | f 156/190/170 171/567/192 172/218/194 2221 | f 165/194/173 164/192/171 179/217/193 2222 | f 158/195/174 157/193/172 172/218/194 2223 | f 166/196/175 165/194/173 180/219/195 2224 | f 158/195/174 173/220/196 174/221/197 2225 | f 171/215/192 170/212/190 185/222/198 2226 | f 178/214/191 193/244/212 194/224/200 2227 | f 171/225/192 186/256/199 187/226/201 2228 | f 180/219/195 179/217/193 194/224/200 2229 | f 173/229/196 172/227/194 187/226/201 2230 | f 180/219/195 195/228/202 196/231/204 2231 | f 173/229/196 188/230/203 189/232/205 2232 | f 174/233/197 189/232/205 190/235/207 2233 | f 167/205/183 182/234/206 183/237/208 2234 | f 175/236/185 190/235/207 191/238/209 2235 | f 168/208/186 183/237/208 184/240/210 2236 | f 177/241/189 176/239/187 191/238/209 2237 | f 169/210/188 184/240/210 185/222/198 2238 | f 177/243/189 192/568/211 193/244/212 2239 | f 190/235/207 189/232/205 204/245/213 2240 | f 182/234/206 197/263/227 198/247/215 2241 | f 190/235/207 205/246/214 206/248/216 2242 | f 183/237/208 198/247/215 199/249/217 2243 | f 192/242/211 191/238/209 206/248/216 2244 | f 184/240/210 199/249/217 200/251/219 2245 | f 193/252/212 192/242/211 207/250/218 2246 | f 185/254/198 200/569/219 201/255/221 2247 | f 194/224/200 193/244/212 208/257/220 2248 | f 186/256/199 201/255/221 202/259/223 2249 | f 195/228/202 194/224/200 209/258/222 2250 | f 188/230/203 187/226/201 202/259/223 2251 | f 196/231/204 195/228/202 210/260/224 2252 | f 188/230/203 203/261/225 204/245/213 2253 | f 208/257/220 223/570/241 224/264/228 2254 | f 201/255/221 216/279/242 217/265/229 2255 | f 209/258/222 224/264/228 225/266/230 2256 | f 203/261/225 202/259/223 217/265/229 2257 | f 210/260/224 225/266/230 226/268/232 2258 | f 204/245/213 203/261/225 218/267/231 2259 | f 204/245/213 219/269/233 220/271/235 2260 | f 197/263/227 212/270/234 213/272/236 2261 | f 205/246/214 220/271/235 221/273/237 2262 | f 199/249/217 198/247/215 213/272/236 2263 | f 207/250/218 206/248/216 221/273/237 2264 | f 200/251/219 199/249/217 214/274/238 2265 | f 208/253/220 207/250/218 222/275/239 2266 | f 201/255/221 200/569/219 215/278/240 2267 | f 220/271/235 235/296/257 236/280/243 2268 | f 214/274/238 213/272/236 228/281/244 2269 | f 222/275/239 221/273/237 236/280/243 2270 | f 215/276/240 214/274/238 229/282/245 2271 | f 222/275/239 237/283/246 238/285/248 2272 | f 216/279/242 215/278/240 230/286/247 2273 | f 224/264/228 223/570/241 238/288/248 2274 | f 216/279/242 231/287/249 232/290/251 2275 | f 225/266/230 224/264/228 239/289/250 2276 | f 218/267/231 217/265/229 232/290/251 2277 | f 226/268/232 225/266/230 240/291/252 2278 | f 218/267/231 233/292/253 234/294/255 2279 | f 219/269/233 234/294/255 235/296/257 2280 | f 212/270/234 227/295/256 228/281/244 2281 | f 239/289/250 254/312/272 255/297/258 2282 | f 233/292/253 232/290/251 247/298/259 2283 | f 241/293/254 240/291/252 255/297/258 2284 | f 233/292/253 248/299/260 249/301/262 2285 | f 234/294/255 249/301/262 250/303/264 2286 | f 227/295/256 242/302/263 243/304/265 2287 | f 235/296/257 250/303/264 251/305/266 2288 | f 228/281/244 243/304/265 244/306/267 2289 | f 237/283/246 236/280/243 251/305/266 2290 | f 230/284/247 229/282/245 244/306/267 2291 | f 237/283/246 252/307/268 253/309/270 2292 | f 231/287/249 230/286/247 245/310/269 2293 | f 238/288/248 253/320/270 254/312/272 2294 | f 231/287/249 246/311/271 247/298/259 2295 | f 243/304/265 258/329/287 259/313/273 2296 | f 252/307/268 251/305/266 266/314/274 2297 | f 245/308/269 244/306/267 259/313/273 2298 | f 252/307/268 267/315/275 268/317/277 2299 | f 246/311/271 245/310/269 260/318/276 2300 | f 253/320/270 268/345/277 269/321/279 2301 | f 246/311/271 261/319/278 262/322/280 2302 | f 255/297/258 254/312/272 269/321/279 2303 | f 248/299/260 247/298/259 262/322/280 2304 | f 256/300/261 255/297/258 270/323/281 2305 | f 248/299/260 263/324/282 264/326/284 2306 | f 249/301/262 264/326/284 265/328/286 2307 | f 242/302/263 257/327/285 258/329/287 2308 | f 250/303/264 265/328/286 266/314/274 2309 | f 263/324/282 262/322/280 278/330/288 2310 | f 271/325/283 270/323/281 286/332/290 2311 | f 263/324/282 279/331/289 280/334/292 2312 | f 264/326/284 280/334/292 281/336/294 2313 | f 257/327/285 273/335/293 274/337/295 2314 | f 265/328/286 281/336/294 282/338/296 2315 | f 258/329/287 274/337/295 275/339/297 2316 | f 267/315/275 266/314/274 282/338/296 2317 | f 260/316/276 259/313/273 275/339/297 2318 | f 267/315/275 283/340/298 284/342/300 2319 | f 261/319/278 260/318/276 276/343/299 2320 | f 268/345/277 284/353/300 285/346/302 2321 | f 261/319/278 277/344/301 278/330/288 2322 | f 270/323/281 269/321/279 285/346/302 2323 | f 283/340/298 282/338/296 297/347/303 2324 | f 276/341/299 275/339/297 290/349/305 2325 | f 283/351/298 298/375/304 299/352/307 2326 | f 277/354/301 276/341/299 291/350/306 2327 | f 284/353/300 299/352/307 300/356/309 2328 | f 277/344/301 292/379/308 293/357/310 2329 | f 285/346/302 300/356/309 301/358/311 2330 | f 279/331/289 278/330/288 293/357/310 2331 | f 286/332/290 301/358/311 302/360/313 2332 | f 280/334/292 279/331/289 294/359/312 2333 | f 280/334/292 295/361/314 296/363/316 2334 | f 274/337/295 273/335/293 288/362/315 2335 | f 281/336/294 296/363/316 297/347/303 2336 | f 274/337/295 289/364/317 290/349/305 2337 | f 301/358/311 316/381/332 317/365/318 2338 | f 295/361/314 294/359/312 309/366/319 2339 | f 295/361/314 310/367/320 311/369/322 2340 | f 288/362/315 303/368/321 304/370/323 2341 | f 296/363/316 311/369/322 312/371/324 2342 | f 289/364/317 304/370/323 305/372/325 2343 | f 298/348/304 297/347/303 312/371/324 2344 | f 290/349/305 305/372/325 306/374/327 2345 | f 298/375/304 313/571/326 314/376/328 2346 | f 292/355/308 291/350/306 306/374/327 2347 | f 299/352/307 314/376/328 315/378/330 2348 | f 292/379/308 307/386/329 308/380/331 2349 | f 301/358/311 300/356/309 315/378/330 2350 | f 294/359/312 293/357/310 308/380/331 2351 | f 306/374/327 305/372/325 320/382/333 2352 | f 313/373/326 328/399/347 329/384/335 2353 | f 307/386/329 306/572/327 321/387/334 2354 | f 314/376/328 329/412/335 330/389/337 2355 | f 307/386/329 322/388/336 323/390/338 2356 | f 316/381/332 315/378/330 330/389/337 2357 | f 309/366/319 308/380/331 323/390/338 2358 | f 317/365/318 316/381/332 331/391/339 2359 | f 309/366/319 324/392/340 325/394/342 2360 | f 310/367/320 325/394/342 326/396/344 2361 | f 303/368/321 318/395/343 319/397/345 2362 | f 311/369/322 326/396/344 327/398/346 2363 | f 304/370/323 319/397/345 320/382/333 2364 | f 313/373/326 312/371/324 327/398/346 2365 | f 324/392/340 339/416/362 340/400/348 2366 | f 326/396/344 325/394/342 340/400/348 2367 | f 318/395/343 333/401/349 334/404/352 2368 | f 326/396/344 341/403/351 342/405/353 2369 | f 320/382/333 319/397/345 334/404/352 2370 | f 328/399/347 327/398/346 342/405/353 2371 | f 321/383/334 320/382/333 335/406/354 2372 | f 328/399/347 343/407/355 344/409/357 2373 | f 322/388/336 321/387/334 336/410/356 2374 | f 329/412/335 344/420/357 345/413/359 2375 | f 322/388/336 337/411/358 338/414/360 2376 | f 330/389/337 345/413/359 346/415/361 2377 | f 324/392/340 323/390/338 338/414/360 2378 | f 331/391/339 346/415/361 347/402/350 2379 | f 343/407/355 358/432/377 359/417/363 2380 | f 337/411/358 336/410/356 351/418/364 2381 | f 344/420/357 359/444/363 360/421/366 2382 | f 337/411/358 352/419/365 353/422/367 2383 | f 346/415/361 345/413/359 360/421/366 2384 | f 339/416/362 338/414/360 353/422/367 2385 | f 346/415/361 361/423/368 362/425/370 2386 | f 339/416/362 354/424/369 355/426/371 2387 | f 341/403/351 340/400/348 355/426/371 2388 | f 333/401/349 348/427/372 349/429/374 2389 | f 341/403/351 356/428/373 357/430/375 2390 | f 334/404/352 349/429/374 350/431/376 2391 | f 343/407/355 342/405/353 357/430/375 2392 | f 336/408/356 335/406/354 350/431/376 2393 | f 356/428/373 355/426/371 370/435/379 2394 | f 348/427/372 363/449/392 364/437/381 2395 | f 356/428/373 371/436/380 372/438/382 2396 | f 349/429/374 364/437/381 365/439/383 2397 | f 358/432/377 357/430/375 372/438/382 2398 | f 351/433/364 350/431/376 365/439/383 2399 | f 358/432/377 373/440/384 374/442/386 2400 | f 351/418/364 366/465/385 367/443/387 2401 | f 359/444/363 374/450/386 375/445/388 2402 | f 352/419/365 367/443/387 368/446/389 2403 | f 361/423/368 360/421/366 375/445/388 2404 | f 354/424/369 353/422/367 368/446/389 2405 | f 362/425/370 361/423/368 376/447/390 2406 | f 354/424/369 369/448/391 370/435/379 2407 | f 374/450/386 389/476/406 390/451/393 2408 | f 367/443/387 382/466/407 383/452/394 2409 | f 376/447/390 375/445/388 390/451/393 2410 | f 369/448/391 368/446/389 383/452/394 2411 | f 376/447/390 391/453/395 392/455/397 2412 | f 369/448/391 384/454/396 385/456/398 2413 | f 371/436/380 370/435/379 385/456/398 2414 | f 363/449/392 378/457/399 379/459/401 2415 | f 371/436/380 386/458/400 387/460/402 2416 | f 365/439/383 364/437/381 379/459/401 2417 | f 373/440/384 372/438/382 387/460/402 2418 | f 366/441/385 365/439/383 380/461/403 2419 | f 373/440/384 388/462/404 389/464/406 2420 | f 366/465/385 381/573/405 382/466/407 2421 | f 379/459/401 378/457/399 393/467/408 2422 | f 386/458/400 401/483/422 402/469/410 2423 | f 379/459/401 394/468/409 395/470/411 2424 | f 388/462/404 387/460/402 402/469/410 2425 | f 381/463/405 380/461/403 395/470/411 2426 | f 388/462/404 403/471/412 404/473/414 2427 | f 382/466/407 381/573/405 396/474/413 2428 | f 389/476/406 404/498/414 405/477/416 2429 | f 382/466/407 397/475/415 398/478/417 2430 | f 390/451/393 405/477/416 406/479/418 2431 | f 384/454/396 383/452/394 398/478/417 2432 | f 391/453/395 406/479/418 407/481/420 2433 | f 384/454/396 399/480/419 400/482/421 2434 | f 385/456/398 400/482/421 401/483/422 2435 | f 397/475/415 412/574/436 413/484/423 2436 | f 405/477/416 420/501/437 421/485/424 2437 | f 399/480/419 398/478/417 413/484/423 2438 | f 406/479/418 421/485/424 422/487/426 2439 | f 399/480/419 414/486/425 415/488/427 2440 | f 401/483/422 400/482/421 415/488/427 2441 | f 393/467/408 408/489/428 409/491/430 2442 | f 401/483/422 416/490/429 417/492/431 2443 | f 395/470/411 394/468/409 409/491/430 2444 | f 403/471/412 402/469/410 417/492/431 2445 | f 396/472/413 395/470/411 410/493/432 2446 | f 403/496/412 418/509/433 419/497/435 2447 | f 397/499/415 396/472/413 411/495/434 2448 | f 404/498/414 419/497/435 420/501/437 2449 | f 416/502/429 431/523/451 432/503/438 2450 | f 409/491/430 424/524/452 425/505/439 2451 | f 418/506/433 417/504/431 432/503/438 2452 | f 410/493/432 425/505/439 426/508/441 2453 | f 418/509/433 433/575/440 434/510/442 2454 | f 412/500/436 411/495/434 426/508/441 2455 | f 419/497/435 434/510/442 435/512/444 2456 | f 412/513/436 427/540/443 428/514/445 2457 | f 421/485/424 420/501/437 435/512/444 2458 | f 414/517/425 413/515/423 428/514/445 2459 | f 421/485/424 436/516/446 437/519/448 2460 | f 415/520/427 414/517/425 429/518/447 2461 | f 415/520/427 430/521/449 431/523/451 2462 | f 409/491/430 408/489/428 423/522/450 2463 | f 436/516/446 435/512/444 450/525/453 2464 | f 429/518/447 428/514/445 443/527/455 2465 | f 436/516/446 451/526/454 452/529/457 2466 | f 429/518/447 444/528/456 445/530/458 2467 | f 431/523/451 430/521/449 445/530/458 2468 | f 423/522/450 438/531/459 439/533/461 2469 | f 431/523/451 446/532/460 447/534/462 2470 | f 425/505/439 424/524/452 439/533/461 2471 | f 433/507/440 432/503/438 447/534/462 2472 | f 425/505/439 440/535/463 441/537/465 2473 | f 433/507/440 448/536/464 449/538/466 2474 | f 427/540/443 426/576/441 441/541/465 2475 | f 435/512/444 434/510/442 449/543/466 2476 | f 427/540/443 442/542/467 443/527/455 2477 | f 439/533/461 454/560/482 455/544/468 2478 | f 448/536/464 447/534/462 462/545/469 2479 | f 440/535/463 455/544/468 456/547/471 2480 | f 448/536/464 463/546/470 464/548/472 2481 | f 442/542/467 441/541/465 456/549/471 2482 | f 450/525/453 449/543/466 464/551/472 2483 | f 442/542/467 457/550/473 458/553/475 2484 | f 450/525/453 465/552/474 466/554/476 2485 | f 444/528/456 443/527/455 458/553/475 2486 | f 451/526/454 466/554/476 467/556/478 2487 | f 444/528/456 459/555/477 460/557/479 2488 | f 445/530/458 460/557/479 461/559/481 2489 | f 438/531/459 453/558/480 454/560/482 2490 | f 446/532/460 461/559/481 462/545/469 2491 | f 459/555/477 458/553/475 473/34/32 2492 | f 466/554/476 481/3/3 482/8/8 2493 | f 459/555/477 474/4/4 475/9/9 2494 | f 460/557/479 475/9/9 476/16/16 2495 | f 454/560/482 453/558/480 468/11/11 2496 | f 461/559/481 476/16/16 477/20/20 2497 | f 454/560/482 469/17/17 470/21/21 2498 | f 463/546/470 462/545/469 477/20/20 2499 | f 456/547/471 455/544/468 470/21/21 2500 | f 463/546/470 478/24/24 479/28/28 2501 | f 457/550/473 456/549/471 471/561/25 2502 | f 465/552/474 464/551/472 479/32/28 2503 | f 457/550/473 472/29/29 473/34/32 2504 | f 465/552/474 480/1/1 481/3/3 2505 | -------------------------------------------------------------------------------- /data/textures/165.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/photonstorm/phaser-graphics3d/2d296e12368fae6556b78463cfa67efe2a0c2588/data/textures/165.jpg -------------------------------------------------------------------------------- /data/textures/165_norm.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/photonstorm/phaser-graphics3d/2d296e12368fae6556b78463cfa67efe2a0c2588/data/textures/165_norm.jpg -------------------------------------------------------------------------------- /data/textures/Cube.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/photonstorm/phaser-graphics3d/2d296e12368fae6556b78463cfa67efe2a0c2588/data/textures/Cube.png -------------------------------------------------------------------------------- /data/textures/brick.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/photonstorm/phaser-graphics3d/2d296e12368fae6556b78463cfa67efe2a0c2588/data/textures/brick.jpg -------------------------------------------------------------------------------- /data/textures/brick_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/photonstorm/phaser-graphics3d/2d296e12368fae6556b78463cfa67efe2a0c2588/data/textures/brick_normal.png -------------------------------------------------------------------------------- /data/textures/rocks_01_dif.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/photonstorm/phaser-graphics3d/2d296e12368fae6556b78463cfa67efe2a0c2588/data/textures/rocks_01_dif.jpg -------------------------------------------------------------------------------- /data/textures/rocks_01_dif.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/photonstorm/phaser-graphics3d/2d296e12368fae6556b78463cfa67efe2a0c2588/data/textures/rocks_01_dif.png -------------------------------------------------------------------------------- /data/textures/rocks_01_nm.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/photonstorm/phaser-graphics3d/2d296e12368fae6556b78463cfa67efe2a0c2588/data/textures/rocks_01_nm.jpg -------------------------------------------------------------------------------- /data/textures/rocks_01_nm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/photonstorm/phaser-graphics3d/2d296e12368fae6556b78463cfa67efe2a0c2588/data/textures/rocks_01_nm.png -------------------------------------------------------------------------------- /data/textures/sao-sinon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/photonstorm/phaser-graphics3d/2d296e12368fae6556b78463cfa67efe2a0c2588/data/textures/sao-sinon.png -------------------------------------------------------------------------------- /gl-matrix.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @fileoverview gl-matrix - High performance matrix and vector operations 3 | * @author Brandon Jones 4 | * @author Colin MacKenzie IV 5 | * @version 2.4.0 6 | */ 7 | 8 | /* Copyright (c) 2015, Brandon Jones, Colin MacKenzie IV. 9 | 10 | Permission is hereby granted, free of charge, to any person obtaining a copy 11 | of this software and associated documentation files (the "Software"), to deal 12 | in the Software without restriction, including without limitation the rights 13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14 | copies of the Software, and to permit persons to whom the Software is 15 | furnished to do so, subject to the following conditions: 16 | 17 | The above copyright notice and this permission notice shall be included in 18 | all copies or substantial portions of the Software. 19 | 20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 26 | THE SOFTWARE. */ 27 | 28 | !function(t,n){if("object"==typeof exports&&"object"==typeof module)module.exports=n();else if("function"==typeof define&&define.amd)define([],n);else{var r=n();for(var a in r)("object"==typeof exports?exports:t)[a]=r[a]}}(this,function(){return function(t){function n(a){if(r[a])return r[a].exports;var e=r[a]={i:a,l:!1,exports:{}};return t[a].call(e.exports,e,e.exports,n),e.l=!0,e.exports}var r={};return n.m=t,n.c=r,n.d=function(t,r,a){n.o(t,r)||Object.defineProperty(t,r,{configurable:!1,enumerable:!0,get:a})},n.n=function(t){var r=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(r,"a",r),r},n.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},n.p="",n(n.s=4)}([function(t,n,r){"use strict";function a(t){n.ARRAY_TYPE=i=t}function e(t){return t*s}function u(t,n){return Math.abs(t-n)<=o*Math.max(1,Math.abs(t),Math.abs(n))}Object.defineProperty(n,"__esModule",{value:!0}),n.setMatrixArrayType=a,n.toRadian=e,n.equals=u;var o=n.EPSILON=1e-6,i=n.ARRAY_TYPE="undefined"!=typeof Float32Array?Float32Array:Array,s=(n.RANDOM=Math.random,Math.PI/180)},function(t,n,r){"use strict";function a(){var t=new g.ARRAY_TYPE(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t}function e(t,n){return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[4],t[4]=n[5],t[5]=n[6],t[6]=n[8],t[7]=n[9],t[8]=n[10],t}function u(t){var n=new g.ARRAY_TYPE(9);return n[0]=t[0],n[1]=t[1],n[2]=t[2],n[3]=t[3],n[4]=t[4],n[5]=t[5],n[6]=t[6],n[7]=t[7],n[8]=t[8],n}function o(t,n){return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],t}function i(t,n,r,a,e,u,o,i,s){var c=new g.ARRAY_TYPE(9);return c[0]=t,c[1]=n,c[2]=r,c[3]=a,c[4]=e,c[5]=u,c[6]=o,c[7]=i,c[8]=s,c}function s(t,n,r,a,e,u,o,i,s,c){return t[0]=n,t[1]=r,t[2]=a,t[3]=e,t[4]=u,t[5]=o,t[6]=i,t[7]=s,t[8]=c,t}function c(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t}function f(t,n){if(t===n){var r=n[1],a=n[2],e=n[5];t[1]=n[3],t[2]=n[6],t[3]=r,t[5]=n[7],t[6]=a,t[7]=e}else t[0]=n[0],t[1]=n[3],t[2]=n[6],t[3]=n[1],t[4]=n[4],t[5]=n[7],t[6]=n[2],t[7]=n[5],t[8]=n[8];return t}function M(t,n){var r=n[0],a=n[1],e=n[2],u=n[3],o=n[4],i=n[5],s=n[6],c=n[7],f=n[8],M=f*o-i*c,h=-f*u+i*s,l=c*u-o*s,v=r*M+a*h+e*l;return v?(v=1/v,t[0]=M*v,t[1]=(-f*a+e*c)*v,t[2]=(i*a-e*o)*v,t[3]=h*v,t[4]=(f*r-e*s)*v,t[5]=(-i*r+e*u)*v,t[6]=l*v,t[7]=(-c*r+a*s)*v,t[8]=(o*r-a*u)*v,t):null}function h(t,n){var r=n[0],a=n[1],e=n[2],u=n[3],o=n[4],i=n[5],s=n[6],c=n[7],f=n[8];return t[0]=o*f-i*c,t[1]=e*c-a*f,t[2]=a*i-e*o,t[3]=i*s-u*f,t[4]=r*f-e*s,t[5]=e*u-r*i,t[6]=u*c-o*s,t[7]=a*s-r*c,t[8]=r*o-a*u,t}function l(t){var n=t[0],r=t[1],a=t[2],e=t[3],u=t[4],o=t[5],i=t[6],s=t[7],c=t[8];return n*(c*u-o*s)+r*(-c*e+o*i)+a*(s*e-u*i)}function v(t,n,r){var a=n[0],e=n[1],u=n[2],o=n[3],i=n[4],s=n[5],c=n[6],f=n[7],M=n[8],h=r[0],l=r[1],v=r[2],d=r[3],b=r[4],m=r[5],p=r[6],P=r[7],E=r[8];return t[0]=h*a+l*o+v*c,t[1]=h*e+l*i+v*f,t[2]=h*u+l*s+v*M,t[3]=d*a+b*o+m*c,t[4]=d*e+b*i+m*f,t[5]=d*u+b*s+m*M,t[6]=p*a+P*o+E*c,t[7]=p*e+P*i+E*f,t[8]=p*u+P*s+E*M,t}function d(t,n,r){var a=n[0],e=n[1],u=n[2],o=n[3],i=n[4],s=n[5],c=n[6],f=n[7],M=n[8],h=r[0],l=r[1];return t[0]=a,t[1]=e,t[2]=u,t[3]=o,t[4]=i,t[5]=s,t[6]=h*a+l*o+c,t[7]=h*e+l*i+f,t[8]=h*u+l*s+M,t}function b(t,n,r){var a=n[0],e=n[1],u=n[2],o=n[3],i=n[4],s=n[5],c=n[6],f=n[7],M=n[8],h=Math.sin(r),l=Math.cos(r);return t[0]=l*a+h*o,t[1]=l*e+h*i,t[2]=l*u+h*s,t[3]=l*o-h*a,t[4]=l*i-h*e,t[5]=l*s-h*u,t[6]=c,t[7]=f,t[8]=M,t}function m(t,n,r){var a=r[0],e=r[1];return t[0]=a*n[0],t[1]=a*n[1],t[2]=a*n[2],t[3]=e*n[3],t[4]=e*n[4],t[5]=e*n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],t}function p(t,n){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=n[0],t[7]=n[1],t[8]=1,t}function P(t,n){var r=Math.sin(n),a=Math.cos(n);return t[0]=a,t[1]=r,t[2]=0,t[3]=-r,t[4]=a,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t}function E(t,n){return t[0]=n[0],t[1]=0,t[2]=0,t[3]=0,t[4]=n[1],t[5]=0,t[6]=0,t[7]=0,t[8]=1,t}function O(t,n){return t[0]=n[0],t[1]=n[1],t[2]=0,t[3]=n[2],t[4]=n[3],t[5]=0,t[6]=n[4],t[7]=n[5],t[8]=1,t}function x(t,n){var r=n[0],a=n[1],e=n[2],u=n[3],o=r+r,i=a+a,s=e+e,c=r*o,f=a*o,M=a*i,h=e*o,l=e*i,v=e*s,d=u*o,b=u*i,m=u*s;return t[0]=1-M-v,t[3]=f-m,t[6]=h+b,t[1]=f+m,t[4]=1-c-v,t[7]=l-d,t[2]=h-b,t[5]=l+d,t[8]=1-c-M,t}function A(t,n){var r=n[0],a=n[1],e=n[2],u=n[3],o=n[4],i=n[5],s=n[6],c=n[7],f=n[8],M=n[9],h=n[10],l=n[11],v=n[12],d=n[13],b=n[14],m=n[15],p=r*i-a*o,P=r*s-e*o,E=r*c-u*o,O=a*s-e*i,x=a*c-u*i,A=e*c-u*s,q=f*d-M*v,y=f*b-h*v,w=f*m-l*v,R=M*b-h*d,L=M*m-l*d,S=h*m-l*b,_=p*S-P*L+E*R+O*w-x*y+A*q;return _?(_=1/_,t[0]=(i*S-s*L+c*R)*_,t[1]=(s*w-o*S-c*y)*_,t[2]=(o*L-i*w+c*q)*_,t[3]=(e*L-a*S-u*R)*_,t[4]=(r*S-e*w+u*y)*_,t[5]=(a*w-r*L-u*q)*_,t[6]=(d*A-b*x+m*O)*_,t[7]=(b*E-v*A-m*P)*_,t[8]=(v*x-d*E+m*p)*_,t):null}function q(t,n,r){return t[0]=2/n,t[1]=0,t[2]=0,t[3]=0,t[4]=-2/r,t[5]=0,t[6]=-1,t[7]=1,t[8]=1,t}function y(t){return"mat3("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+", "+t[4]+", "+t[5]+", "+t[6]+", "+t[7]+", "+t[8]+")"}function w(t){return Math.sqrt(Math.pow(t[0],2)+Math.pow(t[1],2)+Math.pow(t[2],2)+Math.pow(t[3],2)+Math.pow(t[4],2)+Math.pow(t[5],2)+Math.pow(t[6],2)+Math.pow(t[7],2)+Math.pow(t[8],2))}function R(t,n,r){return t[0]=n[0]+r[0],t[1]=n[1]+r[1],t[2]=n[2]+r[2],t[3]=n[3]+r[3],t[4]=n[4]+r[4],t[5]=n[5]+r[5],t[6]=n[6]+r[6],t[7]=n[7]+r[7],t[8]=n[8]+r[8],t}function L(t,n,r){return t[0]=n[0]-r[0],t[1]=n[1]-r[1],t[2]=n[2]-r[2],t[3]=n[3]-r[3],t[4]=n[4]-r[4],t[5]=n[5]-r[5],t[6]=n[6]-r[6],t[7]=n[7]-r[7],t[8]=n[8]-r[8],t}function S(t,n,r){return t[0]=n[0]*r,t[1]=n[1]*r,t[2]=n[2]*r,t[3]=n[3]*r,t[4]=n[4]*r,t[5]=n[5]*r,t[6]=n[6]*r,t[7]=n[7]*r,t[8]=n[8]*r,t}function _(t,n,r,a){return t[0]=n[0]+r[0]*a,t[1]=n[1]+r[1]*a,t[2]=n[2]+r[2]*a,t[3]=n[3]+r[3]*a,t[4]=n[4]+r[4]*a,t[5]=n[5]+r[5]*a,t[6]=n[6]+r[6]*a,t[7]=n[7]+r[7]*a,t[8]=n[8]+r[8]*a,t}function I(t,n){return t[0]===n[0]&&t[1]===n[1]&&t[2]===n[2]&&t[3]===n[3]&&t[4]===n[4]&&t[5]===n[5]&&t[6]===n[6]&&t[7]===n[7]&&t[8]===n[8]}function N(t,n){var r=t[0],a=t[1],e=t[2],u=t[3],o=t[4],i=t[5],s=t[6],c=t[7],f=t[8],M=n[0],h=n[1],l=n[2],v=n[3],d=n[4],b=n[5],m=n[6],p=n[7],P=n[8];return Math.abs(r-M)<=g.EPSILON*Math.max(1,Math.abs(r),Math.abs(M))&&Math.abs(a-h)<=g.EPSILON*Math.max(1,Math.abs(a),Math.abs(h))&&Math.abs(e-l)<=g.EPSILON*Math.max(1,Math.abs(e),Math.abs(l))&&Math.abs(u-v)<=g.EPSILON*Math.max(1,Math.abs(u),Math.abs(v))&&Math.abs(o-d)<=g.EPSILON*Math.max(1,Math.abs(o),Math.abs(d))&&Math.abs(i-b)<=g.EPSILON*Math.max(1,Math.abs(i),Math.abs(b))&&Math.abs(s-m)<=g.EPSILON*Math.max(1,Math.abs(s),Math.abs(m))&&Math.abs(c-p)<=g.EPSILON*Math.max(1,Math.abs(c),Math.abs(p))&&Math.abs(f-P)<=g.EPSILON*Math.max(1,Math.abs(f),Math.abs(P))}Object.defineProperty(n,"__esModule",{value:!0}),n.sub=n.mul=void 0,n.create=a,n.fromMat4=e,n.clone=u,n.copy=o,n.fromValues=i,n.set=s,n.identity=c,n.transpose=f,n.invert=M,n.adjoint=h,n.determinant=l,n.multiply=v,n.translate=d,n.rotate=b,n.scale=m,n.fromTranslation=p,n.fromRotation=P,n.fromScaling=E,n.fromMat2d=O,n.fromQuat=x,n.normalFromMat4=A,n.projection=q,n.str=y,n.frob=w,n.add=R,n.subtract=L,n.multiplyScalar=S,n.multiplyScalarAndAdd=_,n.exactEquals=I,n.equals=N;var Y=r(0),g=function(t){if(t&&t.__esModule)return t;var n={};if(null!=t)for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r]);return n.default=t,n}(Y);n.mul=v,n.sub=L},function(t,n,r){"use strict";function a(){var t=new Z.ARRAY_TYPE(3);return t[0]=0,t[1]=0,t[2]=0,t}function e(t){var n=new Z.ARRAY_TYPE(3);return n[0]=t[0],n[1]=t[1],n[2]=t[2],n}function u(t){var n=t[0],r=t[1],a=t[2];return Math.sqrt(n*n+r*r+a*a)}function o(t,n,r){var a=new Z.ARRAY_TYPE(3);return a[0]=t,a[1]=n,a[2]=r,a}function i(t,n){return t[0]=n[0],t[1]=n[1],t[2]=n[2],t}function s(t,n,r,a){return t[0]=n,t[1]=r,t[2]=a,t}function c(t,n,r){return t[0]=n[0]+r[0],t[1]=n[1]+r[1],t[2]=n[2]+r[2],t}function f(t,n,r){return t[0]=n[0]-r[0],t[1]=n[1]-r[1],t[2]=n[2]-r[2],t}function M(t,n,r){return t[0]=n[0]*r[0],t[1]=n[1]*r[1],t[2]=n[2]*r[2],t}function h(t,n,r){return t[0]=n[0]/r[0],t[1]=n[1]/r[1],t[2]=n[2]/r[2],t}function l(t,n){return t[0]=Math.ceil(n[0]),t[1]=Math.ceil(n[1]),t[2]=Math.ceil(n[2]),t}function v(t,n){return t[0]=Math.floor(n[0]),t[1]=Math.floor(n[1]),t[2]=Math.floor(n[2]),t}function d(t,n,r){return t[0]=Math.min(n[0],r[0]),t[1]=Math.min(n[1],r[1]),t[2]=Math.min(n[2],r[2]),t}function b(t,n,r){return t[0]=Math.max(n[0],r[0]),t[1]=Math.max(n[1],r[1]),t[2]=Math.max(n[2],r[2]),t}function m(t,n){return t[0]=Math.round(n[0]),t[1]=Math.round(n[1]),t[2]=Math.round(n[2]),t}function p(t,n,r){return t[0]=n[0]*r,t[1]=n[1]*r,t[2]=n[2]*r,t}function P(t,n,r,a){return t[0]=n[0]+r[0]*a,t[1]=n[1]+r[1]*a,t[2]=n[2]+r[2]*a,t}function E(t,n){var r=n[0]-t[0],a=n[1]-t[1],e=n[2]-t[2];return Math.sqrt(r*r+a*a+e*e)}function O(t,n){var r=n[0]-t[0],a=n[1]-t[1],e=n[2]-t[2];return r*r+a*a+e*e}function x(t){var n=t[0],r=t[1],a=t[2];return n*n+r*r+a*a}function A(t,n){return t[0]=-n[0],t[1]=-n[1],t[2]=-n[2],t}function q(t,n){return t[0]=1/n[0],t[1]=1/n[1],t[2]=1/n[2],t}function y(t,n){var r=n[0],a=n[1],e=n[2],u=r*r+a*a+e*e;return u>0&&(u=1/Math.sqrt(u),t[0]=n[0]*u,t[1]=n[1]*u,t[2]=n[2]*u),t}function w(t,n){return t[0]*n[0]+t[1]*n[1]+t[2]*n[2]}function R(t,n,r){var a=n[0],e=n[1],u=n[2],o=r[0],i=r[1],s=r[2];return t[0]=e*s-u*i,t[1]=u*o-a*s,t[2]=a*i-e*o,t}function L(t,n,r,a){var e=n[0],u=n[1],o=n[2];return t[0]=e+a*(r[0]-e),t[1]=u+a*(r[1]-u),t[2]=o+a*(r[2]-o),t}function S(t,n,r,a,e,u){var o=u*u,i=o*(2*u-3)+1,s=o*(u-2)+u,c=o*(u-1),f=o*(3-2*u);return t[0]=n[0]*i+r[0]*s+a[0]*c+e[0]*f,t[1]=n[1]*i+r[1]*s+a[1]*c+e[1]*f,t[2]=n[2]*i+r[2]*s+a[2]*c+e[2]*f,t}function _(t,n,r,a,e,u){var o=1-u,i=o*o,s=u*u,c=i*o,f=3*u*i,M=3*s*o,h=s*u;return t[0]=n[0]*c+r[0]*f+a[0]*M+e[0]*h,t[1]=n[1]*c+r[1]*f+a[1]*M+e[1]*h,t[2]=n[2]*c+r[2]*f+a[2]*M+e[2]*h,t}function I(t,n){n=n||1;var r=2*Z.RANDOM()*Math.PI,a=2*Z.RANDOM()-1,e=Math.sqrt(1-a*a)*n;return t[0]=Math.cos(r)*e,t[1]=Math.sin(r)*e,t[2]=a*n,t}function N(t,n,r){var a=n[0],e=n[1],u=n[2],o=r[3]*a+r[7]*e+r[11]*u+r[15];return o=o||1,t[0]=(r[0]*a+r[4]*e+r[8]*u+r[12])/o,t[1]=(r[1]*a+r[5]*e+r[9]*u+r[13])/o,t[2]=(r[2]*a+r[6]*e+r[10]*u+r[14])/o,t}function Y(t,n,r){var a=n[0],e=n[1],u=n[2];return t[0]=a*r[0]+e*r[3]+u*r[6],t[1]=a*r[1]+e*r[4]+u*r[7],t[2]=a*r[2]+e*r[5]+u*r[8],t}function g(t,n,r){var a=n[0],e=n[1],u=n[2],o=r[0],i=r[1],s=r[2],c=r[3],f=c*a+i*u-s*e,M=c*e+s*a-o*u,h=c*u+o*e-i*a,l=-o*a-i*e-s*u;return t[0]=f*c+l*-o+M*-s-h*-i,t[1]=M*c+l*-i+h*-o-f*-s,t[2]=h*c+l*-s+f*-i-M*-o,t}function T(t,n,r,a){var e=[],u=[];return e[0]=n[0]-r[0],e[1]=n[1]-r[1],e[2]=n[2]-r[2],u[0]=e[0],u[1]=e[1]*Math.cos(a)-e[2]*Math.sin(a),u[2]=e[1]*Math.sin(a)+e[2]*Math.cos(a),t[0]=u[0]+r[0],t[1]=u[1]+r[1],t[2]=u[2]+r[2],t}function j(t,n,r,a){var e=[],u=[];return e[0]=n[0]-r[0],e[1]=n[1]-r[1],e[2]=n[2]-r[2],u[0]=e[2]*Math.sin(a)+e[0]*Math.cos(a),u[1]=e[1],u[2]=e[2]*Math.cos(a)-e[0]*Math.sin(a),t[0]=u[0]+r[0],t[1]=u[1]+r[1],t[2]=u[2]+r[2],t}function D(t,n,r,a){var e=[],u=[];return e[0]=n[0]-r[0],e[1]=n[1]-r[1],e[2]=n[2]-r[2],u[0]=e[0]*Math.cos(a)-e[1]*Math.sin(a),u[1]=e[0]*Math.sin(a)+e[1]*Math.cos(a),u[2]=e[2],t[0]=u[0]+r[0],t[1]=u[1]+r[1],t[2]=u[2]+r[2],t}function V(t,n){var r=o(t[0],t[1],t[2]),a=o(n[0],n[1],n[2]);y(r,r),y(a,a);var e=w(r,a);return e>1?0:e<-1?Math.PI:Math.acos(e)}function z(t){return"vec3("+t[0]+", "+t[1]+", "+t[2]+")"}function F(t,n){return t[0]===n[0]&&t[1]===n[1]&&t[2]===n[2]}function Q(t,n){var r=t[0],a=t[1],e=t[2],u=n[0],o=n[1],i=n[2];return Math.abs(r-u)<=Z.EPSILON*Math.max(1,Math.abs(r),Math.abs(u))&&Math.abs(a-o)<=Z.EPSILON*Math.max(1,Math.abs(a),Math.abs(o))&&Math.abs(e-i)<=Z.EPSILON*Math.max(1,Math.abs(e),Math.abs(i))}Object.defineProperty(n,"__esModule",{value:!0}),n.forEach=n.sqrLen=n.len=n.sqrDist=n.dist=n.div=n.mul=n.sub=void 0,n.create=a,n.clone=e,n.length=u,n.fromValues=o,n.copy=i,n.set=s,n.add=c,n.subtract=f,n.multiply=M,n.divide=h,n.ceil=l,n.floor=v,n.min=d,n.max=b,n.round=m,n.scale=p,n.scaleAndAdd=P,n.distance=E,n.squaredDistance=O,n.squaredLength=x,n.negate=A,n.inverse=q,n.normalize=y,n.dot=w,n.cross=R,n.lerp=L,n.hermite=S,n.bezier=_,n.random=I,n.transformMat4=N,n.transformMat3=Y,n.transformQuat=g,n.rotateX=T,n.rotateY=j,n.rotateZ=D,n.angle=V,n.str=z,n.exactEquals=F,n.equals=Q;var X=r(0),Z=function(t){if(t&&t.__esModule)return t;var n={};if(null!=t)for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r]);return n.default=t,n}(X);n.sub=f,n.mul=M,n.div=h,n.dist=E,n.sqrDist=O,n.len=u,n.sqrLen=x,n.forEach=function(){var t=a();return function(n,r,a,e,u,o){var i=void 0,s=void 0;for(r||(r=3),a||(a=0),s=e?Math.min(e*r+a,n.length):n.length,i=a;i0&&(o=1/Math.sqrt(o),t[0]=r*o,t[1]=a*o,t[2]=e*o,t[3]=u*o),t}function w(t,n){return t[0]*n[0]+t[1]*n[1]+t[2]*n[2]+t[3]*n[3]}function R(t,n,r,a){var e=n[0],u=n[1],o=n[2],i=n[3];return t[0]=e+a*(r[0]-e),t[1]=u+a*(r[1]-u),t[2]=o+a*(r[2]-o),t[3]=i+a*(r[3]-i),t}function L(t,n){return n=n||1,t[0]=T.RANDOM(),t[1]=T.RANDOM(),t[2]=T.RANDOM(),t[3]=T.RANDOM(),y(t,t),m(t,t,n),t}function S(t,n,r){var a=n[0],e=n[1],u=n[2],o=n[3];return t[0]=r[0]*a+r[4]*e+r[8]*u+r[12]*o,t[1]=r[1]*a+r[5]*e+r[9]*u+r[13]*o,t[2]=r[2]*a+r[6]*e+r[10]*u+r[14]*o,t[3]=r[3]*a+r[7]*e+r[11]*u+r[15]*o,t}function _(t,n,r){var a=n[0],e=n[1],u=n[2],o=r[0],i=r[1],s=r[2],c=r[3],f=c*a+i*u-s*e,M=c*e+s*a-o*u,h=c*u+o*e-i*a,l=-o*a-i*e-s*u;return t[0]=f*c+l*-o+M*-s-h*-i,t[1]=M*c+l*-i+h*-o-f*-s,t[2]=h*c+l*-s+f*-i-M*-o,t[3]=n[3],t}function I(t){return"vec4("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+")"}function N(t,n){return t[0]===n[0]&&t[1]===n[1]&&t[2]===n[2]&&t[3]===n[3]}function Y(t,n){var r=t[0],a=t[1],e=t[2],u=t[3],o=n[0],i=n[1],s=n[2],c=n[3];return Math.abs(r-o)<=T.EPSILON*Math.max(1,Math.abs(r),Math.abs(o))&&Math.abs(a-i)<=T.EPSILON*Math.max(1,Math.abs(a),Math.abs(i))&&Math.abs(e-s)<=T.EPSILON*Math.max(1,Math.abs(e),Math.abs(s))&&Math.abs(u-c)<=T.EPSILON*Math.max(1,Math.abs(u),Math.abs(c))}Object.defineProperty(n,"__esModule",{value:!0}),n.forEach=n.sqrLen=n.len=n.sqrDist=n.dist=n.div=n.mul=n.sub=void 0,n.create=a,n.clone=e,n.fromValues=u,n.copy=o,n.set=i,n.add=s,n.subtract=c,n.multiply=f,n.divide=M,n.ceil=h,n.floor=l,n.min=v,n.max=d,n.round=b,n.scale=m,n.scaleAndAdd=p,n.distance=P,n.squaredDistance=E,n.length=O,n.squaredLength=x,n.negate=A,n.inverse=q,n.normalize=y,n.dot=w,n.lerp=R,n.random=L,n.transformMat4=S,n.transformQuat=_,n.str=I,n.exactEquals=N,n.equals=Y;var g=r(0),T=function(t){if(t&&t.__esModule)return t;var n={};if(null!=t)for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r]);return n.default=t,n}(g);n.sub=c,n.mul=f,n.div=M,n.dist=P,n.sqrDist=E,n.len=O,n.sqrLen=x,n.forEach=function(){var t=a();return function(n,r,a,e,u,o){var i=void 0,s=void 0;for(r||(r=4),a||(a=0),s=e?Math.min(e*r+a,n.length):n.length,i=a;i0?(a=2*Math.sqrt(r+1),t[3]=.25*a,t[0]=(n[6]-n[9])/a,t[1]=(n[8]-n[2])/a,t[2]=(n[1]-n[4])/a):n[0]>n[5]&n[0]>n[10]?(a=2*Math.sqrt(1+n[0]-n[5]-n[10]),t[3]=(n[6]-n[9])/a,t[0]=.25*a,t[1]=(n[1]+n[4])/a,t[2]=(n[8]+n[2])/a):n[5]>n[10]?(a=2*Math.sqrt(1+n[5]-n[0]-n[10]),t[3]=(n[8]-n[2])/a,t[0]=(n[1]+n[4])/a,t[1]=.25*a,t[2]=(n[6]+n[9])/a):(a=2*Math.sqrt(1+n[10]-n[0]-n[5]),t[3]=(n[1]-n[4])/a,t[0]=(n[8]+n[2])/a,t[1]=(n[6]+n[9])/a,t[2]=.25*a),t}function _(t,n,r,a){var e=n[0],u=n[1],o=n[2],i=n[3],s=e+e,c=u+u,f=o+o,M=e*s,h=e*c,l=e*f,v=u*c,d=u*f,b=o*f,m=i*s,p=i*c,P=i*f,E=a[0],O=a[1],x=a[2];return t[0]=(1-(v+b))*E,t[1]=(h+P)*E,t[2]=(l-p)*E,t[3]=0,t[4]=(h-P)*O,t[5]=(1-(M+b))*O,t[6]=(d+m)*O,t[7]=0,t[8]=(l+p)*x,t[9]=(d-m)*x,t[10]=(1-(M+v))*x,t[11]=0,t[12]=r[0],t[13]=r[1],t[14]=r[2],t[15]=1,t}function I(t,n,r,a,e){var u=n[0],o=n[1],i=n[2],s=n[3],c=u+u,f=o+o,M=i+i,h=u*c,l=u*f,v=u*M,d=o*f,b=o*M,m=i*M,p=s*c,P=s*f,E=s*M,O=a[0],x=a[1],A=a[2],q=e[0],y=e[1],w=e[2];return t[0]=(1-(d+m))*O,t[1]=(l+E)*O,t[2]=(v-P)*O,t[3]=0,t[4]=(l-E)*x,t[5]=(1-(h+m))*x,t[6]=(b+p)*x,t[7]=0,t[8]=(v+P)*A,t[9]=(b-p)*A,t[10]=(1-(h+d))*A,t[11]=0,t[12]=r[0]+q-(t[0]*q+t[4]*y+t[8]*w),t[13]=r[1]+y-(t[1]*q+t[5]*y+t[9]*w),t[14]=r[2]+w-(t[2]*q+t[6]*y+t[10]*w),t[15]=1,t}function N(t,n){var r=n[0],a=n[1],e=n[2],u=n[3],o=r+r,i=a+a,s=e+e,c=r*o,f=a*o,M=a*i,h=e*o,l=e*i,v=e*s,d=u*o,b=u*i,m=u*s;return t[0]=1-M-v,t[1]=f+m,t[2]=h-b,t[3]=0,t[4]=f-m,t[5]=1-c-v,t[6]=l+d,t[7]=0,t[8]=h+b,t[9]=l-d,t[10]=1-c-M,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function Y(t,n,r,a,e,u,o){var i=1/(r-n),s=1/(e-a),c=1/(u-o);return t[0]=2*u*i,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=2*u*s,t[6]=0,t[7]=0,t[8]=(r+n)*i,t[9]=(e+a)*s,t[10]=(o+u)*c,t[11]=-1,t[12]=0,t[13]=0,t[14]=o*u*2*c,t[15]=0,t}function g(t,n,r,a,e){var u=1/Math.tan(n/2),o=1/(a-e);return t[0]=u/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=u,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=(e+a)*o,t[11]=-1,t[12]=0,t[13]=0,t[14]=2*e*a*o,t[15]=0,t}function T(t,n,r,a){var e=Math.tan(n.upDegrees*Math.PI/180),u=Math.tan(n.downDegrees*Math.PI/180),o=Math.tan(n.leftDegrees*Math.PI/180),i=Math.tan(n.rightDegrees*Math.PI/180),s=2/(o+i),c=2/(e+u);return t[0]=s,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=c,t[6]=0,t[7]=0,t[8]=-(o-i)*s*.5,t[9]=(e-u)*c*.5,t[10]=a/(r-a),t[11]=-1,t[12]=0,t[13]=0,t[14]=a*r/(r-a),t[15]=0,t}function j(t,n,r,a,e,u,o){var i=1/(n-r),s=1/(a-e),c=1/(u-o);return t[0]=-2*i,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*s,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*c,t[11]=0,t[12]=(n+r)*i,t[13]=(e+a)*s,t[14]=(o+u)*c,t[15]=1,t}function D(t,n,r,a){var e=void 0,u=void 0,o=void 0,i=void 0,s=void 0,c=void 0,f=void 0,M=void 0,h=void 0,l=void 0,v=n[0],d=n[1],b=n[2],m=a[0],p=a[1],P=a[2],E=r[0],O=r[1],x=r[2];return Math.abs(v-E)0&&(l=1/Math.sqrt(l),f*=l,M*=l,h*=l);var v=s*h-c*M,d=c*f-i*h,b=i*M-s*f;return t[0]=v,t[1]=d,t[2]=b,t[3]=0,t[4]=M*b-h*d,t[5]=h*v-f*b,t[6]=f*d-M*v,t[7]=0,t[8]=f,t[9]=M,t[10]=h,t[11]=0,t[12]=e,t[13]=u,t[14]=o,t[15]=1,t}function z(t){return"mat4("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+", "+t[4]+", "+t[5]+", "+t[6]+", "+t[7]+", "+t[8]+", "+t[9]+", "+t[10]+", "+t[11]+", "+t[12]+", "+t[13]+", "+t[14]+", "+t[15]+")"}function F(t){return Math.sqrt(Math.pow(t[0],2)+Math.pow(t[1],2)+Math.pow(t[2],2)+Math.pow(t[3],2)+Math.pow(t[4],2)+Math.pow(t[5],2)+Math.pow(t[6],2)+Math.pow(t[7],2)+Math.pow(t[8],2)+Math.pow(t[9],2)+Math.pow(t[10],2)+Math.pow(t[11],2)+Math.pow(t[12],2)+Math.pow(t[13],2)+Math.pow(t[14],2)+Math.pow(t[15],2))}function Q(t,n,r){return t[0]=n[0]+r[0],t[1]=n[1]+r[1],t[2]=n[2]+r[2],t[3]=n[3]+r[3],t[4]=n[4]+r[4],t[5]=n[5]+r[5],t[6]=n[6]+r[6],t[7]=n[7]+r[7],t[8]=n[8]+r[8],t[9]=n[9]+r[9],t[10]=n[10]+r[10],t[11]=n[11]+r[11],t[12]=n[12]+r[12],t[13]=n[13]+r[13],t[14]=n[14]+r[14],t[15]=n[15]+r[15],t}function X(t,n,r){return t[0]=n[0]-r[0],t[1]=n[1]-r[1],t[2]=n[2]-r[2],t[3]=n[3]-r[3],t[4]=n[4]-r[4],t[5]=n[5]-r[5],t[6]=n[6]-r[6],t[7]=n[7]-r[7],t[8]=n[8]-r[8],t[9]=n[9]-r[9],t[10]=n[10]-r[10],t[11]=n[11]-r[11],t[12]=n[12]-r[12],t[13]=n[13]-r[13],t[14]=n[14]-r[14],t[15]=n[15]-r[15],t}function Z(t,n,r){return t[0]=n[0]*r,t[1]=n[1]*r,t[2]=n[2]*r,t[3]=n[3]*r,t[4]=n[4]*r,t[5]=n[5]*r,t[6]=n[6]*r,t[7]=n[7]*r,t[8]=n[8]*r,t[9]=n[9]*r,t[10]=n[10]*r,t[11]=n[11]*r,t[12]=n[12]*r,t[13]=n[13]*r,t[14]=n[14]*r,t[15]=n[15]*r,t}function k(t,n,r,a){return t[0]=n[0]+r[0]*a,t[1]=n[1]+r[1]*a,t[2]=n[2]+r[2]*a,t[3]=n[3]+r[3]*a,t[4]=n[4]+r[4]*a,t[5]=n[5]+r[5]*a,t[6]=n[6]+r[6]*a,t[7]=n[7]+r[7]*a,t[8]=n[8]+r[8]*a,t[9]=n[9]+r[9]*a,t[10]=n[10]+r[10]*a,t[11]=n[11]+r[11]*a,t[12]=n[12]+r[12]*a,t[13]=n[13]+r[13]*a,t[14]=n[14]+r[14]*a,t[15]=n[15]+r[15]*a,t}function U(t,n){return t[0]===n[0]&&t[1]===n[1]&&t[2]===n[2]&&t[3]===n[3]&&t[4]===n[4]&&t[5]===n[5]&&t[6]===n[6]&&t[7]===n[7]&&t[8]===n[8]&&t[9]===n[9]&&t[10]===n[10]&&t[11]===n[11]&&t[12]===n[12]&&t[13]===n[13]&&t[14]===n[14]&&t[15]===n[15]}function W(t,n){var r=t[0],a=t[1],e=t[2],u=t[3],o=t[4],i=t[5],s=t[6],c=t[7],f=t[8],M=t[9],h=t[10],l=t[11],v=t[12],d=t[13],b=t[14],m=t[15],p=n[0],P=n[1],E=n[2],O=n[3],x=n[4],A=n[5],q=n[6],y=n[7],w=n[8],R=n[9],L=n[10],S=n[11],_=n[12],I=n[13],N=n[14],Y=n[15];return Math.abs(r-p)<=C.EPSILON*Math.max(1,Math.abs(r),Math.abs(p))&&Math.abs(a-P)<=C.EPSILON*Math.max(1,Math.abs(a),Math.abs(P))&&Math.abs(e-E)<=C.EPSILON*Math.max(1,Math.abs(e),Math.abs(E))&&Math.abs(u-O)<=C.EPSILON*Math.max(1,Math.abs(u),Math.abs(O))&&Math.abs(o-x)<=C.EPSILON*Math.max(1,Math.abs(o),Math.abs(x))&&Math.abs(i-A)<=C.EPSILON*Math.max(1,Math.abs(i),Math.abs(A))&&Math.abs(s-q)<=C.EPSILON*Math.max(1,Math.abs(s),Math.abs(q))&&Math.abs(c-y)<=C.EPSILON*Math.max(1,Math.abs(c),Math.abs(y))&&Math.abs(f-w)<=C.EPSILON*Math.max(1,Math.abs(f),Math.abs(w))&&Math.abs(M-R)<=C.EPSILON*Math.max(1,Math.abs(M),Math.abs(R))&&Math.abs(h-L)<=C.EPSILON*Math.max(1,Math.abs(h),Math.abs(L))&&Math.abs(l-S)<=C.EPSILON*Math.max(1,Math.abs(l),Math.abs(S))&&Math.abs(v-_)<=C.EPSILON*Math.max(1,Math.abs(v),Math.abs(_))&&Math.abs(d-I)<=C.EPSILON*Math.max(1,Math.abs(d),Math.abs(I))&&Math.abs(b-N)<=C.EPSILON*Math.max(1,Math.abs(b),Math.abs(N))&&Math.abs(m-Y)<=C.EPSILON*Math.max(1,Math.abs(m),Math.abs(Y))}Object.defineProperty(n,"__esModule",{value:!0}),n.sub=n.mul=void 0,n.create=a,n.clone=e,n.copy=u,n.fromValues=o,n.set=i,n.identity=s,n.transpose=c,n.invert=f,n.adjoint=M,n.determinant=h,n.multiply=l,n.translate=v,n.scale=d,n.rotate=b,n.rotateX=m,n.rotateY=p,n.rotateZ=P,n.fromTranslation=E,n.fromScaling=O,n.fromRotation=x,n.fromXRotation=A,n.fromYRotation=q,n.fromZRotation=y,n.fromRotationTranslation=w,n.getTranslation=R,n.getScaling=L,n.getRotation=S,n.fromRotationTranslationScale=_,n.fromRotationTranslationScaleOrigin=I,n.fromQuat=N,n.frustum=Y,n.perspective=g,n.perspectiveFromFieldOfView=T,n.ortho=j,n.lookAt=D,n.targetTo=V,n.str=z,n.frob=F,n.add=Q,n.subtract=X,n.multiplyScalar=Z,n.multiplyScalarAndAdd=k,n.exactEquals=U,n.equals=W;var B=r(0),C=function(t){if(t&&t.__esModule)return t;var n={};if(null!=t)for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r]);return n.default=t,n}(B);n.mul=l,n.sub=X},function(t,n,r){"use strict";function a(t){if(t&&t.__esModule)return t;var n={};if(null!=t)for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r]);return n.default=t,n}function e(){var t=new E.ARRAY_TYPE(4);return t[0]=0,t[1]=0,t[2]=0,t[3]=1,t}function u(t){return t[0]=0,t[1]=0,t[2]=0,t[3]=1,t}function o(t,n,r){r*=.5;var a=Math.sin(r);return t[0]=a*n[0],t[1]=a*n[1],t[2]=a*n[2],t[3]=Math.cos(r),t}function i(t,n){var r=2*Math.acos(n[3]),a=Math.sin(r/2);return 0!=a?(t[0]=n[0]/a,t[1]=n[1]/a,t[2]=n[2]/a):(t[0]=1,t[1]=0,t[2]=0),r}function s(t,n,r){var a=n[0],e=n[1],u=n[2],o=n[3],i=r[0],s=r[1],c=r[2],f=r[3];return t[0]=a*f+o*i+e*c-u*s,t[1]=e*f+o*s+u*i-a*c,t[2]=u*f+o*c+a*s-e*i,t[3]=o*f-a*i-e*s-u*c,t}function c(t,n,r){r*=.5;var a=n[0],e=n[1],u=n[2],o=n[3],i=Math.sin(r),s=Math.cos(r);return t[0]=a*s+o*i,t[1]=e*s+u*i,t[2]=u*s-e*i,t[3]=o*s-a*i,t}function f(t,n,r){r*=.5;var a=n[0],e=n[1],u=n[2],o=n[3],i=Math.sin(r),s=Math.cos(r);return t[0]=a*s-u*i,t[1]=e*s+o*i,t[2]=u*s+a*i,t[3]=o*s-e*i,t}function M(t,n,r){r*=.5;var a=n[0],e=n[1],u=n[2],o=n[3],i=Math.sin(r),s=Math.cos(r);return t[0]=a*s+e*i,t[1]=e*s-a*i,t[2]=u*s+o*i,t[3]=o*s-u*i,t}function h(t,n){var r=n[0],a=n[1],e=n[2];return t[0]=r,t[1]=a,t[2]=e,t[3]=Math.sqrt(Math.abs(1-r*r-a*a-e*e)),t}function l(t,n,r,a){var e=n[0],u=n[1],o=n[2],i=n[3],s=r[0],c=r[1],f=r[2],M=r[3],h=void 0,l=void 0,v=void 0,d=void 0,b=void 0;return l=e*s+u*c+o*f+i*M,l<0&&(l=-l,s=-s,c=-c,f=-f,M=-M),1-l>1e-6?(h=Math.acos(l),v=Math.sin(h),d=Math.sin((1-a)*h)/v,b=Math.sin(a*h)/v):(d=1-a,b=a),t[0]=d*e+b*s,t[1]=d*u+b*c,t[2]=d*o+b*f,t[3]=d*i+b*M,t}function v(t,n){var r=n[0],a=n[1],e=n[2],u=n[3],o=r*r+a*a+e*e+u*u,i=o?1/o:0;return t[0]=-r*i,t[1]=-a*i,t[2]=-e*i,t[3]=u*i,t}function d(t,n){return t[0]=-n[0],t[1]=-n[1],t[2]=-n[2],t[3]=n[3],t}function b(t,n){var r=n[0]+n[4]+n[8],a=void 0;if(r>0)a=Math.sqrt(r+1),t[3]=.5*a,a=.5/a,t[0]=(n[5]-n[7])*a,t[1]=(n[6]-n[2])*a,t[2]=(n[1]-n[3])*a;else{var e=0;n[4]>n[0]&&(e=1),n[8]>n[3*e+e]&&(e=2);var u=(e+1)%3,o=(e+2)%3;a=Math.sqrt(n[3*e+e]-n[3*u+u]-n[3*o+o]+1),t[e]=.5*a,a=.5/a,t[3]=(n[3*u+o]-n[3*o+u])*a,t[u]=(n[3*u+e]+n[3*e+u])*a,t[o]=(n[3*o+e]+n[3*e+o])*a}return t}function m(t,n,r,a){var e=.5*Math.PI/180;n*=e,r*=e,a*=e;var u=Math.sin(n),o=Math.cos(n),i=Math.sin(r),s=Math.cos(r),c=Math.sin(a),f=Math.cos(a);return t[0]=u*s*f-o*i*c,t[1]=o*i*f+u*s*c,t[2]=o*s*c-u*i*f,t[3]=o*s*f+u*i*c,t}function p(t){return"quat("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+")"}Object.defineProperty(n,"__esModule",{value:!0}),n.setAxes=n.sqlerp=n.rotationTo=n.equals=n.exactEquals=n.normalize=n.sqrLen=n.squaredLength=n.len=n.length=n.lerp=n.dot=n.scale=n.mul=n.add=n.set=n.copy=n.fromValues=n.clone=void 0,n.create=e,n.identity=u,n.setAxisAngle=o,n.getAxisAngle=i,n.multiply=s,n.rotateX=c,n.rotateY=f,n.rotateZ=M,n.calculateW=h,n.slerp=l,n.invert=v,n.conjugate=d,n.fromMat3=b,n.fromEuler=m,n.str=p;var P=r(0),E=a(P),O=r(1),x=a(O),A=r(2),q=a(A),y=r(3),w=a(y),R=(n.clone=w.clone,n.fromValues=w.fromValues,n.copy=w.copy,n.set=w.set,n.add=w.add,n.mul=s,n.scale=w.scale,n.dot=w.dot,n.lerp=w.lerp,n.length=w.length),L=(n.len=R,n.squaredLength=w.squaredLength),S=(n.sqrLen=L,n.normalize=w.normalize);n.exactEquals=w.exactEquals,n.equals=w.equals,n.rotationTo=function(){var t=q.create(),n=q.fromValues(1,0,0),r=q.fromValues(0,1,0);return function(a,e,u){var i=q.dot(e,u);return i<-.999999?(q.cross(t,n,e),q.len(t)<1e-6&&q.cross(t,r,e),q.normalize(t,t),o(a,t,Math.PI),a):i>.999999?(a[0]=0,a[1]=0,a[2]=0,a[3]=1,a):(q.cross(t,e,u),a[0]=t[0],a[1]=t[1],a[2]=t[2],a[3]=1+i,S(a,a))}}(),n.sqlerp=function(){var t=e(),n=e();return function(r,a,e,u,o,i){return l(t,a,o,i),l(n,e,u,i),l(r,t,n,2*i*(1-i)),r}}(),n.setAxes=function(){var t=x.create();return function(n,r,a,e){return t[0]=a[0],t[3]=a[1],t[6]=a[2],t[1]=e[0],t[4]=e[1],t[7]=e[2],t[2]=-r[0],t[5]=-r[1],t[8]=-r[2],S(n,b(n,t))}}()},function(t,n,r){"use strict";function a(){var t=new V.ARRAY_TYPE(2);return t[0]=0,t[1]=0,t}function e(t){var n=new V.ARRAY_TYPE(2);return n[0]=t[0],n[1]=t[1],n}function u(t,n){var r=new V.ARRAY_TYPE(2);return r[0]=t,r[1]=n,r}function o(t,n){return t[0]=n[0],t[1]=n[1],t}function i(t,n,r){return t[0]=n,t[1]=r,t}function s(t,n,r){return t[0]=n[0]+r[0],t[1]=n[1]+r[1],t}function c(t,n,r){return t[0]=n[0]-r[0],t[1]=n[1]-r[1],t}function f(t,n,r){return t[0]=n[0]*r[0],t[1]=n[1]*r[1],t}function M(t,n,r){return t[0]=n[0]/r[0],t[1]=n[1]/r[1],t}function h(t,n){return t[0]=Math.ceil(n[0]),t[1]=Math.ceil(n[1]),t}function l(t,n){return t[0]=Math.floor(n[0]),t[1]=Math.floor(n[1]),t}function v(t,n,r){return t[0]=Math.min(n[0],r[0]),t[1]=Math.min(n[1],r[1]),t}function d(t,n,r){return t[0]=Math.max(n[0],r[0]),t[1]=Math.max(n[1],r[1]),t}function b(t,n){return t[0]=Math.round(n[0]),t[1]=Math.round(n[1]),t}function m(t,n,r){return t[0]=n[0]*r,t[1]=n[1]*r,t}function p(t,n,r,a){return t[0]=n[0]+r[0]*a,t[1]=n[1]+r[1]*a,t}function P(t,n){var r=n[0]-t[0],a=n[1]-t[1];return Math.sqrt(r*r+a*a)}function E(t,n){var r=n[0]-t[0],a=n[1]-t[1];return r*r+a*a}function O(t){var n=t[0],r=t[1];return Math.sqrt(n*n+r*r)}function x(t){var n=t[0],r=t[1];return n*n+r*r}function A(t,n){return t[0]=-n[0],t[1]=-n[1],t}function q(t,n){return t[0]=1/n[0],t[1]=1/n[1],t}function y(t,n){var r=n[0],a=n[1],e=r*r+a*a;return e>0&&(e=1/Math.sqrt(e),t[0]=n[0]*e,t[1]=n[1]*e),t}function w(t,n){return t[0]*n[0]+t[1]*n[1]}function R(t,n,r){var a=n[0]*r[1]-n[1]*r[0];return t[0]=t[1]=0,t[2]=a,t}function L(t,n,r,a){var e=n[0],u=n[1];return t[0]=e+a*(r[0]-e),t[1]=u+a*(r[1]-u),t}function S(t,n){n=n||1;var r=2*V.RANDOM()*Math.PI;return t[0]=Math.cos(r)*n,t[1]=Math.sin(r)*n,t}function _(t,n,r){var a=n[0],e=n[1];return t[0]=r[0]*a+r[2]*e,t[1]=r[1]*a+r[3]*e,t}function I(t,n,r){var a=n[0],e=n[1];return t[0]=r[0]*a+r[2]*e+r[4],t[1]=r[1]*a+r[3]*e+r[5],t}function N(t,n,r){var a=n[0],e=n[1];return t[0]=r[0]*a+r[3]*e+r[6],t[1]=r[1]*a+r[4]*e+r[7],t}function Y(t,n,r){var a=n[0],e=n[1];return t[0]=r[0]*a+r[4]*e+r[12],t[1]=r[1]*a+r[5]*e+r[13],t}function g(t){return"vec2("+t[0]+", "+t[1]+")"}function T(t,n){return t[0]===n[0]&&t[1]===n[1]}function j(t,n){var r=t[0],a=t[1],e=n[0],u=n[1];return Math.abs(r-e)<=V.EPSILON*Math.max(1,Math.abs(r),Math.abs(e))&&Math.abs(a-u)<=V.EPSILON*Math.max(1,Math.abs(a),Math.abs(u))}Object.defineProperty(n,"__esModule",{value:!0}),n.forEach=n.sqrLen=n.sqrDist=n.dist=n.div=n.mul=n.sub=n.len=void 0,n.create=a,n.clone=e,n.fromValues=u,n.copy=o,n.set=i,n.add=s,n.subtract=c,n.multiply=f,n.divide=M,n.ceil=h,n.floor=l,n.min=v,n.max=d,n.round=b,n.scale=m,n.scaleAndAdd=p,n.distance=P,n.squaredDistance=E,n.length=O,n.squaredLength=x,n.negate=A,n.inverse=q,n.normalize=y,n.dot=w,n.cross=R,n.lerp=L,n.random=S,n.transformMat2=_,n.transformMat2d=I,n.transformMat3=N,n.transformMat4=Y,n.str=g,n.exactEquals=T,n.equals=j;var D=r(0),V=function(t){if(t&&t.__esModule)return t;var n={};if(null!=t)for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r]);return n.default=t,n}(D);n.len=O,n.sub=c,n.mul=f,n.div=M,n.dist=P,n.sqrDist=E,n.sqrLen=x,n.forEach=function(){var t=a();return function(n,r,a,e,u,o){var i=void 0,s=void 0;for(r||(r=2),a||(a=0),s=e?Math.min(e*r+a,n.length):n.length,i=a;i 2 | 3 | 4 | Graphics3D Phaser V3 Prototype 5 | 20 | 21 | 22 |
0.00 ms
23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 73 | 74 | -------------------------------------------------------------------------------- /main.js: -------------------------------------------------------------------------------- 1 | var canvas, gl; 2 | 3 | function onComplete (meshData, texture0, texture1) 4 | { 5 | var step = 0.0; 6 | var lastTime = 0.0; 7 | var frameTimeOutput = document.getElementById('msg'); 8 | var renderer = new Graphics3DRenderer(gl); 9 | var scene = new Graphics3D(renderer); 10 | var data0 = scene.makeQuadGeometryBuffer(); 11 | var data1 = scene.makeGeometryBuffer(meshData.vertices, meshData.vertex_count); 12 | var cube0 = scene.makeStaticMesh(-2, 0, 0, data1, null); 13 | var cube1 = scene.makeStaticMesh(2, 0, 0, data1, texture0, texture1); 14 | var light0 = scene.makeStaticMesh(0, 0, 0, data0, null).setScale(0.05, 0.05, 0.05); 15 | var light1 = scene.makeStaticMesh(0, 0, 0, data0, null).setScale(0.05, 0.05, 0.05); 16 | 17 | scene.camera = new Camera3D(); 18 | scene.camera.setPerspective(Math.PI / 4.0, canvas.width / canvas.height, 0.1, 1000.0); 19 | scene.camera.lookAt(0, 0, -7, 0, 0, 0); 20 | scene.camera.setClearColor(0.15, 0.15, 0.25); 21 | scene.dirLight.active = true; 22 | scene.dirLight.setDirection(0, .5, -1); 23 | 24 | scene.pointLights[0].active = true; 25 | scene.pointLights[0].setPosition(0, -2, -1); 26 | scene.pointLights[0].setColor(1, 0, 1); 27 | 28 | scene.pointLights[1].active = true; 29 | scene.pointLights[1].setPosition(0, -2, -1); 30 | scene.pointLights[1].setColor(0, 1, 1); 31 | 32 | cube1.material = new Material3D(); 33 | cube1.material.setAmbient(0, 0, 0); 34 | cube1.material.setShininess(512); 35 | cube1.material.setSpecular(0.2, 0.2, 0.2); 36 | 37 | cube0.material = cube1.material; 38 | 39 | scene.add(cube0, cube1, light0, light1); 40 | 41 | window.ontouchend = function () 42 | { 43 | if (cube1.normal === null) 44 | { 45 | cube1.normal = texture1; 46 | } 47 | else 48 | { 49 | cube1.normal = null; 50 | } 51 | }; 52 | 53 | window.onkeyup = function (e) 54 | { 55 | if (e.code === 'Space') 56 | { 57 | if (cube1.normal === null) 58 | { 59 | cube1.normal = texture1; 60 | } 61 | else 62 | { 63 | cube1.normal = null; 64 | } 65 | } 66 | }; 67 | 68 | function renderScene(time) 69 | { 70 | lastTime = PrintFrameTime(frameTimeOutput, time, lastTime); 71 | 72 | scene.pointLights[0].setPosition(Math.sin(step) * 4, 0, Math.cos(step) * 4); 73 | scene.pointLights[1].setPosition(0, Math.sin(step * 2) * 3, Math.cos(step * 2) * 3); 74 | light0.setPosition(scene.pointLights[0].position[0], scene.pointLights[0].position[1], scene.pointLights[0].position[2]); 75 | light1.setPosition(scene.pointLights[1].position[0], scene.pointLights[1].position[1], scene.pointLights[1].position[2]); 76 | 77 | cube0.rotateY(0.01); 78 | cube1.rotateY(0.01); 79 | 80 | scene.render(); 81 | requestAnimationFrame(renderScene); 82 | step += 0.02; 83 | } 84 | 85 | renderScene(0); 86 | }; 87 | 88 | function PrintFrameTime(output, time, lastTime) 89 | { 90 | var delta = time - lastTime; 91 | output.innerHTML = delta.toFixed(2) + ' ms'; 92 | lastTime = time; 93 | return lastTime; 94 | } 95 | 96 | function loadFile(name, callback) 97 | { 98 | var xhr = new XMLHttpRequest(); 99 | xhr.onload = function () { 100 | if (xhr.status === 200) 101 | { 102 | callback(xhr.responseText); 103 | } 104 | }; 105 | xhr.open('GET', name, true); 106 | xhr.send(null); 107 | } 108 | 109 | function loadImageAsTexture(name, callback) 110 | { 111 | var image = new Image(); 112 | image.onload = function (evt) 113 | { 114 | callback(GLutils.createTexture(gl, evt.target)); 115 | }; 116 | image.src = name; 117 | } 118 | 119 | window.onload = function () 120 | { 121 | canvas = document.getElementById('canvas'); 122 | gl = canvas.getContext('webgl'); 123 | var _texture0, _texture1, _data; 124 | 125 | document.getElementById('msg').innerHTML = "Loading..."; 126 | 127 | loadFile('data/meshes/rock.obj', function (data) { 128 | _data = data; 129 | if (_texture0 && texture1 && _data) 130 | { 131 | onComplete(ParseOBJ(_data), _texture0, _texture1); 132 | } 133 | }); 134 | 135 | loadImageAsTexture('data/textures/rocks_01_dif.jpg', function (texture0) { 136 | _texture0 = texture0; 137 | if (_texture1 && _data) 138 | { 139 | onComplete(ParseOBJ(_data), _texture0, _texture1); 140 | } 141 | }); 142 | loadImageAsTexture('data/textures/rocks_01_nm.jpg', function (texture1) { 143 | _texture1 = texture1; 144 | if (_texture0 && _data) 145 | { 146 | onComplete(ParseOBJ(_data), _texture0, _texture1); 147 | } 148 | }); 149 | }; -------------------------------------------------------------------------------- /objpar.js: -------------------------------------------------------------------------------- 1 | var objpar = function (str) 2 | { 3 | let lines = str.split('\n'); 4 | let line_count = lines.length; 5 | let vertices = []; 6 | let normals = []; 7 | let texcoords = []; 8 | let faces = []; 9 | 10 | for (let index = 0; index < line_count; ++index) 11 | { 12 | let line = lines[index]; 13 | let c0 = line.charAt(0); 14 | let c1 = line.charAt(1); 15 | 16 | if (c0 === '#') 17 | { 18 | continue; 19 | } 20 | else if (c0 === 'v' && c1 === ' ') 21 | { 22 | let components = line.split(' '); 23 | for (let i = 1; i < components.length; ++i) 24 | { 25 | vertices.push(parseFloat(components[i])); 26 | } 27 | } 28 | else if (c0 === 'v' && c1 === 't') 29 | { 30 | let components = line.split(' '); 31 | for (let i = 1; i < components.length; ++i) 32 | { 33 | texcoords.push(parseFloat(components[i])); 34 | } 35 | } 36 | else if (c0 === 'v' && c1 === 'n') 37 | { 38 | let components = line.split(' '); 39 | for (let i = 1; i < components.length; ++i) 40 | { 41 | normals.push(parseFloat(components[i])); 42 | } 43 | } 44 | else if (c0 === 'f') 45 | { 46 | let components = line.split(' '); 47 | for (let i = 1; i < components.length; ++i) 48 | { 49 | let sub_components = components[i].split('/'); 50 | let indices = [0, 0, 0]; 51 | for (let j = 0; j < indices.length; ++j) 52 | { 53 | let num = parseInt(sub_components[j]); 54 | if (!isNaN(num)) 55 | { 56 | indices[j] = num; 57 | } 58 | } 59 | faces.push(indices); 60 | } 61 | } 62 | } 63 | 64 | return { 65 | vertices: vertices, 66 | normals: normals, 67 | texcoords: texcoords, 68 | faces: faces 69 | }; 70 | }; 71 | 72 | /* 73 | this is the order of the vertex output: 74 | 75 | struct Vertex { 76 | vec3 position; 77 | vec3 normal; // If it's provided 78 | vec2 texcoord; // If it's provided 79 | }; 80 | */ 81 | 82 | var objpar_to_mesh = function (obj) 83 | { 84 | let vertices = []; 85 | let indices = []; 86 | let offset_size = (obj.vertices.length > 0 ? 3 : 0) + (obj.normals.length > 0 ? 3 : 0) + (obj.texcoords.length > 0 ? 3 : 0); 87 | let stride = offset_size * Float32Array.BYTES_PER_ELEMENT; 88 | let texcoord = obj.texcoords.length > 0; 89 | let tangents = []; 90 | let bitangents = []; 91 | 92 | if (texcoord) 93 | { 94 | // Generate Tangent Data 95 | for (let index = 0; index < obj.faces.length; index += 3) 96 | { 97 | let face0 = obj.faces[index + 0]; 98 | let face1 = obj.faces[index + 1]; 99 | let face2 = obj.faces[index + 2]; 100 | let idx; 101 | let v0x, v0y, v0z, v1x, v1y, v1z, v2x, v2y, v2z; 102 | let t0x, t0y, t1x, t1y, t2x, t2y; 103 | let dtv0x, dtv0y, dtv0z; 104 | let dtv1x, dtv1y, dtv1z; 105 | let dtt0x, dtt0y; 106 | let dtt1x, dtt1y; 107 | let tanx, tany, tanz; 108 | let btanx, btany, btanz; 109 | let f; 110 | let vidx0, vidx1, vidx2; 111 | 112 | vidx0 = idx = (face0[0] - 1) * 3; 113 | v0x = obj.vertices[idx + 0]; 114 | v0y = obj.vertices[idx + 1]; 115 | v0z = obj.vertices[idx + 2]; 116 | 117 | vidx1 = idx = (face1[0] - 1) * 3; 118 | v1x = obj.vertices[idx + 0]; 119 | v1y = obj.vertices[idx + 1]; 120 | v1z = obj.vertices[idx + 2]; 121 | 122 | vidx2 = idx = (face2[0] - 1) * 3; 123 | v2x = obj.vertices[idx + 0]; 124 | v2y = obj.vertices[idx + 1]; 125 | v2z = obj.vertices[idx + 2]; 126 | 127 | idx = (face0[1] - 1) * 2; 128 | t0x = obj.texcoords[idx + 0]; 129 | t0y = obj.texcoords[idx + 1]; 130 | 131 | idx = (face1[1] - 1) * 2; 132 | t1x = obj.texcoords[idx + 0]; 133 | t1y = obj.texcoords[idx + 1]; 134 | 135 | idx = (face2[1] - 1) * 2; 136 | t2x = obj.texcoords[idx + 0]; 137 | t2y = obj.texcoords[idx + 1]; 138 | 139 | dtv0x = v1x - v0x; 140 | dtv0y = v1y - v0y; 141 | dtv0z = v1z - v0z; 142 | 143 | dtv1x = v2x - v0x; 144 | dtv1y = v2y - v0y; 145 | dtv1z = v2z - v0z; 146 | 147 | dtt0x = t1x - t0x; 148 | dtt0y = t1y - t0y; 149 | dtt1x = t2x - t0x; 150 | dtt1y = t2y - t0y; 151 | 152 | f = 1.0 / (dtt0x * dtt1y - dtt1x * dtt0y); 153 | 154 | tanx = f * (dtt1y * dtv0x - dtt0y * dtv1x); 155 | tany = f * (dtt1y * dtv0y - dtt0y * dtv1y); 156 | tanz = f * (dtt1y * dtv0z - dtt0y * dtv1z); 157 | 158 | btanx = f * (-dtt1x * dtv0x - dtt0x * dtv1x); 159 | btany = f * (-dtt1x * dtv0y - dtt0x * dtv1y); 160 | btanz = f * (-dtt1x * dtv0z - dtt0x * dtv1z); 161 | 162 | if (tangents[vidx0]) 163 | { 164 | tangents[vidx0][0] += tanx; 165 | tangents[vidx0][1] += tany; 166 | tangents[vidx0][2] += tanz; 167 | } 168 | else 169 | { 170 | tangents[vidx0] = [tanx, tany, tanz]; 171 | } 172 | 173 | if (tangents[vidx1]) 174 | { 175 | tangents[vidx1][0] += tanx; 176 | tangents[vidx1][1] += tany; 177 | tangents[vidx1][2] += tanz; 178 | } 179 | else 180 | { 181 | tangents[vidx1] = [tanx, tany, tanz]; 182 | } 183 | 184 | if (tangents[vidx2]) 185 | { 186 | tangents[vidx2][0] += tanx; 187 | tangents[vidx2][1] += tany; 188 | tangents[vidx2][2] += tanz; 189 | } 190 | else 191 | { 192 | tangents[vidx2] = [tanx, tany, tanz]; 193 | } 194 | } 195 | } 196 | 197 | for (let index = 0; index < obj.faces.length; index += 1) 198 | { 199 | let vidx = 0; 200 | let face = obj.faces[index]; 201 | 202 | if (obj.vertices.length > 0) 203 | { 204 | let idx = (face[0] - 1) * 3; 205 | vidx = idx; 206 | let x = obj.vertices[idx + 0]; 207 | let y = obj.vertices[idx + 1]; 208 | let z = obj.vertices[idx + 2]; 209 | if (x === undefined || y === undefined || z === undefined) 210 | debugger; 211 | vertices.push(x, y, z); 212 | } 213 | if (obj.normals.length > 0) 214 | { 215 | let idx = (face[2] - 1) * 3; 216 | let x = obj.normals[idx + 0]; 217 | let y = obj.normals[idx + 1]; 218 | let z = obj.normals[idx + 2]; 219 | if (x === undefined || y === undefined || z === undefined) 220 | debugger; 221 | vertices.push(x, y, z); 222 | } 223 | if (obj.texcoords.length > 0) 224 | { 225 | let idx = (face[1] - 1) * 2; 226 | let x = obj.texcoords[idx + 0]; 227 | let y = obj.texcoords[idx + 1]; 228 | if (x === undefined || y === undefined) 229 | debugger; 230 | vertices.push(x, y); 231 | 232 | // tangents 233 | vertices.push(tangents[vidx][0], tangents[vidx][1], tangents[vidx][2]); 234 | } 235 | } 236 | 237 | return { 238 | vertices: new Float32Array(vertices), 239 | vertex_count: obj.faces.length, 240 | texcoord: texcoord 241 | }; 242 | }; 243 | -------------------------------------------------------------------------------- /shaders/LitTextured.js: -------------------------------------------------------------------------------- 1 | var LitTextured = 2 | { 3 | vert: ` 4 | 5 | #define SHADER_NAME SHADER_LIT_TEXTURED_VERT 6 | 7 | precision lowp float; 8 | 9 | uniform mat4 uModelMatrix; 10 | uniform mat4 uInvModelMatrix; 11 | uniform mat4 uViewMatrix; 12 | uniform mat4 uProjectionMatrix; 13 | 14 | attribute vec3 inPosition; 15 | attribute vec3 inNormal; 16 | attribute vec2 inTexCoord; 17 | attribute vec3 inTangent; 18 | 19 | varying vec3 outEyePosition; 20 | varying vec3 outNormal; 21 | varying vec2 outTexCoord; 22 | varying vec3 outTangent; 23 | 24 | void main() 25 | { 26 | 27 | gl_Position = uProjectionMatrix * uViewMatrix * uModelMatrix * vec4(inPosition, 1.0); 28 | 29 | outEyePosition = vec3(uModelMatrix * vec4(inPosition, 1.0)); 30 | outNormal = vec3(uInvModelMatrix * vec4(inNormal, 0.0)); 31 | outTangent = vec3(uInvModelMatrix * vec4(inTangent, 0.0)); 32 | outTexCoord = inTexCoord; 33 | } 34 | `, 35 | 36 | frag: ` 37 | 38 | #define SHADER_NAME SHADER_LIT_TEXTURED_FRAG 39 | 40 | precision lowp float; 41 | 42 | struct Material 43 | { 44 | vec3 ambient; 45 | vec3 diffuse; 46 | vec3 specular; 47 | vec3 emission; 48 | float shininess; 49 | }; 50 | 51 | struct DirLight 52 | { 53 | vec3 direction; 54 | vec3 ambient; 55 | vec3 diffuse; 56 | vec3 specular; 57 | bool active; 58 | }; 59 | 60 | struct PointLight 61 | { 62 | vec3 position; 63 | vec3 color; 64 | float intensity; 65 | float range; 66 | bool active; 67 | }; 68 | 69 | #define POINT_LIGHT_COUNT 16 70 | 71 | uniform sampler2D uMainSampler; 72 | uniform sampler2D uNormalSampler; 73 | uniform Material uMaterial; 74 | uniform DirLight uDirLight; 75 | uniform PointLight uPointLights[POINT_LIGHT_COUNT]; 76 | uniform vec3 uCameraPos; 77 | 78 | varying vec3 outEyePosition; 79 | varying vec3 outNormal; 80 | varying vec2 outTexCoord; 81 | varying vec3 outTangent; 82 | 83 | float SafePow(float x, float y) 84 | { 85 | return (y > 0.0) ? pow(x, y) : 0.0; 86 | } 87 | 88 | vec3 GetDirLight(DirLight light, Material material, vec3 normal, vec3 eyeView) 89 | { 90 | vec3 finalColor = vec3(0); 91 | float normDotLight = max(dot(normalize(normal), normalize(light.direction)), 0.0); 92 | vec3 diffuse = normDotLight * (material.diffuse + light.diffuse / 2.0); 93 | vec3 halfVector = normalize(eyeView + normalize(light.direction)); 94 | float normDotHalfVec = max(dot(normalize(normal), halfVector), 0.0); 95 | vec3 specular = SafePow(normDotHalfVec, material.shininess) * (material.specular + light.specular / 2.0); 96 | vec3 ambient = (material.ambient + light.ambient / 2.0); 97 | 98 | finalColor = diffuse + specular + ambient + material.emission; 99 | 100 | return finalColor; 101 | 102 | } 103 | 104 | vec3 GetPointLight(PointLight light, Material material, vec3 normal, vec3 eyeView) 105 | { 106 | vec3 finalColor = vec3(0.0); 107 | vec3 lightDir = light.position - eyeView; 108 | float normDotLight = max(dot(normalize(normal), normalize(lightDir)), 0.0); 109 | float lightDistance = length(lightDir); 110 | float denom = max(lightDistance - light.range, 0.0) / light.range + 1.0; 111 | float attenuation = max(light.intensity / (denom * denom), 0.0); 112 | vec3 diffuse = (normDotLight * (material.diffuse + light.color / 2.0)); 113 | vec3 halfVector = normalize(eyeView + lightDir); 114 | float normDotHalfVec = max(dot(normalize(normal), halfVector), 0.0); 115 | vec3 specular = (material.specular + light.color / 2.0) * SafePow(normDotHalfVec, material.shininess); 116 | finalColor = attenuation * (diffuse + specular); 117 | 118 | return finalColor; 119 | } 120 | 121 | vec3 GetNormal(vec3 normal, vec3 tangent, vec3 normalMap) 122 | { 123 | vec3 norm = normalize(normal); 124 | vec3 tan = normalize(tangent); 125 | tan = normalize(tan - dot(tan, norm) * norm); 126 | vec3 bitan = cross(tan, norm); 127 | mat3 tbn = mat3(tan, bitan, norm); 128 | vec3 result = tbn * normalMap; 129 | result = normalize(result); 130 | return result; 131 | } 132 | 133 | void main() 134 | { 135 | vec3 finalColor = vec3(0.0); 136 | vec4 texColor = texture2D(uMainSampler, outTexCoord); 137 | vec4 texNormColor = texture2D(uNormalSampler, outTexCoord); 138 | vec3 texNorm = normalize(vec3(texNormColor.rgb * 2.0 - 1.0)); 139 | vec3 normal = GetNormal(outNormal, outTangent, texNorm); 140 | 141 | if (uDirLight.active) 142 | { 143 | finalColor += GetDirLight(uDirLight, uMaterial, normal, uCameraPos); 144 | } 145 | 146 | for (int index = 0; index < POINT_LIGHT_COUNT; ++index) 147 | { 148 | if (uPointLights[index].active) 149 | { 150 | finalColor += GetPointLight(uPointLights[index], uMaterial, normal, outEyePosition); 151 | } 152 | } 153 | 154 | gl_FragColor = texColor * vec4(finalColor, 1.0); 155 | 156 | } 157 | 158 | ` 159 | }; 160 | -------------------------------------------------------------------------------- /shaders/LitUntextured.js: -------------------------------------------------------------------------------- 1 | var LitUntextured = 2 | { 3 | vert: ` 4 | 5 | #define SHADER_NAME SHADER_LIT_UNTEXTURED_VERT 6 | 7 | precision lowp float; 8 | 9 | uniform mat4 uModelMatrix; 10 | uniform mat4 uInvModelMatrix; 11 | uniform mat4 uViewMatrix; 12 | uniform mat4 uProjectionMatrix; 13 | 14 | attribute vec3 inPosition; 15 | attribute vec3 inNormal; 16 | 17 | varying vec3 outEyePosition; 18 | varying vec3 outNormal; 19 | 20 | void main() 21 | { 22 | 23 | gl_Position = uProjectionMatrix * uViewMatrix * uModelMatrix * vec4(inPosition, 1.0); 24 | 25 | outEyePosition = vec3(uModelMatrix * vec4(inPosition, 1.0)); 26 | outNormal = vec3(uInvModelMatrix * vec4(inNormal, 0.0)); 27 | } 28 | `, 29 | 30 | frag: ` 31 | 32 | #define SHADER_NAME SHADER_LIT_UNTEXTURED_FRAG 33 | 34 | precision lowp float; 35 | 36 | struct Material 37 | { 38 | vec3 ambient; 39 | vec3 diffuse; 40 | vec3 specular; 41 | vec3 emission; 42 | float shininess; 43 | }; 44 | 45 | struct DirLight 46 | { 47 | vec3 direction; 48 | vec3 ambient; 49 | vec3 diffuse; 50 | vec3 specular; 51 | bool active; 52 | }; 53 | 54 | struct PointLight 55 | { 56 | vec3 position; 57 | vec3 color; 58 | float intensity; 59 | float range; 60 | bool active; 61 | }; 62 | 63 | #define POINT_LIGHT_COUNT 16 64 | 65 | uniform Material uMaterial; 66 | uniform DirLight uDirLight; 67 | uniform PointLight uPointLights[POINT_LIGHT_COUNT]; 68 | uniform vec3 uCameraPos; 69 | 70 | varying vec3 outEyePosition; 71 | varying vec3 outNormal; 72 | 73 | float SafePow(float x, float y) 74 | { 75 | return (y > 0.0) ? pow(x, y) : 0.0; 76 | } 77 | 78 | vec3 GetDirLight(DirLight light, Material material, vec3 normal, vec3 eyeView) 79 | { 80 | vec3 finalColor = vec3(0); 81 | float normDotLight = max(dot(normalize(normal), normalize(light.direction)), 0.0); 82 | vec3 diffuse = normDotLight * (material.diffuse + light.diffuse / 2.0); 83 | vec3 halfVector = normalize(eyeView + normalize(light.direction)); 84 | float normDotHalfVec = max(dot(normalize(normal), halfVector), 0.0); 85 | vec3 specular = SafePow(normDotHalfVec, material.shininess) * (material.specular + light.specular / 2.0); 86 | vec3 ambient = (material.ambient + light.ambient / 2.0); 87 | 88 | finalColor = diffuse + specular + ambient + material.emission; 89 | 90 | return finalColor; 91 | 92 | } 93 | 94 | vec3 GetPointLight(PointLight light, Material material, vec3 normal, vec3 eyeView) 95 | { 96 | vec3 finalColor = vec3(0.0); 97 | vec3 lightDir = light.position - eyeView; 98 | float normDotLight = max(dot(normalize(normal), normalize(lightDir)), 0.0); 99 | float lightDistance = length(lightDir); 100 | float denom = max(lightDistance - light.range, 0.0) / light.range + 1.0; 101 | float attenuation = max(light.intensity / (denom * denom), 0.0); 102 | vec3 diffuse = (normDotLight * (material.diffuse + light.color / 2.0)); 103 | vec3 halfVector = normalize(eyeView + lightDir); 104 | float normDotHalfVec = max(dot(normalize(normal), halfVector), 0.0); 105 | vec3 specular = (material.specular + light.color / 2.0) * SafePow(normDotHalfVec, material.shininess); 106 | finalColor = attenuation * (diffuse + specular); 107 | 108 | return finalColor; 109 | } 110 | 111 | void main() 112 | { 113 | vec3 finalColor = vec3(0.0); 114 | 115 | if (uDirLight.active) 116 | { 117 | finalColor += GetDirLight(uDirLight, uMaterial, outNormal, uCameraPos); 118 | } 119 | 120 | for (int index = 0; index < POINT_LIGHT_COUNT; ++index) 121 | { 122 | if (uPointLights[index].active) 123 | { 124 | finalColor += GetPointLight(uPointLights[index], uMaterial, outNormal, outEyePosition); 125 | } 126 | } 127 | 128 | gl_FragColor = vec4(finalColor, 1.0); 129 | 130 | } 131 | 132 | ` 133 | }; 134 | -------------------------------------------------------------------------------- /shaders/UnlitTextured.js: -------------------------------------------------------------------------------- 1 | var UnlitTextured = 2 | { 3 | 4 | vert: ` 5 | #define SHADER_NAME SHADER_UNLIT_TEXTURED_VERT 6 | 7 | precision highp float; 8 | 9 | uniform mat4 uModelMatrix; 10 | uniform mat4 uViewMatrix; 11 | uniform mat4 uProjectionMatrix; 12 | 13 | attribute vec3 inPosition; 14 | attribute vec2 inTexCoord; 15 | 16 | varying vec2 outTexCoord; 17 | 18 | void main() 19 | { 20 | 21 | mat4 mvp = uProjectionMatrix * uViewMatrix * uModelMatrix; 22 | gl_Position = mvp * vec4(inPosition, 1.0); 23 | outTexCoord = inTexCoord; 24 | } 25 | `, 26 | 27 | frag: ` 28 | precision highp float; 29 | 30 | #define SHADER_NAME SHADER_UNLIT_TEXTURED_FRAG 31 | 32 | uniform vec3 uFlatColor; 33 | uniform sampler2D uMainSampler; 34 | 35 | varying vec2 outTexCoord; 36 | 37 | void main() 38 | { 39 | gl_FragColor = texture2D(uMainSampler, outTexCoord) * vec4(uFlatColor, 1.0); 40 | } 41 | ` 42 | }; -------------------------------------------------------------------------------- /shaders/UnlitUntextured.js: -------------------------------------------------------------------------------- 1 | var UnlitUntextured = 2 | { 3 | vert: ` 4 | #define SHADER_NAME SHADER_UNLIT_UNTEXTURED_VERT 5 | 6 | precision highp float; 7 | 8 | uniform mat4 uModelMatrix; 9 | uniform mat4 uViewMatrix; 10 | uniform mat4 uProjectionMatrix; 11 | 12 | attribute vec3 inPosition; 13 | 14 | void main() 15 | { 16 | 17 | mat4 mvp = uProjectionMatrix * uViewMatrix * uModelMatrix; 18 | gl_Position = mvp * vec4(inPosition, 1.0); 19 | 20 | } 21 | `, 22 | 23 | frag: ` 24 | precision highp float; 25 | 26 | #define SHADER_NAME SHADER_UNLIT_UNTEXTURED_FRAG 27 | 28 | uniform vec3 uFlatColor; 29 | 30 | void main() 31 | { 32 | gl_FragColor = vec4(uFlatColor, 1.0); 33 | } 34 | ` 35 | }; 36 | --------------------------------------------------------------------------------