summaryrefslogtreecommitdiff
path: root/client/splash/face/mesh.js
diff options
context:
space:
mode:
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