summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--client/splash/constants.js2
-rw-r--r--client/splash/face/markers.js4
-rw-r--r--client/splash/face/mesh.js145
-rw-r--r--client/splash/renderer.js2
-rw-r--r--megapixels/commands/misc/obj2ply.py10
-rw-r--r--site/assets/data/faces/may.drcbin0 -> 175998 bytes
-rw-r--r--site/assets/data/faces/xi.drcbin0 -> 157325 bytes
7 files changed, 78 insertions, 85 deletions
diff --git a/client/splash/constants.js b/client/splash/constants.js
index c250ea4a..5b7309b4 100644
--- a/client/splash/constants.js
+++ b/client/splash/constants.js
@@ -19,7 +19,7 @@ export const CLOUD_TEXT_MAX_SIZE = 0.04
/* face */
-export const FACE_SCALE = 0.0008
+export const FACE_SCALE = 0.00038
/* face markers */
diff --git a/client/splash/face/markers.js b/client/splash/face/markers.js
index 1832824c..1636349c 100644
--- a/client/splash/face/markers.js
+++ b/client/splash/face/markers.js
@@ -78,5 +78,5 @@ export function swap(face) {
}
export function update() {
- group.rotation.y += 0.005
-} \ No newline at end of file
+ // group.rotation.y += 0.005
+}
diff --git a/client/splash/face/mesh.js b/client/splash/face/mesh.js
index 61c4e498..efa9530e 100644
--- a/client/splash/face/mesh.js
+++ b/client/splash/face/mesh.js
@@ -10,17 +10,21 @@ const dracoLoader = new DRACOLoader()
DRACOLoader.getDecoderModule()
export function load(name) {
- dracoLoader.load('/assets/data/faces/' + name + '.drc', (geometry) => {
- geometry.computeVertexNormals()
+ dracoLoader.setVerbosity(1)
+ 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)
+ // 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()
- })
+ // // Release the cached decoder module.
+ // DRACOLoader.releaseDecoderModule()
+ // })
}
export function update(name) {
@@ -45,76 +49,65 @@ function setDequantizationForMaterial(material, bufferGeometry) {
}
}
-export function loadFromFile(buf) {
- // Enable logging to console output.
- dracoLoader.setVerbosity(1)
-
- // To use triangle strips use:
- // dracoLoader.setDrawMode(THREE.TriangleStripDrawMode)
- dracoLoader.setDrawMode(TrianglesDrawMode)
-
- // Skip dequantization of the position attribute. It will be done on the GPU.
- dracoLoader.setSkipDequantization('position', true)
- dracoLoader.decodeDracoFile(buf, (bufferGeometry) => {
- // if (dracoLoader.decode_time !== undefined) {
- // fileDisplayArea.innerText = 'Decode time = ' + dracoLoader.decode_time + '\n' +
- // 'Import time = ' + dracoLoader.import_time
- // }
- const material = new MeshBasicMaterial({ vertexColors: VertexColors })
- material.wireframe = true
- // If the position attribute is quantized, modify the material to perform
- // dequantization on the GPU.
- if (bufferGeometry.attributes.position.isQuantized) {
- 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
+ // }
+ const material = new MeshBasicMaterial({ vertexColors: VertexColors })
+ material.wireframe = true
+ // If the position attribute is quantized, modify the material to perform
+ // dequantization on the GPU.
+ if (bufferGeometry.attributes.position.isQuantized) {
+ setDequantizationForMaterial(material, bufferGeometry)
+ }
- let geometry
- // Point cloud does not have face indices.
- if (bufferGeometry.index === null) {
- geometry = new Points(bufferGeometry, material)
- } else {
- if (bufferGeometry.attributes.normal === undefined) {
- const geometryHelper = new GeometryHelper()
- geometryHelper.computeVertexNormals(bufferGeometry)
- }
- geometry = new Mesh(bufferGeometry, material)
- geometry.drawMode = dracoLoader.drawMode
+ let geometry
+ // Point cloud does not have face indices.
+ if (bufferGeometry.index === null) {
+ geometry = new Points(bufferGeometry, material)
+ } else {
+ if (bufferGeometry.attributes.normal === undefined) {
+ const geometryHelper = new GeometryHelper()
+ geometryHelper.computeVertexNormals(bufferGeometry)
}
+ geometry = new Mesh(bufferGeometry, material)
+ geometry.drawMode = dracoLoader.drawMode
+ }
- // 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
+ // 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)
- geometry.position.x = -midX * scale
- geometry.position.y = -midY * scale
- geometry.position.z = -midZ * scale
- // geometry.castShadow = true
- // geometry.receiveShadow = true
+ geometry.scale.multiplyScalar(scale)
+ geometry.position.x = -midX * scale
+ geometry.position.y = -midY * scale
+ geometry.position.z = -midZ * scale
+ // geometry.castShadow = true
+ // geometry.receiveShadow = true
- const selectedObject = scene.getObjectByName("my_mesh")
- scene.remove(selectedObject)
- geometry.name = "my_mesh"
- scene.add(geometry)
- })
+ const selectedObject = scene.getObjectByName("my_mesh")
+ scene.remove(selectedObject)
+ geometry.name = "my_mesh"
+ scene.add(geometry)
}
diff --git a/client/splash/renderer.js b/client/splash/renderer.js
index 369d02fa..e71a4526 100644
--- a/client/splash/renderer.js
+++ b/client/splash/renderer.js
@@ -5,7 +5,7 @@ import { FOG_COLOR } from './constants'
export const scene = new THREE.Scene()
scene.fog = new THREE.Fog(FOG_COLOR, 2, 15)
-export const camera = new THREE.PerspectiveCamera(35, window.innerWidth / window.innerHeight, 0.01, 15)
+export const camera = new THREE.PerspectiveCamera(35, window.innerWidth / window.innerHeight, 0.001, 15)
camera.position.set(3, 0.15, 3)
// export const camera = new THREE.PerspectiveCamera(70, w / h, 1, 10000)
diff --git a/megapixels/commands/misc/obj2ply.py b/megapixels/commands/misc/obj2ply.py
index e3e18e54..8d0cec60 100644
--- a/megapixels/commands/misc/obj2ply.py
+++ b/megapixels/commands/misc/obj2ply.py
@@ -7,11 +7,11 @@ Convert an OBJ 3D model (with vertex color) to a PLY file, which can be read by
import click
@click.command()
-@click.add_argument('--float_colors', action='store_true', help='pass if RGB colors are floats, not ints, in the obj')
-@click.add_argument('--unwind', action='store_true', help='pass to reverse winding order on faces (if surface normals are upside down)')
-@click.add_argument('--flip_y', action='store_true', help='flip Y axis')
-@click.add_argument('-i', '--input_fn', required=True, help='input OBJ filename')
-@click.add_argument('-o', '--output_fn', help='output PLY filename')
+@click.option('-c', '--float_colors/--int_colors', 'float_colors', default=False, help='pass if RGB colors are floats, not ints, in the obj')
+@click.option('-u', '--unwind/--wind', 'unwind', default=False, help='pass to reverse winding order on faces (if surface normals are upside down)')
+@click.option('-y', '--flip_y/--no_flip_y', 'flip_y', default=False, help='flip Y axis')
+@click.option('-i', '--input_fn', required=True, help='input OBJ filename')
+@click.option('-o', '--output_fn', help='output PLY filename')
@click.pass_context
def cli(ctx, float_colors, unwind, flip_y, input_fn, output_fn):
"""
diff --git a/site/assets/data/faces/may.drc b/site/assets/data/faces/may.drc
new file mode 100644
index 00000000..819ebbf6
--- /dev/null
+++ b/site/assets/data/faces/may.drc
Binary files differ
diff --git a/site/assets/data/faces/xi.drc b/site/assets/data/faces/xi.drc
new file mode 100644
index 00000000..ef90c1c7
--- /dev/null
+++ b/site/assets/data/faces/xi.drc
Binary files differ