summaryrefslogtreecommitdiff
path: root/client/splash/face/mesh.js
diff options
context:
space:
mode:
authorJules Laplace <julescarbon@gmail.com>2019-01-28 17:57:38 +0100
committerJules Laplace <julescarbon@gmail.com>2019-01-28 17:57:38 +0100
commitc6da699f18426079435ad4664e7c715386ff82c0 (patch)
treecea63afb3c4e8e56fc2cc8f773f12e5618683cea /client/splash/face/mesh.js
parent0c0c2ec2ecfd64b16ff6ca0e69142223615f0c36 (diff)
display a random face
Diffstat (limited to 'client/splash/face/mesh.js')
-rw-r--r--client/splash/face/mesh.js49
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