Skip to content

Commit 4a6ed73

Browse files
committed
Add comments for educational purposes
1 parent 13f8dca commit 4a6ed73

File tree

1 file changed

+28
-10
lines changed

1 file changed

+28
-10
lines changed

‎examples/showcase/model-viewer/model-viewer.js‎

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
AFRAME.registerComponent('model-viewer', {
33
schema: {
44
gltfModel: {default: ''},
5-
title: {default: ''}
5+
title: {default: ''},
6+
uploadUIEnabled: {default: true}
67
},
78
init: function () {
89
var el = this.el;
@@ -34,29 +35,33 @@ AFRAME.registerComponent('model-viewer', {
3435

3536
this.onOrientationChange = this.onOrientationChange.bind(this);
3637

37-
this.initModelEntities();
38+
this.initEntities();
3839
this.initBackground();
3940
this.initCameraRig();
40-
this.initUploadInput();
41+
42+
if (this.data.uploadUIEnabled) { this.initUploadInput(); }
4143

4244
// Disable context menu on canvas when pressing mouse right button;
4345
this.el.sceneEl.canvas.oncontextmenu = function (evt) { evt.preventDefault(); };
4446

4547
window.addEventListener('orientationchange', this.onOrientationChange);
4648

49+
// VR controls.
4750
this.laserHitPanelEl.addEventListener('mousedown', this.onMouseDownLaserHitPanel);
4851
this.laserHitPanelEl.addEventListener('mouseup', this.onMouseUpLaserHitPanel);
4952

5053
this.leftHandEl.addEventListener('thumbstickmoved', this.onThumbstickMoved);
5154
this.rightHandEl.addEventListener('thumbstickmoved', this.onThumbstickMoved);
5255

56+
// Mouse 2D controls.
5357
document.addEventListener('mouseup', this.onMouseUp);
5458
document.addEventListener('mousemove', this.onMouseMove);
5559
document.addEventListener('mousedown', this.onMouseDown);
60+
document.addEventListener('wheel', this.onMouseWheel);
5661

62+
// Mobile 2D controls.
5763
document.addEventListener('touchend', this.onTouchEnd);
5864
document.addEventListener('touchmove', this.onTouchMove);
59-
document.addEventListener('wheel', this.onMouseWheel);
6065

6166
this.el.sceneEl.addEventListener('enter-vr', this.onEnterVR);
6267
this.el.sceneEl.addEventListener('exit-vr', this.onExitVR);
@@ -172,17 +177,27 @@ AFRAME.registerComponent('model-viewer', {
172177
backgroundEl.setAttribute('hide-on-enter-ar', '');
173178
},
174179

175-
initModelEntities: function () {
180+
initEntities: function () {
181+
// Container for our entities to keep the scene clean and tidy.
176182
var containerEl = this.containerEl = document.createElement('a-entity');
183+
// Plane used as a hit target for laser controls when in VR mode
177184
var laserHitPanelEl = this.laserHitPanelEl = document.createElement('a-entity');
185+
// Models are often not centered on the 0,0,0.
186+
// We will center the model and rotate a pivot.
178187
var modelPivotEl = this.modelPivotEl = document.createElement('a-entity');
188+
// This is our glTF model entity.
179189
var modelEl = this.modelEl = document.createElement('a-entity');
190+
// Shadow blurb for 2D and VR modes. Scaled to match the size of the model.
180191
var shadowEl = this.shadowEl = document.createElement('a-entity');
192+
// Real time shadow only used in AR mode.
181193
var arShadowEl = this.arShadowEl = document.createElement('a-entity');
194+
// The title / legend displayed above the model.
182195
var titleEl = this.titleEl = document.createElement('a-entity');
196+
// Reticle model used to position the model in AR mode.
197+
var reticleEl = this.reticleEl = document.createElement('a-entity');
198+
// Scene ligthing.
183199
var lightEl = this.lightEl = document.createElement('a-entity');
184200
var sceneLightEl = this.sceneLightEl = document.createElement('a-entity');
185-
var reticleEl = this.reticleEl = document.createElement('a-entity');
186201

187202
sceneLightEl.setAttribute('light', {
188203
type: 'hemisphere',
@@ -450,20 +465,24 @@ AFRAME.registerComponent('model-viewer', {
450465
var titleEl = this.titleEl;
451466
var gltfObject = modelEl.getObject3D('mesh');
452467

468+
// Reset position and scales.
453469
modelEl.object3D.position.set(0, 0, 0);
454470
modelEl.object3D.scale.set(1.0, 1.0, 1.0);
455471
this.cameraRigEl.object3D.position.z = 3.0;
456472

473+
// Calculate model size.
457474
modelEl.object3D.updateMatrixWorld();
458475
box = new THREE.Box3().setFromObject(gltfObject);
459476
size = box.getSize(new THREE.Vector3());
460477

461-
// Human scale.
478+
// Calculate scale factor to resize model to human scale.
462479
scale = 1.6 / size.y;
463480
scale = 2.0 / size.x < scale ? 2.0 / size.x : scale;
464481
scale = 2.0 / size.z < scale ? 2.0 / size.z : scale;
465482

466483
modelEl.object3D.scale.set(scale, scale, scale);
484+
485+
// Center model at (0, 0, 0).
467486
modelEl.object3D.updateMatrixWorld();
468487
box = new THREE.Box3().setFromObject(gltfObject);
469488
center = box.getCenter(new THREE.Vector3());
@@ -484,13 +503,12 @@ AFRAME.registerComponent('model-viewer', {
484503
modelEl.object3D.position.y = -center.y;
485504
modelEl.object3D.position.z = -center.z;
486505

506+
// When in mobile landscape we want to bring the model a bit closer.
487507
if (AFRAME.utils.device.isLandscape()) { this.cameraRigEl.object3D.position.z -= 1; }
488508
},
489509

490510
onMouseDown: function (evt) {
491-
if (evt.buttons) {
492-
this.leftRightButtonPressed = evt.buttons === 3;
493-
}
511+
if (evt.buttons) { this.leftRightButtonPressed = evt.buttons === 3; }
494512
this.oldClientX = evt.clientX;
495513
this.oldClientY = evt.clientY;
496514
}

0 commit comments

Comments
 (0)