Skip to content
This repository was archived by the owner on Jan 24, 2020. It is now read-only.

[WIP] exo-bot tutorial voiceover #50

Open
wants to merge 148 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
148 commits
Select commit Hold shift + click to select a range
7683120
Merge pull request #1 from exokitxr/master
chrislatorres Jun 2, 2019
4e3bc30
Merge branch 'master' of github.com:chrisplatorres/studio
chrislatorres Jun 2, 2019
5394f84
make supported devices list more verbose
chrislatorres Jun 2, 2019
155c095
Merge pull request #1 from chrisplatorres/master
Jun 3, 2019
accabac
Update graffiti_ml example
Jun 3, 2019
0f4fe55
Add WebXR sample as a loadable example
Jun 3, 2019
30fefb1
Merge pull request #2 from exokitxr/master
chrislatorres Jun 6, 2019
e2ed008
Add exobot.html example
Jun 8, 2019
e34437e
Default viewport vector to all zeroes
Jun 8, 2019
e47b88b
Merge pull request #16 from exokitxr/viewport-cleanup
Jun 8, 2019
d7016fa
hide controller ray when orbit controls is present
chrislatorres Jun 9, 2019
3f5c5e0
add and tracking currentSession global variable and set visibility ba…
chrislatorres Jun 9, 2019
426bfc7
remove currentSession and move ray visiiblity toggling to points of c…
chrislatorres Jun 9, 2019
5aec43f
Remove dead ui/index.html
Jun 9, 2019
aac3a02
Make engine render background green
Jun 9, 2019
810dad6
Merge pull request #22 from exokitxr/green
Jun 9, 2019
ee5a620
Refactor studio compose into shader/greenscreen-based
Jun 9, 2019
c153ca1
Major greenscreen viewport bugfixing
Jun 9, 2019
82a5427
Clean up dead code
Jun 9, 2019
d1d2484
Bugfix settings background color css
Jun 9, 2019
ad3b2e6
Merge pull request #23 from exokitxr/green-screen
Jun 9, 2019
32ae7ad
Merge pull request #19 from exokitxr/controller-hide-ray
chrislatorres Jun 9, 2019
7b2f2a1
remove console resize
chrislatorres Jun 9, 2019
0a8c15f
set open console % and fixed y scoll and no overflow x
chrislatorres Jun 9, 2019
fc5faff
align console to bottom by default:
chrislatorres Jun 10, 2019
1b011a7
add console opening min height and make it fill 100% height
chrislatorres Jun 10, 2019
05a4009
re-enable resizable console
chrislatorres Jun 10, 2019
6569e6c
update resizable size on console open toggle
chrislatorres Jun 10, 2019
7923601
set resizable minheight with console toggle
chrislatorres Jun 10, 2019
8f33bc7
set minHeight in render
chrislatorres Jun 10, 2019
731a76c
remove ref attribute in resizble
chrislatorres Jun 10, 2019
2b83469
Merge pull request #24 from exokitxr/fixed-console
Jun 10, 2019
fa6ca59
remove kitchen sink example from dropdown
chrislatorres Jun 10, 2019
2c8eff2
Merge pull request #29 from exokitxr/remove-kitchensink
chrislatorres Jun 10, 2019
2d1c9cf
add absolute position and high z-index for iframe dropdown menu to ov…
chrislatorres Jun 10, 2019
e46f9b1
change z-index to 1
chrislatorres Jun 10, 2019
d6c8f51
Merge pull request #33 from exokitxr/iframe-dropdown-overlay
Jun 10, 2019
8be765b
fix sending mouse movements only when orbit controls present
chrislatorres Jun 10, 2019
f6ed097
Merge pull request #34 from exokitxr/drag-over
Jun 10, 2019
98ecf61
Rename Exokit Launcher -> Exokit Studio
Jun 10, 2019
687feea
Major externalization of recomposition
Jun 11, 2019
5d0a3d9
Refactor viewport emit to be pixel-based
Jun 11, 2019
3ae92f8
Make engine render transparent
Jun 11, 2019
03a0bf8
Dead code cleanup
Jun 11, 2019
94584da
Emit EngineRender mouse events
Jun 11, 2019
be16d8a
Make engine render component css non-selectable
Jun 11, 2019
8c046c6
Merge branch 'master' into alpha-compose
Jun 11, 2019
074d68f
Remove uiFrame send inputs injections
Jun 11, 2019
cfee4bd
Add move event listener
Jun 11, 2019
eeab379
Add top level renderer dom element to document body
Jun 13, 2019
1f99c42
Do not propagate engine window resize to ui frame resize
Jun 13, 2019
3b085b6
Bugfix getBoundingClientRect typos
Jun 13, 2019
fe446af
Bugfix unbindEvents function binding
Jun 13, 2019
8e1d86a
Bugfix viewportMouseClick -> viewportClick
Jun 13, 2019
29fcf2f
Move/resize event debugging
Jun 13, 2019
b592576
Use window messages for resize handlikng
Jun 13, 2019
8e60bd1
Make background transparent
Jun 15, 2019
dc7aa0a
Remove dead move event code
Jun 15, 2019
82241c9
Set renderer dom element focus on fake xr click
Jun 15, 2019
da92125
Handle move and resize events
Jun 15, 2019
a638d23
Clean up viewport emits
Jun 15, 2019
1d45135
Default to full viewport
Jun 15, 2019
a33e83a
Clean up dead viewport tracking code
Jun 15, 2019
74efd13
Clean up viewport tracking
Jun 15, 2019
755c886
Bugfix fake xr focus not sticking
Jun 15, 2019
75c7d7e
Dead code removal
Jun 15, 2019
35580a9
Add focus/blur event handling
Jun 15, 2019
a7ca0ab
Add minimize/restore events handling
Jun 15, 2019
b98e51d
Clean up engine render event handling
Jun 15, 2019
0c0d917
Make settings background non-transparent
Jun 15, 2019
91accea
Engine.jsx cleanup
Jun 16, 2019
e539ffe
Merge pull request #35 from exokitxr/alpha-compose
Jun 16, 2019
8fbad04
Remove uiFrame resize handling
Jun 18, 2019
59b8a5e
Add bring UI to top logic
Jun 18, 2019
c0b4492
Trigger bring UI to top on pointer lock change
Jun 18, 2019
46489ed
More pointer lock focus cleanup
Jun 18, 2019
9fc0df1
move settings
chrislatorres Jun 20, 2019
da04245
Merge pull request #43 from exokitxr/fix-setting-back
chrislatorres Jun 20, 2019
9aff891
Add grid animation
Jun 23, 2019
c58632f
Add room grid
Jun 24, 2019
fdcf200
Add target mesh
Jun 24, 2019
27e7682
Adjust target location derivation
Jun 24, 2019
a79b72a
Major grid alignment work
Jun 24, 2019
ebcb1d2
Add room dimensions set support
Jun 24, 2019
29d2d87
Add room highlight support
Jun 24, 2019
68e45f0
Add tray mesh
Jun 24, 2019
b233925
Add room links meshes
Jun 24, 2019
49f6bb4
Add initial menu ui
Jun 24, 2019
e282285
Clean up iframe initialization
Jun 24, 2019
a9671d4
Tray mesh positioning cleanup
Jun 24, 2019
572b934
Clean up room link mesh pointing
Jun 24, 2019
d5ea165
Add room diagram mesh support
Jun 24, 2019
561868b
Add tray reset key
Jun 24, 2019
14d8f3c
Add room classification support
Jun 24, 2019
fac359c
Hook in room classification to tray diagrams
Jun 24, 2019
b2b1b78
Bugfix room link mesh destination alignment
Jun 24, 2019
f8fcaa4
Add initial grid volume adding
Jun 24, 2019
0f715d7
Add initial menu page source
Jun 25, 2019
8e43bd6
Add volume/portal meshes support
Jun 25, 2019
e964a31
More reality tabs volume management work
Jun 25, 2019
0f2a086
Re-add menu support in index.html
Jun 25, 2019
72fca90
Add missing x.png image
Jun 25, 2019
a7803bb
Menu ui cleanup
Jun 25, 2019
41850da
Bugfix plane draw alignment
Jun 25, 2019
3146d31
Add menu mesh controller mesh raycasting
Jun 25, 2019
67b77b6
Dead code cleanup
Jun 26, 2019
a330e42
Add portal mesh world alignment
Jun 26, 2019
3bc60a9
More portal alignment bugfixing
Jun 26, 2019
cc8f9ac
Dead code cleanup
Jun 26, 2019
a458ab6
Disable depthWrite for roomMesh
Jun 26, 2019
e045bd0
Dead code removal
Jun 26, 2019
09c7ba3
Add menu click tracking
Jun 26, 2019
85d37a8
Tabs management menu cleanup
Jun 26, 2019
61b2e45
Clean up URL entry
Jun 26, 2019
a2c27c7
More menu cleanup
Jun 26, 2019
d0fb69d
Add send mouse move flow to menu hovering
Jun 26, 2019
e2b468a
More menu refactoring
Jun 27, 2019
e34cd49
Add tabs management
Jun 27, 2019
decce09
Major tab management HTML integration work
Jun 27, 2019
6c9cb4e
Clean up mouse move event buttons
Jun 27, 2019
4726ca3
Commenting cleanup
Jun 27, 2019
63ab17f
Bugfix room removal
Jun 27, 2019
2f75538
Bugfix open tab
Jun 27, 2019
414d824
Add cubic bezier source file
Jun 27, 2019
04118a2
Include cubic bezier source
Jun 27, 2019
69f40dd
Animate menu
Jun 27, 2019
e9763b3
Make only right controller pointable
Jun 27, 2019
284b059
Remove root studio UI
Jun 27, 2019
b2295a8
Add rain.html example
Jun 29, 2019
6867f5b
Minimize menu package.json
Jun 29, 2019
f6426f0
Update local package.json to exoland
Jun 29, 2019
a3262cc
Create CNAME
Jun 29, 2019
6115439
Add initial css
Jun 29, 2019
2d6f36b
Merge pull request #48 from exokitxr/grid
Jun 29, 2019
28949cf
Debugging regular browser case
Jun 29, 2019
b935a8a
More fake xr debugging
Jun 29, 2019
8c3f4ed
More grid debugging
Jun 29, 2019
19f4c73
Add background.mp3
Jun 29, 2019
f65895e
Add autoplay audio
Jun 29, 2019
55f4d5c
Add buildings.glb model source
Jun 29, 2019
5e9c6a3
Dead code cleanup
Jun 29, 2019
b175cd2
Update camera far
Jun 29, 2019
fee0fc9
Increase directional light intensity
Jun 29, 2019
c0152ac
Clean up buildings rendering
Jun 29, 2019
233051b
Update README.md
Jun 29, 2019
2f1689f
Merge pull request #49 from cmdrflexo/patch-1
Jun 29, 2019
a865eab
add positional audio on exobot
chrislatorres Jun 29, 2019
3e5a60a
add exobot mp3
chrislatorres Jun 29, 2019
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
647 changes: 647 additions & 0 deletions BufferGeometryUtils.js

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions CNAME
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
exo.land
90 changes: 90 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
<h1 align="center">Exoland</h1>
<p align="center"><b>An interface for the <a href="https://github.com/exokitxr/exokit">Exokit Engine</a>.</b></p>

<p align="center">
<a href="https://github.com/exokitxr/exoland/releases"><img src="https://img.shields.io/github/downloads/exokitxr/exoland/total.svg"></a>
<a href="https://www.npmjs.com/package/exokit-exoland"><img src="https://img.shields.io/npm/v/exokit-exoland.svg"></a>
<a href="https://github.com/exokitxr/exoland/issues"><img src="https://img.shields.io/github/issues/exokitxr/exoland.svg"></a>
<a href="https://github.com/exokitxr/exoland"><img src="https://img.shields.io/github/forks/exokitxr/exoland.svg"></a>
<a href="https://github.com/exokitxr/exoland"><img src="https://img.shields.io/github/stars/exokitxr/exoland.svg"></a>
<a href="https://twitter.com/exokitxr"><img src="https://img.shields.io/twitter/follow/exokitxr.svg?style=social"></a>
</p>

<div align="center">
<a href="https://exokit.org">Site</a>
&mdash;
<a href="https://exokit.org/docs/">Docs</a>
&mdash;
<a href="https://discordapp.com/invite/Apk6cZN">Discord</a>
&mdash;
<a href="https://twitter.com/exokitxr">Twitter</a>
&mdash;
<a href="http://eepurl.com/dFiLMz">Email List</a>
</div>

## Examples

<a href="https://youtu.be/cd_DEwCDF6U"><img alt="Hands Reality Tab" target="_blank" src="https://user-images.githubusercontent.com/29695350/58765576-07fb0700-853a-11e9-9d16-42abbef42014.PNG" height="190" width="32%"></a>
<a href="https://youtu.be/b-UKSg0QCRE"><img alt="Live Reload Magic Leap" target="_blank" src="https://user-images.githubusercontent.com/29695350/58765576-07fb0700-853a-11e9-9d16-42abbef42014.PNG" height="190" width="32%"></a>
<a href="https://youtu.be/O1xA1r5SZUM"><img alt="Tutorial Reality Tab" target="_blank" src="https://user-images.githubusercontent.com/29695350/58765576-07fb0700-853a-11e9-9d16-42abbef42014.PNG" height="190" width="32%"></a>

<a href="https://www.youtube.com/watch?v=m_QntqZmd_Q"><img alt="Reality Projection with HTC Vive and Magic Leap" target="_blank" src="https://user-images.githubusercontent.com/29695350/58765577-09c4ca80-853a-11e9-8db2-46e26a9aad8b.PNG" height="190" width="32%"></a>
<a href="https://youtu.be/i0MXRCNkdB4"><img alt="Emukit" target="_blank" src="https://user-images.githubusercontent.com/29695350/58765577-09c4ca80-853a-11e9-8db2-46e26a9aad8b.PNG" height="190" width="32%"></a>
<a href="https://exokit.org/"><img alt="Various Exokit Apps" target="_blank" src="https://user-images.githubusercontent.com/29695350/58765577-09c4ca80-853a-11e9-8db2-46e26a9aad8b.PNG" height="190" width="32%"></a>

*Find more examples on [YouTube](https://www.youtube.com/channel/UC87Q7_5ooY8FSLwOec52ZPQ).*


## Overview

Exoland **enables developers to build XR experiences with ease** by having a seamless interface to the Exokit Engine. Exoland prefers using GUIs instead of command lines with difficult to remember arguments to use the functionality you want.

Exoland uses the [Exokit Engine](https://github.com/exokitxr/exokit), which is written on top of Node and emulates a web browser, providing native hooks for WebGL, WebGL2, WebVR, WebXR, WebAudio, and other APIs used in immersive experiences.

:eyeglasses: **Exokit Engine currently targets the following platforms**:
* OpenVR Desktop VR (Steam compatible)
* HTC Vive
* Valve Index *
* Oculus Desktop (Oculus Rift, Oculus Rift S)
* Oculus Mobile (Oculus Quest, Oculus Go, GearVR)
* Magic Leap
* iOS ARKit *
* Android ARCore *
* Google VR (Daydream / Cardboard / Mirage Solo) *
* Hololens / Hololens 2 *
* any XR device, start a [pull request](https://github.com/exokitxr/exokit/compare) to the Exokit Engine with a native binding if it isn't listed here! *

\* not supported yet

:electric_plug: **Exokit Engine powers experiences built with**:
* Three.js
* Unity
* Pixi.js
* Babylon.js
* A-Frame
* Custom WebGL frameworks
* WebAssembly, TypeScript, and any language that transpiles to JavaScript
* Unity WebVR export *
* SteamVR *
* any 3d web framework, start a [pull request](https://github.com/exokitxr/exokit/compare) to the Exokit Engine if a 3d web framework isn't currently supported! *

\* not supported yet

## Quickstart

### Desktop
<h4><a href="https://get.exokit.org">Download and install Exoland for current OS</a></h4>

### Local Development

```sh
git clone https://github.com/exokitxr/exoland.git
cd exoland
npm install
npm build
```

## Stay in Touch

- [Join our Discord](https://discord.gg/Apk6cZN) for discussions.
- [Follow @exokitxr on Twitter](https://twitter.com/exokitxr) for updates.
Binary file added background.mp3
Binary file not shown.
Binary file added buildings.glb
Binary file not shown.
111 changes: 111 additions & 0 deletions cubicBezier.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
/**
* https://github.com/gre/bezier-easing
* BezierEasing - use bezier curve for transition easing function
* by Gaëtan Renaudeau 2014 - 2015 – MIT License
*/

const cubicBezier = (() => {

// These values are established by empiricism with tests (tradeoff: performance VS precision)
var NEWTON_ITERATIONS = 4;
var NEWTON_MIN_SLOPE = 0.001;
var SUBDIVISION_PRECISION = 0.0000001;
var SUBDIVISION_MAX_ITERATIONS = 10;

var kSplineTableSize = 11;
var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);

var float32ArraySupported = typeof Float32Array === 'function';

function A (aA1, aA2) { return 1.0 - 3.0 * aA2 + 3.0 * aA1; }
function B (aA1, aA2) { return 3.0 * aA2 - 6.0 * aA1; }
function C (aA1) { return 3.0 * aA1; }

// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.
function calcBezier (aT, aA1, aA2) { return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT; }

// Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.
function getSlope (aT, aA1, aA2) { return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1); }

function binarySubdivide (aX, aA, aB, mX1, mX2) {
var currentX, currentT, i = 0;
do {
currentT = aA + (aB - aA) / 2.0;
currentX = calcBezier(currentT, mX1, mX2) - aX;
if (currentX > 0.0) {
aB = currentT;
} else {
aA = currentT;
}
} while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);
return currentT;
}

function newtonRaphsonIterate (aX, aGuessT, mX1, mX2) {
for (var i = 0; i < NEWTON_ITERATIONS; ++i) {
var currentSlope = getSlope(aGuessT, mX1, mX2);
if (currentSlope === 0.0) {
return aGuessT;
}
var currentX = calcBezier(aGuessT, mX1, mX2) - aX;
aGuessT -= currentX / currentSlope;
}
return aGuessT;
}

function LinearEasing (x) {
return x;
}

return function bezier (mX1, mY1, mX2, mY2) {
if (!(0 <= mX1 && mX1 <= 1 && 0 <= mX2 && mX2 <= 1)) {
throw new Error('bezier x values must be in [0, 1] range');
}

if (mX1 === mY1 && mX2 === mY2) {
return LinearEasing;
}

// Precompute samples table
var sampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);
for (var i = 0; i < kSplineTableSize; ++i) {
sampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);
}

function getTForX (aX) {
var intervalStart = 0.0;
var currentSample = 1;
var lastSample = kSplineTableSize - 1;

for (; currentSample !== lastSample && sampleValues[currentSample] <= aX; ++currentSample) {
intervalStart += kSampleStepSize;
}
--currentSample;

// Interpolate to provide an initial guess for t
var dist = (aX - sampleValues[currentSample]) / (sampleValues[currentSample + 1] - sampleValues[currentSample]);
var guessForT = intervalStart + dist * kSampleStepSize;

var initialSlope = getSlope(guessForT, mX1, mX2);
if (initialSlope >= NEWTON_MIN_SLOPE) {
return newtonRaphsonIterate(aX, guessForT, mX1, mX2);
} else if (initialSlope === 0.0) {
return guessForT;
} else {
return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);
}
}

return function BezierEasing (x) {
// Because JavaScript number are imprecise, we should guarantee the extremes are right.
if (x === 0) {
return 0;
}
if (x === 1) {
return 1;
}
return calcBezier(getTForX(x), mY1, mY2);
};
};

})();
149 changes: 149 additions & 0 deletions exobot.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#008000"/>
<title>exobot</title>
<link rel="manifest" href="exobot_manifest.json">
<script>
if('serviceWorker' in navigator) {
navigator.serviceWorker.register('/exobot_sw.js')
.then(function() {
console.log('Service Worker Registered');
});
}
</script>
<style>
body {
margin: 0;
}
</style>
</head>
<body>
<h1>exobot</h1>
<script src="three.js"></script>
<script src="GLTFLoader.js"></script>
<script>
let container, scene, camera, session, model;

function init() {
container = document.createElement('div');
document.body.appendChild(container);

scene = new THREE.Scene();
scene.matrixAutoUpdate = false;
// scene.background = new THREE.Color(0x3B3961);

camera = new THREE.PerspectiveCamera(60, window.innerWidth / window.innerHeight, 0.1, 1000);
// camera.position.set(0, 1, 0);
camera.lookAt(new THREE.Vector3());
scene.add(camera);

const ambientLight = new THREE.AmbientLight(0x808080);
scene.add(ambientLight);

const directionalLight = new THREE.DirectionalLight(0xFFFFFF, 1);
directionalLight.position.set(1, 1, 1);
scene.add(directionalLight);

{
const loader = new THREE.GLTFLoader(); // .setPath( 'models/' );
loader.load( 'exobot.glb', function ( o ) {

o = o.scene;

// o.position.z = -1;
o.rotation.order = 'YXZ';
o.scale.set(0.2, 0.2, 0.2);
/* o.traverse(e => {
e.castShadow = true;
}); */

/* o.quaternion.setFromUnitVectors(
new THREE.Vector3(0, 0, -1),
new THREE.Vector3(0, 0, 1)
); */
o.updateMatrixWorld();
// o.frustumCulled = false;
for (let i = 0; i < o.children.length; i++) {
o.children[i].frustumCulled = false;
}

model = o;

scene.add(o);
// scene.add(o.children[0]);
// scene.add(o.children[0]);

}, undefined, function ( e ) {

console.error( e );

} );
}

renderer = new THREE.WebGLRenderer({
antialias: true,
alpha: true,
});
renderer.setPixelRatio(window.devicePixelRatio);
renderer.setSize(window.innerWidth, window.innerHeight);

// window.browser.magicleap.RequestDepthPopulation(true);
// renderer.autoClear = false;

container.appendChild(renderer.domElement);

renderer.setAnimationLoop(animate);
}

function animate(time, frame) {
if (model) {
const animationTime = 4000;
const f = ((Date.now() % animationTime) / animationTime) * (Math.PI * 2);
model.position.y = Math.sin(f) * 0.05;
model.rotation.y = Math.sin(f*2) * Math.PI*2*0.05;
model.rotation.z = Math.cos(f*2) * Math.PI*2*0.05;
model.updateMatrixWorld();
}

renderer.render(scene, renderer.vr.enabled ? renderer.vr.getCamera(camera) : camera);
}

init();

(async () => {
console.log('request session');
session = await navigator.xr.requestSession({
exclusive: true,
}).catch(err => Promise.resolve(null));

if (session) {
// console.log('request first frame');
session.requestAnimationFrame((timestamp, frame) => {
renderer.vr.setSession(session, {
frameOfReferenceType: 'stage',
});

const {views} = frame.getViewerPose();
const viewport = session.baseLayer.getViewport(views[0]);
const width = viewport.width;
const height = viewport.height;

renderer.setSize(width * 2, height);

renderer.setAnimationLoop(null);

renderer.vr.enabled = true;
renderer.vr.setAnimationLoop(animate);

console.log('running!');
});
} else {
console.log('no xr devices');
}
})();
</script>
</body>
</html>
2 changes: 1 addition & 1 deletion graffiti_ml.html
Original file line number Diff line number Diff line change
Expand Up @@ -331,7 +331,7 @@ <h1>graffiti_ml</h1>
scene.add(controllerMesh);
});

const cubeGeometry = new THREE.BoxBufferGeometry(0.02, 0.02, 0.001);
const cubeGeometry = new THREE.BoxBufferGeometry(0.05, 0.05, 0.05);
const hitMeshMaterial = new THREE.MeshPhongMaterial({
color: 0x673ab7,
});
Expand Down
Loading