UNPKG

mdx-m3-viewer

Version:

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

553 lines (437 loc) 18.7 kB
let geoTests = { name: 'geo', tests: [ { name: 'rectangle', tests: [ { name: 'faces', load(viewer) { return viewer.load({geometry: geometry.createUnitRectangle(), material: {renderMode: 0}}, geoSolver); }, test(viewer, scene, camera, model) { camera.move([0, 0, 120]); let instance = model.addInstance().uniformScale(40).rotate(quat.setAxisAngle([], [1, 0, 0], Math.PI / 8)); scene.addInstance(instance); }, }, { name: 'edges', load(viewer) { return viewer.load({geometry: geometry.createUnitRectangle(), material: {renderMode: 1}}, geoSolver); }, test(viewer, scene, camera, model) { camera.move([0, 0, 120]); let instance = model.addInstance().uniformScale(40).rotate(quat.setAxisAngle([], [1, 0, 0], Math.PI / 8)); scene.addInstance(instance); }, }, { name: 'faces-and-edges', load(viewer) { return viewer.load({geometry: geometry.createUnitRectangle(), material: {renderMode: 2}}, geoSolver); }, test(viewer, scene, camera, model) { camera.move([0, 0, 120]); let instance = model.addInstance().uniformScale(40).rotate(quat.setAxisAngle([], [1, 0, 0], Math.PI / 8)); scene.addInstance(instance); }, }, { name: 'vertex-color', load(viewer) { return viewer.load({geometry: geometry.createUnitRectangle(), material: {renderMode: 0, vertexColor: new Uint8Array([255, 0, 0, 255])}}, geoSolver); }, test(viewer, scene, camera, model) { camera.move([0, 0, 120]); let instance = model.addInstance().uniformScale(40).rotate(quat.setAxisAngle([], [1, 0, 0], Math.PI / 8)); scene.addInstance(instance); }, }, { name: 'edge-color', load(viewer) { return viewer.load({geometry: geometry.createUnitRectangle(), material: {renderMode: 1, edgeColor: new Uint8Array([0, 255, 0, 255])}}, geoSolver); }, test(viewer, scene, camera, model) { camera.move([0, 0, 120]); let instance = model.addInstance().uniformScale(40).rotate(quat.setAxisAngle([], [1, 0, 0], Math.PI / 8)); scene.addInstance(instance); }, }, { name: 'vertex-and-edge-colors', load(viewer) { return viewer.load({geometry: geometry.createUnitRectangle(), material: {renderMode: 2, vertexColor: new Uint8Array([255, 0, 0, 255]), edgeColor: new Uint8Array([0, 255, 0, 255])}}, geoSolver); }, test(viewer, scene, camera, model) { camera.move([0, 0, 120]); let instance = model.addInstance().uniformScale(40).rotate(quat.setAxisAngle([], [1, 0, 0], Math.PI / 8)); scene.addInstance(instance); }, }, { name: 'texture', load(viewer) { let texture = viewer.load('resources/checkers.jpg', (path) => [path, '.jpg', true]); return viewer.load({geometry: geometry.createUnitRectangle(), material: {texture}}, geoSolver); }, test(viewer, scene, camera, model) { camera.move([0, 0, 120]); let instance = model.addInstance().uniformScale(40).rotate(quat.setAxisAngle([], [1, 0, 0], Math.PI / 8)); scene.addInstance(instance); }, }, ], }, { name: 'cube', tests: [ { name: 'faces', load(viewer) { return viewer.load({geometry: geometry.createUnitCube(), material: {renderMode: 0}}, geoSolver); }, test(viewer, scene, camera, model) { camera.move([0, 0, 160]); let instance = model.addInstance().uniformScale(40).rotate(quat.setAxisAngle([], [1, 0, 0], Math.PI / 8)); scene.addInstance(instance); }, }, { name: 'edges', load(viewer) { return viewer.load({geometry: geometry.createUnitCube(), material: {renderMode: 1}}, geoSolver); }, test(viewer, scene, camera, model) { camera.move([0, 0, 160]); let instance = model.addInstance().uniformScale(40).rotate(quat.setAxisAngle([], [1, 0, 0], Math.PI / 8)); scene.addInstance(instance); }, }, { name: 'faces-and-edges', load(viewer) { return viewer.load({geometry: geometry.createUnitCube(), material: {renderMode: 2}}, geoSolver); }, test(viewer, scene, camera, model) { camera.move([0, 0, 160]); let instance = model.addInstance().uniformScale(40).rotate(quat.setAxisAngle([], [1, 0, 0], Math.PI / 8)); scene.addInstance(instance); }, }, { name: 'vertex-color', load(viewer) { return viewer.load({geometry: geometry.createUnitCube(), material: {renderMode: 0, vertexColor: new Uint8Array([255, 0, 0, 255])}}, geoSolver); }, test(viewer, scene, camera, model) { camera.move([0, 0, 160]); let instance = model.addInstance().uniformScale(40).rotate(quat.setAxisAngle([], [1, 0, 0], Math.PI / 8)); scene.addInstance(instance); }, }, { name: 'edge-color', load(viewer) { return viewer.load({geometry: geometry.createUnitCube(), material: {renderMode: 1, edgeColor: new Uint8Array([0, 255, 0, 255])}}, geoSolver); }, test(viewer, scene, camera, model) { camera.move([0, 0, 160]); let instance = model.addInstance().uniformScale(40).rotate(quat.setAxisAngle([], [1, 0, 0], Math.PI / 8)); scene.addInstance(instance); }, }, { name: 'vertex-and-edge-colors', load(viewer) { return viewer.load({geometry: geometry.createUnitCube(), material: {renderMode: 2, vertexColor: new Uint8Array([255, 0, 0, 255]), edgeColor: new Uint8Array([0, 255, 0, 255])}}, geoSolver); }, test(viewer, scene, camera, model) { camera.move([0, 0, 160]); let instance = model.addInstance().uniformScale(40).rotate(quat.setAxisAngle([], [1, 0, 0], Math.PI / 8)); scene.addInstance(instance); }, }, { name: 'texture', load(viewer) { let texture = viewer.load('resources/checkers.jpg', (path) => [path, '.jpg', true]); return viewer.load({geometry: geometry.createUnitCube(), material: {texture}}, geoSolver); }, test(viewer, scene, camera, model) { camera.move([0, 0, 160]); let instance = model.addInstance().uniformScale(40).rotate(quat.setAxisAngle([], [1, 0, 0], Math.PI / 8)); scene.addInstance(instance); }, }, ], }, { name: 'sphere', tests: [ { name: 'faces', load(viewer) { return viewer.load({geometry: geometry.createUnitSphere(20, 20), material: {renderMode: 0}}, geoSolver); }, test(viewer, scene, camera, model) { camera.move([0, 0, 120]); let instance = model.addInstance().uniformScale(40).rotate(quat.setAxisAngle([], [1, 0, 0], Math.PI / 8)); scene.addInstance(instance); }, }, { name: 'edges', load(viewer) { return viewer.load({geometry: geometry.createUnitSphere(20, 20), material: {renderMode: 1}}, geoSolver); }, test(viewer, scene, camera, model) { camera.move([0, 0, 120]); let instance = model.addInstance().uniformScale(40).rotate(quat.setAxisAngle([], [1, 0, 0], Math.PI / 8)); scene.addInstance(instance); }, }, { name: 'faces-and-edges', load(viewer) { return viewer.load({geometry: geometry.createUnitSphere(20, 20), material: {renderMode: 2}}, geoSolver); }, test(viewer, scene, camera, model) { camera.move([0, 0, 120]); let instance = model.addInstance().uniformScale(40).rotate(quat.setAxisAngle([], [1, 0, 0], Math.PI / 8)); scene.addInstance(instance); }, }, { name: 'vertex-color', load(viewer) { return viewer.load({geometry: geometry.createUnitSphere(20, 20), material: {renderMode: 0, vertexColor: new Uint8Array([255, 0, 0, 255])}}, geoSolver); }, test(viewer, scene, camera, model) { camera.move([0, 0, 120]); let instance = model.addInstance().uniformScale(40).rotate(quat.setAxisAngle([], [1, 0, 0], Math.PI / 8)); scene.addInstance(instance); }, }, { name: 'edge-color', load(viewer) { return viewer.load({geometry: geometry.createUnitSphere(20, 20), material: {renderMode: 1, edgeColor: new Uint8Array([0, 255, 0, 255])}}, geoSolver); }, test(viewer, scene, camera, model) { camera.move([0, 0, 120]); let instance = model.addInstance().uniformScale(40).rotate(quat.setAxisAngle([], [1, 0, 0], Math.PI / 8)); scene.addInstance(instance); }, }, { name: 'vertex-and-edge-colors', load(viewer) { return viewer.load({geometry: geometry.createUnitSphere(20, 20), material: {renderMode: 2, vertexColor: new Uint8Array([255, 0, 0, 255]), edgeColor: new Uint8Array([0, 255, 0, 255])}}, geoSolver); }, test(viewer, scene, camera, model) { camera.move([0, 0, 120]); let instance = model.addInstance().uniformScale(40).rotate(quat.setAxisAngle([], [1, 0, 0], Math.PI / 8)); scene.addInstance(instance); }, }, { name: 'texture', load(viewer) { let texture = viewer.load('resources/checkers.jpg', (path) => [path, '.jpg', true]); return viewer.load({geometry: geometry.createUnitSphere(20, 20), material: {texture}}, geoSolver); }, test(viewer, scene, camera, model) { camera.move([0, 0, 120]); let instance = model.addInstance().uniformScale(40).rotate(quat.setAxisAngle([], [1, 0, 0], Math.PI / 8)); scene.addInstance(instance); }, }, ], }, { name: 'cylinder', tests: [ { name: 'faces', load(viewer) { return viewer.load({geometry: geometry.createUnitCylinder(20), material: {renderMode: 0}}, geoSolver); }, test(viewer, scene, camera, model) { camera.move([0, 0, 150]); let instance = model.addInstance().uniformScale(40).rotate(quat.setAxisAngle([], [1, 0, 0], Math.PI / 8)); scene.addInstance(instance); }, }, { name: 'edges', load(viewer) { return viewer.load({geometry: geometry.createUnitCylinder(20), material: {renderMode: 1}}, geoSolver); }, test(viewer, scene, camera, model) { camera.move([0, 0, 150]); let instance = model.addInstance().uniformScale(40).rotate(quat.setAxisAngle([], [1, 0, 0], Math.PI / 8)); scene.addInstance(instance); }, }, { name: 'faces-and-edges', load(viewer) { return viewer.load({geometry: geometry.createUnitCylinder(20), material: {renderMode: 2}}, geoSolver); }, test(viewer, scene, camera, model) { camera.move([0, 0, 150]); let instance = model.addInstance().uniformScale(40).rotate(quat.setAxisAngle([], [1, 0, 0], Math.PI / 8)); scene.addInstance(instance); }, }, { name: 'vertex-color', load(viewer) { return viewer.load({geometry: geometry.createUnitCylinder(20), material: {renderMode: 0, vertexColor: new Uint8Array([255, 0, 0, 255])}}, geoSolver); }, test(viewer, scene, camera, model) { camera.move([0, 0, 150]); let instance = model.addInstance().uniformScale(40).rotate(quat.setAxisAngle([], [1, 0, 0], Math.PI / 8)); scene.addInstance(instance); }, }, { name: 'edge-color', load(viewer) { return viewer.load({geometry: geometry.createUnitCylinder(20), material: {renderMode: 1, edgeColor: new Uint8Array([0, 255, 0, 255])}}, geoSolver); }, test(viewer, scene, camera, model) { camera.move([0, 0, 150]); let instance = model.addInstance().uniformScale(40).rotate(quat.setAxisAngle([], [1, 0, 0], Math.PI / 8)); scene.addInstance(instance); }, }, { name: 'vertex-and-edge-colors', load(viewer) { return viewer.load({geometry: geometry.createUnitCylinder(20), material: {renderMode: 2, vertexColor: new Uint8Array([255, 0, 0, 255]), edgeColor: new Uint8Array([0, 255, 0, 255])}}, geoSolver); }, test(viewer, scene, camera, model) { camera.move([0, 0, 150]); let instance = model.addInstance().uniformScale(40).rotate(quat.setAxisAngle([], [1, 0, 0], Math.PI / 8)); scene.addInstance(instance); }, }, { name: 'texture', load(viewer) { let texture = viewer.load('resources/checkers.jpg', (path) => [path, '.jpg', true]); return viewer.load({geometry: geometry.createUnitCylinder(20), material: {texture}}, geoSolver); }, test(viewer, scene, camera, model) { camera.move([0, 0, 150]); let instance = model.addInstance().uniformScale(40).rotate(quat.setAxisAngle([], [1, 0, 0], Math.PI / 8)); scene.addInstance(instance); }, }, ], }, { name: 'frustum', tests: [ { name: 'faces', load(viewer) { return viewer.load({geometry: geometry.createFrustum(Math.PI / 4, 0.75, 8, 120), material: {renderMode: 0}}, geoSolver); }, test(viewer, scene, camera, model) { camera.moveToAndFace([150, 0, 200], [0, 0, 60], [0, 0, 1]); let instance = model.addInstance(); scene.addInstance(instance); }, }, { name: 'edges', load(viewer) { return viewer.load({geometry: geometry.createFrustum(Math.PI / 4, 0.75, 8, 120), material: {renderMode: 1}}, geoSolver); }, test(viewer, scene, camera, model) { camera.moveToAndFace([150, 0, 200], [0, 0, 60], [0, 0, 1]); let instance = model.addInstance(); scene.addInstance(instance); }, }, { name: 'faces-and-edges', load(viewer) { return viewer.load({geometry: geometry.createFrustum(Math.PI / 4, 0.75, 8, 120), material: {renderMode: 2}}, geoSolver); }, test(viewer, scene, camera, model) { camera.moveToAndFace([150, 0, 200], [0, 0, 60], [0, 0, 1]); let instance = model.addInstance(); scene.addInstance(instance); }, }, { name: 'vertex-color', load(viewer) { return viewer.load({geometry: geometry.createFrustum(Math.PI / 4, 0.75, 8, 120), material: {renderMode: 0, vertexColor: new Uint8Array([255, 0, 0, 255])}}, geoSolver); }, test(viewer, scene, camera, model) { camera.moveToAndFace([150, 0, 200], [0, 0, 60], [0, 0, 1]); let instance = model.addInstance(); scene.addInstance(instance); }, }, { name: 'edge-color', load(viewer) { return viewer.load({geometry: geometry.createFrustum(Math.PI / 4, 0.75, 8, 120), material: {renderMode: 1, edgeColor: new Uint8Array([0, 255, 0, 255])}}, geoSolver); }, test(viewer, scene, camera, model) { camera.moveToAndFace([150, 0, 200], [0, 0, 60], [0, 0, 1]); let instance = model.addInstance(); scene.addInstance(instance); }, }, { name: 'vertex-and-edge-colors', load(viewer) { return viewer.load({geometry: geometry.createFrustum(Math.PI / 4, 0.75, 8, 120), material: {renderMode: 2, vertexColor: new Uint8Array([255, 0, 0, 255]), edgeColor: new Uint8Array([0, 255, 0, 255])}}, geoSolver); }, test(viewer, scene, camera, model) { camera.moveToAndFace([150, 0, 200], [0, 0, 60], [0, 0, 1]); let instance = model.addInstance(); scene.addInstance(instance); }, }, { name: 'texture', load(viewer) { let texture = viewer.load('resources/checkers.jpg', (path) => [path, '.jpg', true]); return viewer.load({geometry: geometry.createFrustum(Math.PI / 4, 0.75, 8, 120), material: {texture}}, geoSolver); }, test(viewer, scene, camera, model) { camera.moveToAndFace([150, 0, 200], [0, 0, 60], [0, 0, 1]); let instance = model.addInstance(); scene.addInstance(instance); }, }, ], }, { name: 'texture-overriding', load(viewer) { let texture = viewer.load('resources/checkers.jpg', (path) => [path, '.jpg', true]); let texture2 = viewer.load('resources/colored-checkers.jpg', (path) => [path, '.jpg', true]); return [texture, texture2]; }, test(viewer, scene, camera, textures) { let model = viewer.load({geometry: geometry.createUnitRectangle(), material: {texture: textures[0]}}, geoSolver); camera.move([0, 0, 200]); let instance = model.addInstance().move([-41, 0, 0]).uniformScale(40); let instance2 = model.addInstance().move([41, 0, 0]).uniformScale(40); instance2.setTexture(null, textures[1]); scene.addInstance(instance); scene.addInstance(instance2); }, }, ], };