UNPKG

mdx-m3-viewer

Version:

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

552 lines (437 loc) 19.2 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, faceColor: new Uint8Array([255, 0, 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: 'edge-color', load(viewer) { return viewer.load({ geometry: geometry.createUnitRectangle(), material: { renderMode: 1, edgeColor: new Uint8Array([0, 255, 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: 'vertex-and-edge-colors', load(viewer) { return viewer.load({ geometry: geometry.createUnitRectangle(), material: { renderMode: 2, faceColor: new Uint8Array([255, 0, 0]), edgeColor: new Uint8Array([0, 255, 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: '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, faceColor: new Uint8Array([255, 0, 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: 'edge-color', load(viewer) { return viewer.load({ geometry: geometry.createUnitCube(), material: { renderMode: 1, edgeColor: new Uint8Array([0, 255, 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: 'vertex-and-edge-colors', load(viewer) { return viewer.load({ geometry: geometry.createUnitCube(), material: { renderMode: 2, faceColor: new Uint8Array([255, 0, 0]), edgeColor: new Uint8Array([0, 255, 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: '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, faceColor: new Uint8Array([255, 0, 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: 'edge-color', load(viewer) { return viewer.load({ geometry: geometry.createUnitSphere(20, 20), material: { renderMode: 1, edgeColor: new Uint8Array([0, 255, 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: 'vertex-and-edge-colors', load(viewer) { return viewer.load({ geometry: geometry.createUnitSphere(20, 20), material: { renderMode: 2, faceColor: new Uint8Array([255, 0, 0]), edgeColor: new Uint8Array([0, 255, 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: '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, faceColor: new Uint8Array([255, 0, 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: 'edge-color', load(viewer) { return viewer.load({ geometry: geometry.createUnitCylinder(20), material: { renderMode: 1, edgeColor: new Uint8Array([0, 255, 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: 'vertex-and-edge-colors', load(viewer) { return viewer.load({ geometry: geometry.createUnitCylinder(20), material: { renderMode: 2, faceColor: new Uint8Array([255, 0, 0]), edgeColor: new Uint8Array([0, 255, 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: '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, faceColor: new Uint8Array([255, 0, 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: '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]) } }, 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, faceColor: new Uint8Array([255, 0, 0]), edgeColor: new Uint8Array([0, 255, 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: '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]); let model = viewer.load({ geometry: geometry.createUnitRectangle(), material: { texture } }, geoSolver); return [model, texture2]; }, test(viewer, scene, camera, [model, texture2]) { 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(0, texture2); scene.addInstance(instance); scene.addInstance(instance2); }, }, ], };