diff options
| author | Jules Laplace <julescarbon@gmail.com> | 2019-01-28 17:57:38 +0100 |
|---|---|---|
| committer | Jules Laplace <julescarbon@gmail.com> | 2019-01-28 17:57:38 +0100 |
| commit | c6da699f18426079435ad4664e7c715386ff82c0 (patch) | |
| tree | cea63afb3c4e8e56fc2cc8f773f12e5618683cea /client/splash/face/mesh.js | |
| parent | 0c0c2ec2ecfd64b16ff6ca0e69142223615f0c36 (diff) | |
display a random face
Diffstat (limited to 'client/splash/face/mesh.js')
| -rw-r--r-- | client/splash/face/mesh.js | 49 |
1 files changed, 10 insertions, 39 deletions
diff --git a/client/splash/face/mesh.js b/client/splash/face/mesh.js index efa9530e..69a40900 100644 --- a/client/splash/face/mesh.js +++ b/client/splash/face/mesh.js @@ -5,7 +5,12 @@ import { scene } from '../renderer' import DRACOLoader from '../../util/vendor/DRACOLoader' import GeometryHelper from '../../util/vendor/geometryHelper' +import { getBboxScaleAndCentroid } from './util' + +import { FACE_SCALE } from '../constants' + DRACOLoader.setDecoderPath('/assets/js/vendor/draco/') + const dracoLoader = new DRACOLoader() DRACOLoader.getDecoderModule() @@ -14,17 +19,6 @@ export function load(name) { dracoLoader.setDrawMode(TrianglesDrawMode) dracoLoader.setSkipDequantization('position', true) dracoLoader.load('/assets/data/faces/' + name + '.drc', dracoDidLoad) - // dracoLoader.load('/assets/data/faces/' + name + '.drc', (geometry) => { - // geometry.computeVertexNormals() - - // const material = new MeshBasicMaterial({ vertexColors: VertexColors }) - // const mesh = new Mesh(geometry, material) - // scene.add(mesh) - // console.log(name) - - // // Release the cached decoder module. - // DRACOLoader.releaseDecoderModule() - // }) } export function update(name) { @@ -49,11 +43,7 @@ function setDequantizationForMaterial(material, bufferGeometry) { } } -export function dracoDidLoad(bufferGeometry) { - // if (dracoLoader.decode_time !== undefined) { - // fileDisplayArea.innerText = 'Decode time = ' + dracoLoader.decode_time + '\n' + - // 'Import time = ' + dracoLoader.import_time - // } +function dracoDidLoad(bufferGeometry) { const material = new MeshBasicMaterial({ vertexColors: VertexColors }) material.wireframe = true // If the position attribute is quantized, modify the material to perform @@ -77,32 +67,13 @@ export function dracoDidLoad(bufferGeometry) { // Compute range of the geometry coordinates for proper rendering. bufferGeometry.computeBoundingBox() - if (bufferGeometry.attributes.position.isQuantized) { - // If the geometry is quantized, transform the bounding box to the dequantized - // coordinates. - const posAttribute = bufferGeometry.attributes.position - const normConstant = posAttribute.maxRange / (1 << posAttribute.numQuantizationBits) - const minPos = posAttribute.minValues - bufferGeometry.boundingBox.max.x = minPos[0] + bufferGeometry.boundingBox.max.x * normConstant - bufferGeometry.boundingBox.max.y = minPos[1] + bufferGeometry.boundingBox.max.y * normConstant - bufferGeometry.boundingBox.max.z = minPos[2] + bufferGeometry.boundingBox.max.z * normConstant - bufferGeometry.boundingBox.min.x = minPos[0] + bufferGeometry.boundingBox.min.x * normConstant - bufferGeometry.boundingBox.min.y = minPos[1] + bufferGeometry.boundingBox.min.y * normConstant - bufferGeometry.boundingBox.min.z = minPos[2] + bufferGeometry.boundingBox.min.z * normConstant - } - const sizeX = bufferGeometry.boundingBox.max.x - bufferGeometry.boundingBox.min.x - const sizeY = bufferGeometry.boundingBox.max.y - bufferGeometry.boundingBox.min.y - const sizeZ = bufferGeometry.boundingBox.max.z - bufferGeometry.boundingBox.min.z - const diagonalSize = Math.sqrt(sizeX * sizeX + sizeY * sizeY + sizeZ * sizeZ) - const scale = 1.0 / diagonalSize - const midX = (bufferGeometry.boundingBox.min.x + bufferGeometry.boundingBox.max.x) / 2 - const midY = (bufferGeometry.boundingBox.min.y + bufferGeometry.boundingBox.max.y) / 2 - const midZ = (bufferGeometry.boundingBox.min.z + bufferGeometry.boundingBox.max.z) / 2 - - geometry.scale.multiplyScalar(scale) + const bbox = bufferGeometry.boundingBox + const { scale, midX, midY, midZ } = getBboxScaleAndCentroid(bbox, bufferGeometry.attributes.position) + geometry.scale.multiplyScalar(scale * FACE_SCALE) geometry.position.x = -midX * scale geometry.position.y = -midY * scale geometry.position.z = -midZ * scale + geometry.frustumCulled = false // geometry.castShadow = true // geometry.receiveShadow = true |
