|
@@ -4,58 +4,58 @@ if (typeof AFRAME === 'undefined') {
|
|
|
|
|
|
AFRAME.registerComponent('linepath', {
|
|
AFRAME.registerComponent('linepath', {
|
|
schema: {
|
|
schema: {
|
|
- color: { default: '#000' },
|
|
|
|
- width: { default: 0.01 },
|
|
|
|
- path: {
|
|
|
|
- default: [
|
|
|
|
- { x: -0.5, y: 0, z: 0 },
|
|
|
|
- { x: 0.5, y: 0, z: 0 }
|
|
|
|
- ]
|
|
|
|
-
|
|
|
|
- // Deserialize path in the form of comma-separated vec3s: `0 0 0, 1 1 1, 2 0 3`.
|
|
|
|
- // parse: function (value) {
|
|
|
|
- // return value.split(',').map(coordinates.parse);
|
|
|
|
- // },
|
|
|
|
-
|
|
|
|
- // Serialize array of vec3s in case someone does setAttribute('line', 'path', [...]).
|
|
|
|
- // stringify: function (data) {
|
|
|
|
- // return data.map(coordinates.stringify).join(',');
|
|
|
|
- // }
|
|
|
|
- }
|
|
|
|
|
|
+ color: { default: '#000' },
|
|
|
|
+ width: { default: 0.01 },
|
|
|
|
+ path: {
|
|
|
|
+ default: [
|
|
|
|
+ { x: -0.5, y: 0, z: 0 },
|
|
|
|
+ { x: 0.5, y: 0, z: 0 }
|
|
|
|
+ ]
|
|
|
|
+
|
|
|
|
+ // Deserialize path in the form of comma-separated vec3s: `0 0 0, 1 1 1, 2 0 3`.
|
|
|
|
+ // parse: function (value) {
|
|
|
|
+ // return value.split(',').map(coordinates.parse);
|
|
|
|
+ // },
|
|
|
|
+
|
|
|
|
+ // Serialize array of vec3s in case someone does setAttribute('line', 'path', [...]).
|
|
|
|
+ // stringify: function (data) {
|
|
|
|
+ // return data.map(coordinates.stringify).join(',');
|
|
|
|
+ // }
|
|
|
|
+ }
|
|
},
|
|
},
|
|
-
|
|
|
|
|
|
+
|
|
update: function () {
|
|
update: function () {
|
|
- var material = new MeshLineMaterial({
|
|
|
|
|
|
+ var material = new MeshLineMaterial({
|
|
color: new THREE.Color(this.data.color), //this.data.color
|
|
color: new THREE.Color(this.data.color), //this.data.color
|
|
lineWidth: this.data.width
|
|
lineWidth: this.data.width
|
|
- });
|
|
|
|
-
|
|
|
|
- var geometry = new THREE.Geometry();
|
|
|
|
- this.data.path.forEach(function (vec3) {
|
|
|
|
- geometry.vertices.push(
|
|
|
|
- new THREE.Vector3(vec3.x, vec3.y, vec3.z)
|
|
|
|
- );
|
|
|
|
- });
|
|
|
|
-
|
|
|
|
- let line = new MeshLine();
|
|
|
|
- line.setGeometry( geometry );
|
|
|
|
|
|
+ });
|
|
|
|
|
|
-//new THREE.Line(geometry, material)
|
|
|
|
|
|
+ var geometry = new THREE.Geometry();
|
|
|
|
+ this.data.path.forEach(function (vec3) {
|
|
|
|
+ geometry.vertices.push(
|
|
|
|
+ new THREE.Vector3(vec3.x, vec3.y, vec3.z)
|
|
|
|
+ );
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ let line = new MeshLine();
|
|
|
|
+ line.setGeometry(geometry);
|
|
|
|
|
|
- this.el.setObject3D('mesh', new THREE.Mesh( line.geometry, material ));
|
|
|
|
|
|
+ //new THREE.Line(geometry, material)
|
|
|
|
+
|
|
|
|
+ this.el.setObject3D('mesh', new THREE.Mesh(line.geometry, material));
|
|
},
|
|
},
|
|
-
|
|
|
|
|
|
+
|
|
remove: function () {
|
|
remove: function () {
|
|
- this.el.removeObject3D('mesh');
|
|
|
|
|
|
+ this.el.removeObject3D('mesh');
|
|
}
|
|
}
|
|
- });
|
|
|
|
|
|
+});
|
|
|
|
|
|
|
|
|
|
AFRAME.registerComponent('gizmo', {
|
|
AFRAME.registerComponent('gizmo', {
|
|
|
|
|
|
schema: {
|
|
schema: {
|
|
mode: { default: 'translate' }
|
|
mode: { default: 'translate' }
|
|
- },
|
|
|
|
|
|
+ },
|
|
|
|
|
|
update: function (old) {
|
|
update: function (old) {
|
|
let modes = ['translate', 'rotate', 'scale'];
|
|
let modes = ['translate', 'rotate', 'scale'];
|
|
@@ -64,8 +64,8 @@ AFRAME.registerComponent('gizmo', {
|
|
return el == this.data.mode
|
|
return el == this.data.mode
|
|
})
|
|
})
|
|
if (newMode.length !== 0) {
|
|
if (newMode.length !== 0) {
|
|
- this.mode = this.data.mode
|
|
|
|
- this.transformControls.setMode(this.mode)
|
|
|
|
|
|
+ this.mode = this.data.mode
|
|
|
|
+ this.transformControls.setMode(this.mode)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
},
|
|
@@ -78,50 +78,50 @@ AFRAME.registerComponent('gizmo', {
|
|
|
|
|
|
this.transformControls = new THREE.TransformControls(activeCamera, renderer.domElement);
|
|
this.transformControls = new THREE.TransformControls(activeCamera, renderer.domElement);
|
|
|
|
|
|
- this.transformControls.attach( this.el.object3D);
|
|
|
|
- this.el.sceneEl.setObject3D('control-'+this.el.id, this.transformControls);
|
|
|
|
|
|
+ this.transformControls.attach(this.el.object3D);
|
|
|
|
+ this.el.sceneEl.setObject3D('control-' + this.el.id, this.transformControls);
|
|
|
|
|
|
this.transformControls.addEventListener('change', function (evt) {
|
|
this.transformControls.addEventListener('change', function (evt) {
|
|
- // console.log('changed');
|
|
|
|
|
|
+ // console.log('changed');
|
|
var object = self.transformControls.object;
|
|
var object = self.transformControls.object;
|
|
if (object === undefined) {
|
|
if (object === undefined) {
|
|
- return;
|
|
|
|
|
|
+ return;
|
|
}
|
|
}
|
|
|
|
|
|
var transformMode = self.transformControls.getMode();
|
|
var transformMode = self.transformControls.getMode();
|
|
switch (transformMode) {
|
|
switch (transformMode) {
|
|
- case 'translate':
|
|
|
|
- vwf_view.kernel.setProperty(object.el.id, 'position',
|
|
|
|
- [object.position.x, object.position.y, object.position.z] )
|
|
|
|
-
|
|
|
|
- break;
|
|
|
|
- case 'rotate':
|
|
|
|
- vwf_view.kernel.setProperty(object.el.id, 'rotation',
|
|
|
|
- [THREE.Math.radToDeg(object.rotation.x), THREE.Math.radToDeg(object.rotation.y), THREE.Math.radToDeg(object.rotation.z)] )
|
|
|
|
-
|
|
|
|
- break;
|
|
|
|
- case 'scale':
|
|
|
|
- vwf_view.kernel.setProperty(object.el.id, 'scale',
|
|
|
|
- [object.scale.x, object.scale.y, object.scale.z] )
|
|
|
|
-
|
|
|
|
- break;
|
|
|
|
|
|
+ case 'translate':
|
|
|
|
+ vwf_view.kernel.setProperty(object.el.id, 'position',
|
|
|
|
+ [object.position.x, object.position.y, object.position.z])
|
|
|
|
+
|
|
|
|
+ break;
|
|
|
|
+ case 'rotate':
|
|
|
|
+ vwf_view.kernel.setProperty(object.el.id, 'rotation',
|
|
|
|
+ [THREE.Math.radToDeg(object.rotation.x), THREE.Math.radToDeg(object.rotation.y), THREE.Math.radToDeg(object.rotation.z)])
|
|
|
|
+
|
|
|
|
+ break;
|
|
|
|
+ case 'scale':
|
|
|
|
+ vwf_view.kernel.setProperty(object.el.id, 'scale',
|
|
|
|
+ [object.scale.x, object.scale.y, object.scale.z])
|
|
|
|
+
|
|
|
|
+ break;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
//vwf_view.kernel.fireEvent(evt.detail.target.id, "clickEvent")
|
|
//vwf_view.kernel.fireEvent(evt.detail.target.id, "clickEvent")
|
|
- });
|
|
|
|
|
|
+ });
|
|
},
|
|
},
|
|
|
|
|
|
remove: function () {
|
|
remove: function () {
|
|
this.transformControls.detach();
|
|
this.transformControls.detach();
|
|
- this.el.sceneEl.removeObject3D('control-'+this.el.id);
|
|
|
|
-
|
|
|
|
- },
|
|
|
|
|
|
+ this.el.sceneEl.removeObject3D('control-' + this.el.id);
|
|
|
|
+
|
|
|
|
+ },
|
|
|
|
|
|
tick: function (t) {
|
|
tick: function (t) {
|
|
this.transformControls.update();
|
|
this.transformControls.update();
|
|
}
|
|
}
|
|
|
|
|
|
- });
|
|
|
|
|
|
+});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -129,15 +129,15 @@ AFRAME.registerComponent('cursor-listener', {
|
|
init: function () {
|
|
init: function () {
|
|
this.el.addEventListener('click', function (evt) {
|
|
this.el.addEventListener('click', function (evt) {
|
|
console.log('I was clicked at: ', evt.detail.intersection.point);
|
|
console.log('I was clicked at: ', evt.detail.intersection.point);
|
|
- let cursorID = 'cursor-avatar-'+ vwf_view.kernel.moniker();
|
|
|
|
|
|
+ let cursorID = 'cursor-avatar-' + vwf_view.kernel.moniker();
|
|
if (evt.detail.cursorEl.id.includes(vwf_view.kernel.moniker())) {
|
|
if (evt.detail.cursorEl.id.includes(vwf_view.kernel.moniker())) {
|
|
- vwf_view.kernel.fireEvent(evt.detail.target.id, "clickEvent")
|
|
|
|
|
|
+ vwf_view.kernel.fireEvent(evt.detail.target.id, "clickEvent")
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
//vwf_view.kernel.fireEvent(evt.detail.target.id, "clickEvent")
|
|
//vwf_view.kernel.fireEvent(evt.detail.target.id, "clickEvent")
|
|
- });
|
|
|
|
|
|
+ });
|
|
}
|
|
}
|
|
- });
|
|
|
|
|
|
+});
|
|
|
|
|
|
AFRAME.registerComponent('raycaster-listener', {
|
|
AFRAME.registerComponent('raycaster-listener', {
|
|
init: function () {
|
|
init: function () {
|
|
@@ -146,52 +146,51 @@ AFRAME.registerComponent('raycaster-listener', {
|
|
this.intersected = false;
|
|
this.intersected = false;
|
|
this.casters = {}
|
|
this.casters = {}
|
|
|
|
|
|
- this.el.addEventListener('raycaster-intersected', function (evt) {
|
|
|
|
|
|
+ this.el.addEventListener('raycaster-intersected', function (evt) {
|
|
|
|
|
|
- if (evt.detail.el.nodeName == 'A-CURSOR') {
|
|
|
|
- //console.log('CURSOR was intersected at: ', evt.detail.intersection.point);
|
|
|
|
-
|
|
|
|
- } else {
|
|
|
|
- if (self.intersected) {
|
|
|
|
-
|
|
|
|
|
|
+ if (evt.detail.el.nodeName == 'A-CURSOR') {
|
|
|
|
+ //console.log('CURSOR was intersected at: ', evt.detail.intersection.point);
|
|
|
|
|
|
} else {
|
|
} else {
|
|
- console.log('I was intersected at: ', evt.detail.intersection.point);
|
|
|
|
- vwf_view.kernel.fireEvent(evt.detail.target.id, "intersectEvent")
|
|
|
|
|
|
+ if (self.intersected) {
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ } else {
|
|
|
|
+ console.log('I was intersected at: ', evt.detail.intersection.point);
|
|
|
|
+ vwf_view.kernel.fireEvent(evt.detail.target.id, "intersectEvent")
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ self.casters[evt.detail.el.id] = evt.detail.el;
|
|
|
|
+ self.intersected = true;
|
|
}
|
|
}
|
|
-
|
|
|
|
- self.casters[evt.detail.el.id] = evt.detail.el;
|
|
|
|
- self.intersected = true;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- });
|
|
|
|
|
|
|
|
- this.el.addEventListener('raycaster-intersected-cleared', function (evt) {
|
|
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ this.el.addEventListener('raycaster-intersected-cleared', function (evt) {
|
|
|
|
|
|
|
|
|
|
- if (evt.detail.el.nodeName == 'A-CURSOR') {
|
|
|
|
- //console.log('CURSOR was intersected at: ', evt.detail.intersection.point);
|
|
|
|
|
|
+ if (evt.detail.el.nodeName == 'A-CURSOR') {
|
|
|
|
+ //console.log('CURSOR was intersected at: ', evt.detail.intersection.point);
|
|
|
|
|
|
- } else {
|
|
|
|
- if (self.intersected) {
|
|
|
|
- console.log('Clear intersection');
|
|
|
|
- if (Object.entries(self.casters).length == 1 && (self.casters[evt.detail.el.id] !== undefined))
|
|
|
|
- {
|
|
|
|
- vwf_view.kernel.fireEvent(evt.detail.target.id, "clearIntersectEvent")
|
|
|
|
|
|
+ } else {
|
|
|
|
+ if (self.intersected) {
|
|
|
|
+ console.log('Clear intersection');
|
|
|
|
+ if (Object.entries(self.casters).length == 1 && (self.casters[evt.detail.el.id] !== undefined)) {
|
|
|
|
+ vwf_view.kernel.fireEvent(evt.detail.target.id, "clearIntersectEvent")
|
|
|
|
+ }
|
|
|
|
+ delete self.casters[evt.detail.el.id]
|
|
|
|
+ } else { }
|
|
|
|
+
|
|
|
|
+ self.intersected = false;
|
|
}
|
|
}
|
|
- delete self.casters[evt.detail.el.id]
|
|
|
|
- } else {}
|
|
|
|
-
|
|
|
|
- self.intersected = false;
|
|
|
|
- }
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
|
- });
|
|
|
|
|
|
+
|
|
|
|
+ });
|
|
|
|
|
|
|
|
|
|
}
|
|
}
|
|
- });
|
|
|
|
|
|
+});
|
|
|
|
|
|
AFRAME.registerComponent('envmap', {
|
|
AFRAME.registerComponent('envmap', {
|
|
|
|
|
|
@@ -277,83 +276,97 @@ AFRAME.registerComponent('envmap', {
|
|
}
|
|
}
|
|
})
|
|
})
|
|
|
|
|
|
- //https://threejs.org/examples/webgl_shaders_sky.html
|
|
|
|
-
|
|
|
|
- AFRAME.registerComponent('skyshader', {
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- init: function () {
|
|
|
|
-
|
|
|
|
- let sunSphereEl = document.querySelector('a-scene').querySelector('#sun');
|
|
|
|
- this.sunSphere = sunSphereEl.object3D;
|
|
|
|
-
|
|
|
|
- this.sky = new THREE.Sky();
|
|
|
|
- let scene = this.el.sceneEl;
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- let effectController = {
|
|
|
|
- turbidity: 5,
|
|
|
|
- rayleigh: 2,
|
|
|
|
- mieCoefficient: 0.005,
|
|
|
|
- mieDirectionalG: 0.8,
|
|
|
|
- luminance: 1,
|
|
|
|
- inclination: 0, // elevation / inclination
|
|
|
|
- azimuth: 0.25, // Facing front,
|
|
|
|
- sun: ! true
|
|
|
|
- };
|
|
|
|
-
|
|
|
|
- let uniforms = this.sky.uniforms;
|
|
|
|
- uniforms.turbidity.value = effectController.turbidity;
|
|
|
|
- uniforms.rayleigh.value = effectController.rayleigh;
|
|
|
|
- uniforms.luminance.value = effectController.luminance;
|
|
|
|
- uniforms.mieCoefficient.value = effectController.mieCoefficient;
|
|
|
|
- uniforms.mieDirectionalG.value = effectController.mieDirectionalG;
|
|
|
|
-
|
|
|
|
- this.el.setObject3D('mesh', this.sky.mesh);
|
|
|
|
-
|
|
|
|
- let distance = 400000;
|
|
|
|
-
|
|
|
|
- var theta = Math.PI * (effectController.inclination - 0.5);
|
|
|
|
- var phi = 2 * Math.PI * (effectController.azimuth - 0.5);
|
|
|
|
-
|
|
|
|
- this.sunSphere.position.x = distance * Math.cos(phi);
|
|
|
|
- this.sunSphere.position.y = distance * Math.sin(phi) * Math.sin(theta);
|
|
|
|
- this.sunSphere.position.z = distance * Math.sin(phi) * Math.cos(theta);
|
|
|
|
-
|
|
|
|
- this.sunSphere.visible = effectController.sun;
|
|
|
|
- this.sky.uniforms.sunPosition.value.copy(this.sunSphere.position);
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
- update: function () {
|
|
|
|
-
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
- tick: function (t) {
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
- AFRAME.registerComponent('sun', {
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- init: function () {
|
|
|
|
-
|
|
|
|
- this.sunSphere = new THREE.Mesh(
|
|
|
|
- new THREE.SphereBufferGeometry(20000, 16, 8),
|
|
|
|
- new THREE.MeshBasicMaterial({ color: 0xffffff })
|
|
|
|
- );
|
|
|
|
- this.sunSphere.position.y = - 700000;
|
|
|
|
- this.sunSphere.visible = true;
|
|
|
|
-
|
|
|
|
- this.el.setObject3D('mesh', this.sunSphere);
|
|
|
|
-
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
- update: function () {
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
- tick: function (t) {
|
|
|
|
- }
|
|
|
|
- })
|
|
|
|
|
|
+//https://threejs.org/examples/webgl_shaders_sky.html
|
|
|
|
+
|
|
|
|
+AFRAME.registerComponent('skyshader', {
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ makeSun: function () {
|
|
|
|
+ let sunSphere = new THREE.Mesh(
|
|
|
|
+ new THREE.SphereBufferGeometry(20000, 16, 8),
|
|
|
|
+ new THREE.MeshBasicMaterial({ color: 0xffffff })
|
|
|
|
+ );
|
|
|
|
+ sunSphere.position.y = - 700000;
|
|
|
|
+ sunSphere.visible = true;
|
|
|
|
+
|
|
|
|
+ let scene = this.el.sceneEl;
|
|
|
|
+ this.el.sceneEl.setObject3D('sun', sunSphere);
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ init: function () {
|
|
|
|
+
|
|
|
|
+ //let sunSphereEl = document.querySelector('a-scene').querySelector('#sun');
|
|
|
|
+ //this.sunSphere = sunSphereEl.object3D;
|
|
|
|
+ this.makeSun();
|
|
|
|
+ this.sunSphere = this.el.sceneEl.getObject3D('sun');
|
|
|
|
+
|
|
|
|
+ this.sky = new THREE.Sky();
|
|
|
|
+ let scene = this.el.sceneEl;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ let effectController = {
|
|
|
|
+ turbidity: 5,
|
|
|
|
+ rayleigh: 2,
|
|
|
|
+ mieCoefficient: 0.005,
|
|
|
|
+ mieDirectionalG: 0.8,
|
|
|
|
+ luminance: 1,
|
|
|
|
+ inclination: 0, // elevation / inclination
|
|
|
|
+ azimuth: 0.25, // Facing front,
|
|
|
|
+ sun: ! true
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ let uniforms = this.sky.uniforms;
|
|
|
|
+ uniforms.turbidity.value = effectController.turbidity;
|
|
|
|
+ uniforms.rayleigh.value = effectController.rayleigh;
|
|
|
|
+ uniforms.luminance.value = effectController.luminance;
|
|
|
|
+ uniforms.mieCoefficient.value = effectController.mieCoefficient;
|
|
|
|
+ uniforms.mieDirectionalG.value = effectController.mieDirectionalG;
|
|
|
|
+
|
|
|
|
+ this.el.setObject3D('mesh', this.sky.mesh);
|
|
|
|
+
|
|
|
|
+ let distance = 400000;
|
|
|
|
+
|
|
|
|
+ var theta = Math.PI * (effectController.inclination - 0.5);
|
|
|
|
+ var phi = 2 * Math.PI * (effectController.azimuth - 0.5);
|
|
|
|
+
|
|
|
|
+ this.sunSphere.position.x = distance * Math.cos(phi);
|
|
|
|
+ this.sunSphere.position.y = distance * Math.sin(phi) * Math.sin(theta);
|
|
|
|
+ this.sunSphere.position.z = distance * Math.sin(phi) * Math.cos(theta);
|
|
|
|
+
|
|
|
|
+ this.sunSphere.visible = effectController.sun;
|
|
|
|
+ this.sky.uniforms.sunPosition.value.copy(this.sunSphere.position);
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ update: function () {
|
|
|
|
+
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ tick: function (t) {
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+})
|
|
|
|
+
|
|
|
|
+AFRAME.registerComponent('sun', {
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ init: function () {
|
|
|
|
+
|
|
|
|
+ this.sunSphere = new THREE.Mesh(
|
|
|
|
+ new THREE.SphereBufferGeometry(20000, 16, 8),
|
|
|
|
+ new THREE.MeshBasicMaterial({ color: 0xffffff })
|
|
|
|
+ );
|
|
|
|
+ this.sunSphere.position.y = - 700000;
|
|
|
|
+ this.sunSphere.visible = true;
|
|
|
|
+
|
|
|
|
+ this.el.setObject3D('mesh', this.sunSphere);
|
|
|
|
+
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ update: function () {
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ tick: function (t) {
|
|
|
|
+ }
|
|
|
|
+})
|