bugfix: XRWG-lines
This commit is contained in:
parent
8be5e485ce
commit
6512133f86
6 changed files with 57 additions and 465 deletions
|
|
@ -34,7 +34,7 @@
|
||||||
<a-entity id="player" wasd-controls look-controls>
|
<a-entity id="player" wasd-controls look-controls>
|
||||||
<a-entity camera="fov:90" position="0 1.6 0" id="camera"></a-entity>
|
<a-entity camera="fov:90" position="0 1.6 0" id="camera"></a-entity>
|
||||||
<a-entity id="left-hand" laser-controls="hand: left" raycaster="objects:.ray" blink-controls="cameraRig:#player; teleportOrigin: #camera; collisionEntities: #floor">
|
<a-entity id="left-hand" laser-controls="hand: left" raycaster="objects:.ray" blink-controls="cameraRig:#player; teleportOrigin: #camera; collisionEntities: #floor">
|
||||||
<a-entity rotation="-90 0 0" position="0 0.1 0" id="navigator">
|
<a-entity rotation="-35 0 0" position="0 0.1 0" id="navigator">
|
||||||
<a-entity id="back" xrf-button="label: <; width:0.05; action: history.back()" position="-0.025 0 0" class="ray"></a-entity>
|
<a-entity id="back" xrf-button="label: <; width:0.05; action: history.back()" position="-0.025 0 0" class="ray"></a-entity>
|
||||||
<a-entity id="next" xrf-button="label: >; width:0.05; action: history.forward()" position=" 0.025 0 0" class="ray"></a-entity>
|
<a-entity id="next" xrf-button="label: >; width:0.05; action: history.forward()" position=" 0.025 0 0" class="ray"></a-entity>
|
||||||
</a-entity>
|
</a-entity>
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -1,262 +0,0 @@
|
||||||
{
|
|
||||||
"accessors" : [
|
|
||||||
{
|
|
||||||
"bufferView" : 0,
|
|
||||||
"byteOffset" : 0,
|
|
||||||
"componentType" : 5126,
|
|
||||||
"count" : 3,
|
|
||||||
"max" : [
|
|
||||||
2.000000
|
|
||||||
],
|
|
||||||
"min" : [
|
|
||||||
0.000000
|
|
||||||
],
|
|
||||||
"type" : "SCALAR"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView" : 1,
|
|
||||||
"byteOffset" : 0,
|
|
||||||
"componentType" : 5126,
|
|
||||||
"count" : 3,
|
|
||||||
"max" : [
|
|
||||||
0.000000,
|
|
||||||
1.000000,
|
|
||||||
0.000000,
|
|
||||||
1.000000
|
|
||||||
],
|
|
||||||
"min" : [
|
|
||||||
0.000000,
|
|
||||||
-8.742278e-008,
|
|
||||||
0.000000,
|
|
||||||
-1.000000
|
|
||||||
],
|
|
||||||
"type" : "VEC4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView" : 2,
|
|
||||||
"byteOffset" : 0,
|
|
||||||
"componentType" : 5123,
|
|
||||||
"count" : 36,
|
|
||||||
"max" : [
|
|
||||||
35
|
|
||||||
],
|
|
||||||
"min" : [
|
|
||||||
0
|
|
||||||
],
|
|
||||||
"type" : "SCALAR"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView" : 3,
|
|
||||||
"byteOffset" : 0,
|
|
||||||
"componentType" : 5126,
|
|
||||||
"count" : 36,
|
|
||||||
"max" : [
|
|
||||||
1.000000,
|
|
||||||
1.000000,
|
|
||||||
1.000001
|
|
||||||
],
|
|
||||||
"min" : [
|
|
||||||
-1.000000,
|
|
||||||
-1.000000,
|
|
||||||
-1.000000
|
|
||||||
],
|
|
||||||
"type" : "VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView" : 4,
|
|
||||||
"byteOffset" : 0,
|
|
||||||
"componentType" : 5126,
|
|
||||||
"count" : 36,
|
|
||||||
"max" : [
|
|
||||||
1.000000,
|
|
||||||
1.000000,
|
|
||||||
1.000000
|
|
||||||
],
|
|
||||||
"min" : [
|
|
||||||
-1.000000,
|
|
||||||
-1.000000,
|
|
||||||
-1.000000
|
|
||||||
],
|
|
||||||
"type" : "VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView" : 5,
|
|
||||||
"byteOffset" : 0,
|
|
||||||
"componentType" : 5126,
|
|
||||||
"count" : 36,
|
|
||||||
"max" : [
|
|
||||||
1.000000,
|
|
||||||
-0.000000,
|
|
||||||
-0.000000,
|
|
||||||
1.000000
|
|
||||||
],
|
|
||||||
"min" : [
|
|
||||||
0.000000,
|
|
||||||
-0.000000,
|
|
||||||
-1.000000,
|
|
||||||
-1.000000
|
|
||||||
],
|
|
||||||
"type" : "VEC4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView" : 6,
|
|
||||||
"byteOffset" : 0,
|
|
||||||
"componentType" : 5126,
|
|
||||||
"count" : 36,
|
|
||||||
"max" : [
|
|
||||||
1.000000,
|
|
||||||
1.000000
|
|
||||||
],
|
|
||||||
"min" : [
|
|
||||||
-1.000000,
|
|
||||||
-1.000000
|
|
||||||
],
|
|
||||||
"type" : "VEC2"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"animations" : [
|
|
||||||
{
|
|
||||||
"channels" : [
|
|
||||||
{
|
|
||||||
"sampler" : 0,
|
|
||||||
"target" : {
|
|
||||||
"node" : 0,
|
|
||||||
"path" : "rotation"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name" : "animation_AnimatedCube",
|
|
||||||
"samplers" : [
|
|
||||||
{
|
|
||||||
"input" : 0,
|
|
||||||
"interpolation" : "LINEAR",
|
|
||||||
"output" : 1
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"asset" : {
|
|
||||||
"generator" : "VKTS glTF 2.0 exporter",
|
|
||||||
"version" : "2.0"
|
|
||||||
},
|
|
||||||
"bufferViews" : [
|
|
||||||
{
|
|
||||||
"buffer" : 0,
|
|
||||||
"byteLength" : 12,
|
|
||||||
"byteOffset" : 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer" : 0,
|
|
||||||
"byteLength" : 48,
|
|
||||||
"byteOffset" : 12
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer" : 0,
|
|
||||||
"byteLength" : 72,
|
|
||||||
"byteOffset" : 60,
|
|
||||||
"target" : 34963
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer" : 0,
|
|
||||||
"byteLength" : 432,
|
|
||||||
"byteOffset" : 132,
|
|
||||||
"target" : 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer" : 0,
|
|
||||||
"byteLength" : 432,
|
|
||||||
"byteOffset" : 564,
|
|
||||||
"target" : 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer" : 0,
|
|
||||||
"byteLength" : 576,
|
|
||||||
"byteOffset" : 996,
|
|
||||||
"target" : 34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer" : 0,
|
|
||||||
"byteLength" : 288,
|
|
||||||
"byteOffset" : 1572,
|
|
||||||
"target" : 34962
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"buffers" : [
|
|
||||||
{
|
|
||||||
"byteLength" : 1860,
|
|
||||||
"uri" : "AnimatedCube.bin"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"images" : [
|
|
||||||
{
|
|
||||||
"uri" : "AnimatedCube_BaseColor.png"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"uri" : "AnimatedCube_MetallicRoughness.png"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"materials" : [
|
|
||||||
{
|
|
||||||
"name" : "AnimatedCube",
|
|
||||||
"pbrMetallicRoughness" : {
|
|
||||||
"baseColorTexture" : {
|
|
||||||
"index" : 0
|
|
||||||
},
|
|
||||||
"metallicRoughnessTexture" : {
|
|
||||||
"index" : 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"meshes" : [
|
|
||||||
{
|
|
||||||
"name" : "AnimatedCube",
|
|
||||||
"primitives" : [
|
|
||||||
{
|
|
||||||
"attributes" : {
|
|
||||||
"NORMAL" : 4,
|
|
||||||
"POSITION" : 3,
|
|
||||||
"TANGENT" : 5,
|
|
||||||
"TEXCOORD_0" : 6
|
|
||||||
},
|
|
||||||
"indices" : 2,
|
|
||||||
"material" : 0,
|
|
||||||
"mode" : 4
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"nodes" : [
|
|
||||||
{
|
|
||||||
"mesh" : 0,
|
|
||||||
"name" : "AnimatedCube",
|
|
||||||
"rotation" : [
|
|
||||||
0.000000,
|
|
||||||
-1.000000,
|
|
||||||
0.000000,
|
|
||||||
0.000000
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"samplers" : [
|
|
||||||
{}
|
|
||||||
],
|
|
||||||
"scene" : 0,
|
|
||||||
"scenes" : [
|
|
||||||
{
|
|
||||||
"nodes" : [
|
|
||||||
0
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"textures" : [
|
|
||||||
{
|
|
||||||
"sampler" : 0,
|
|
||||||
"source" : 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"sampler" : 0,
|
|
||||||
"source" : 1
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
@ -1,160 +0,0 @@
|
||||||
{
|
|
||||||
"asset":{
|
|
||||||
"generator":"Khronos glTF Blender I/O v3.5.30",
|
|
||||||
"version":"2.0"
|
|
||||||
},
|
|
||||||
"scene":0,
|
|
||||||
"scenes":[
|
|
||||||
{
|
|
||||||
"name":"Scene",
|
|
||||||
"nodes":[
|
|
||||||
0
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"nodes":[
|
|
||||||
{
|
|
||||||
"mesh":0,
|
|
||||||
"name":"AnimatedCube"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"animations":[
|
|
||||||
{
|
|
||||||
"channels":[
|
|
||||||
{
|
|
||||||
"sampler":0,
|
|
||||||
"target":{
|
|
||||||
"node":0,
|
|
||||||
"path":"rotation"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name":"walk",
|
|
||||||
"samplers":[
|
|
||||||
{
|
|
||||||
"input":4,
|
|
||||||
"interpolation":"LINEAR",
|
|
||||||
"output":5
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"materials":[
|
|
||||||
{
|
|
||||||
"name":"AnimatedCube",
|
|
||||||
"pbrMetallicRoughness":{}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"meshes":[
|
|
||||||
{
|
|
||||||
"name":"AnimatedCube",
|
|
||||||
"primitives":[
|
|
||||||
{
|
|
||||||
"attributes":{
|
|
||||||
"POSITION":0,
|
|
||||||
"TEXCOORD_0":1,
|
|
||||||
"NORMAL":2
|
|
||||||
},
|
|
||||||
"indices":3,
|
|
||||||
"material":0
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"accessors":[
|
|
||||||
{
|
|
||||||
"bufferView":0,
|
|
||||||
"componentType":5126,
|
|
||||||
"count":36,
|
|
||||||
"max":[
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1.0000009536743164
|
|
||||||
],
|
|
||||||
"min":[
|
|
||||||
-1,
|
|
||||||
-1,
|
|
||||||
-1
|
|
||||||
],
|
|
||||||
"type":"VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView":1,
|
|
||||||
"componentType":5126,
|
|
||||||
"count":36,
|
|
||||||
"type":"VEC2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView":2,
|
|
||||||
"componentType":5126,
|
|
||||||
"count":36,
|
|
||||||
"type":"VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView":3,
|
|
||||||
"componentType":5123,
|
|
||||||
"count":36,
|
|
||||||
"type":"SCALAR"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView":4,
|
|
||||||
"componentType":5126,
|
|
||||||
"count":3,
|
|
||||||
"max":[
|
|
||||||
2
|
|
||||||
],
|
|
||||||
"min":[
|
|
||||||
0
|
|
||||||
],
|
|
||||||
"type":"SCALAR"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView":5,
|
|
||||||
"componentType":5126,
|
|
||||||
"count":3,
|
|
||||||
"type":"VEC4"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"bufferViews":[
|
|
||||||
{
|
|
||||||
"buffer":0,
|
|
||||||
"byteLength":432,
|
|
||||||
"byteOffset":0,
|
|
||||||
"target":34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer":0,
|
|
||||||
"byteLength":288,
|
|
||||||
"byteOffset":432,
|
|
||||||
"target":34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer":0,
|
|
||||||
"byteLength":432,
|
|
||||||
"byteOffset":720,
|
|
||||||
"target":34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer":0,
|
|
||||||
"byteLength":72,
|
|
||||||
"byteOffset":1152,
|
|
||||||
"target":34963
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer":0,
|
|
||||||
"byteLength":12,
|
|
||||||
"byteOffset":1224
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer":0,
|
|
||||||
"byteLength":48,
|
|
||||||
"byteOffset":1236
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"buffers":[
|
|
||||||
{
|
|
||||||
"byteLength":1284,
|
|
||||||
"uri":"data:application/octet-stream;base64,AACAPwAAgL8AAIA/AACAvwAAgL8AAIC/AACAPwAAgL8AAIC/AACAvwAAgD8AAIC/7/9/PwAAgD8IAIA/AACAPwAAgD/v/3+/AACAPwAAgD/v/3+/AACAPwAAgL8AAIA/AACAPwAAgL8AAIC/7/9/PwAAgD8IAIA/AACAvwAAgL8AAIA/AACAPwAAgL8AAIA/AACAvwAAgL8AAIA/AACAvwAAgD8AAIC/AACAvwAAgL8AAIC/AACAPwAAgL8AAIC/AACAvwAAgD8AAIC/AACAPwAAgD/v/3+/AACAPwAAgL8AAIA/AACAvwAAgL8AAIA/AACAvwAAgL8AAIC/AACAvwAAgD8AAIC/AACAvwAAgD8AAIA/7/9/PwAAgD8IAIA/AACAPwAAgD/v/3+/7/9/PwAAgD8IAIA/AACAPwAAgL8AAIA/7/9/PwAAgD8IAIA/AACAvwAAgD8AAIA/AACAvwAAgL8AAIA/AACAvwAAgL8AAIA/AACAvwAAgD8AAIA/AACAvwAAgD8AAIC/AACAPwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgD8AAIC/AAAAAAAAAAAAAIC/AACAPwAAAAAAAIA/AAAAAAAAAAAAAIA/AACAvwAAgD8AAAAAAACAPwAAAAAAAAAAAACAvwAAgD8AAIC/AACAPwAAAAAAAACAAACAvwAAgD8AAIC/AAAAAAAAAAAAAIA/AACAPwAAgD8AAAAAAAAAAAAAAAAAAIC/AACAPwAAAAAAAIA/AAAAAAAAAAAAAIC/AAAAAAAAgL8AAIA/AAAAAAAAAAAAAACAAACAvwAAgD8AAIC/AACAPwAAAAAAAACAAAAAAAAAAAAAAIC/AACAPwAAAAAAAACAAAAAAAAAAIAAAIC/AAAAAAAAAAAAAAAAAACAPwAAgD8AAIA/AAAAAAAAAAAAAIC/AAAAAAAAgL8AAIA/AAAAAAAAgL8AAACAAAAAAAAAgL8AAACAAAAAAAAAgL8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAACAPwAAAAAAAACAAACAPwAAAAAAAACAAACAPwAAAAAAAACAAAAAAAAAAIAAAIA/AAAAAAAAAIAAAIA/AAAAAAAAAIAAAIA/AACAvwAAAAAAAACAAACAvwAAAAAAAACAAACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAgL8AAACAAAAAAAAAgL8AAACAAAAAAAAAgL8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAAAAgAAAAAAAAIA/AAAAgAAAAAAAAIA/AAAAgAAAAAAAAIA/AACAvwAAAAAAAACAAACAvwAAAAAAAACAAACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAAAAAAAAAgD8AAABAAAAAAAAAAAAAAACAAACAPwAAAIAAAIC/AAAAAC69OzMAAAAALr27MwAAAIAAAIA/"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
@ -1,5 +1,21 @@
|
||||||
|
xrf.addEventListener('dynamicKey', (opts) => {
|
||||||
|
let {scene,id,match,v} = opts
|
||||||
|
if( !scene ) return
|
||||||
|
let remove = []
|
||||||
|
// erase previous lines
|
||||||
|
xrf.focusLine.lines.map( (line) => line.parent.remove(line) )
|
||||||
|
xrf.focusLine.points = []
|
||||||
|
xrf.focusLine.lines = []
|
||||||
|
|
||||||
const drawLineToMesh = (opts) => {
|
//scene.traverse( (n) => n.selection ? remove.push(n) : false )
|
||||||
|
//remove.map( (n) => scene.remove(n.selection) )
|
||||||
|
// drawlines
|
||||||
|
match.map( (w) => {
|
||||||
|
w.nodes.map( (mesh) => xrf.drawLineToMesh({ ...opts, mesh}) )
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
xrf.drawLineToMesh = (opts) => {
|
||||||
let {scene,mesh,frag,id} = opts
|
let {scene,mesh,frag,id} = opts
|
||||||
let oldSelection
|
let oldSelection
|
||||||
// Selection of Interest if predefined_view matches object name
|
// Selection of Interest if predefined_view matches object name
|
||||||
|
|
@ -19,9 +35,9 @@ const drawLineToMesh = (opts) => {
|
||||||
return center;
|
return center;
|
||||||
}
|
}
|
||||||
|
|
||||||
xrf.camera.updateMatrixWorld(true); // always keeps me diving into the docs :]
|
xrf.camera.getCam().updateMatrixWorld(true); // always keeps me diving into the docs :]
|
||||||
xrf.camera.getWorldPosition(from)
|
xrf.camera.getCam().getWorldPosition(from)
|
||||||
from.y -= 0.5 // originate from the heart chakra! :p
|
from.y = 0.5 // originate from the heart chakra! :p
|
||||||
const points = [from, getCenterPoint(mesh) ]
|
const points = [from, getCenterPoint(mesh) ]
|
||||||
const geometry = new THREE.BufferGeometry().setFromPoints( points );
|
const geometry = new THREE.BufferGeometry().setFromPoints( points );
|
||||||
let line = new THREE.Line( geometry, xrf.focusLine.material );
|
let line = new THREE.Line( geometry, xrf.focusLine.material );
|
||||||
|
|
@ -35,32 +51,14 @@ const drawLineToMesh = (opts) => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
xrf.addEventListener('dynamicKey', (opts) => {
|
|
||||||
let {scene,id,match,v} = opts
|
|
||||||
if( !scene ) return
|
|
||||||
let remove = []
|
|
||||||
// erase previous lines
|
|
||||||
xrf.focusLine.lines.map( (line) => scene.remove(line) )
|
|
||||||
xrf.focusLine.points = []
|
|
||||||
xrf.focusLine.lines = []
|
|
||||||
|
|
||||||
scene.traverse( (n) => n.selection ? remove.push(n) : false )
|
|
||||||
remove.map( (n) => scene.remove(n.selection) )
|
|
||||||
// drawlines
|
|
||||||
match.map( (w) => {
|
|
||||||
w.nodes.map( (mesh) => drawLineToMesh({ ...opts, mesh}) )
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
xrf.addEventListener('render', (opts) => {
|
xrf.addEventListener('render', (opts) => {
|
||||||
let model = xrf.model
|
|
||||||
if( !model || !model.clock ) return
|
|
||||||
// update focusline
|
// update focusline
|
||||||
let {time} = opts
|
let {time,model} = opts
|
||||||
xrf.focusLine.material.color.r = (1.0 + Math.sin( model.clock.getElapsedTime()*10 ))/2
|
if( !xrf.clock ) return
|
||||||
xrf.focusLine.material.dashSize = 0.2 + 0.02*Math.sin( model.clock.getElapsedTime() )
|
xrf.focusLine.material.color.r = (1.0 + Math.sin( xrf.clock.getElapsedTime()*10 ))/2
|
||||||
xrf.focusLine.material.gapSize = 0.1 + 0.02*Math.sin( model.clock.getElapsedTime() *3 )
|
xrf.focusLine.material.dashSize = 0.2 + 0.02*Math.sin( xrf.clock.getElapsedTime() )
|
||||||
xrf.focusLine.material.opacity = (0.25 + 0.15*Math.sin( model.clock.getElapsedTime() * 3 )) * xrf.focusLine.opacity;
|
xrf.focusLine.material.gapSize = 0.1 + 0.02*Math.sin( xrf.clock.getElapsedTime() *3 )
|
||||||
|
xrf.focusLine.material.opacity = (0.25 + 0.15*Math.sin( xrf.clock.getElapsedTime() * 3 )) * xrf.focusLine.opacity;
|
||||||
if( xrf.focusLine.opacity > 0.0 ) xrf.focusLine.opacity -= time*0.2
|
if( xrf.focusLine.opacity > 0.0 ) xrf.focusLine.opacity -= time*0.2
|
||||||
if( xrf.focusLine.opacity < 0.0 ) xrf.focusLine.opacity = 0
|
if( xrf.focusLine.opacity < 0.0 ) xrf.focusLine.opacity = 0
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ xrf.frag.t = function(v, opts){
|
||||||
if( v.y != undefined || v.z != undefined ) mixer.updateLoop( v )
|
if( v.y != undefined || v.z != undefined ) mixer.updateLoop( v )
|
||||||
|
|
||||||
// play animations
|
// play animations
|
||||||
mixer.play( v.x != 0 )
|
mixer.play( v )
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -73,7 +73,7 @@ xrf.addEventListener('parseModel', (opts) => {
|
||||||
anim.action.setLoop( THREE.LoopOnce, )
|
anim.action.setLoop( THREE.LoopOnce, )
|
||||||
anim.action.timeScale = mixer.timeScale
|
anim.action.timeScale = mixer.timeScale
|
||||||
anim.action.enabled = true
|
anim.action.enabled = true
|
||||||
anim.action.play()
|
if( t.x != 0 ) anim.action.play()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
mixer.setTime(mixer.loop.timeStart)
|
mixer.setTime(mixer.loop.timeStart)
|
||||||
|
|
@ -122,21 +122,37 @@ xrf.addEventListener('render', (opts) => {
|
||||||
let model = xrf.model
|
let model = xrf.model
|
||||||
let {time} = opts
|
let {time} = opts
|
||||||
if( !model ) return
|
if( !model ) return
|
||||||
if( xrf.mixers.length ) xrf.mixers.map( (m) => m.isPlaying ? m.update( time ) : false )
|
if( xrf.mixers.length ){
|
||||||
|
xrf.mixers.map( (m) => m.isPlaying ? m.update( time ) : false )
|
||||||
|
|
||||||
// update camera if possible
|
// update active camera in case selected by dynamicKey in URI
|
||||||
if( model.cameras && model.cameras.length && xrf.mixers.length ){
|
if( xrf.model.camera && model.mixer.isPlaying ){
|
||||||
|
|
||||||
let cam = xrf.camera.getCam()
|
let cam = xrf.camera.getCam()
|
||||||
// cam.fov = model.cameras[0].fov (why is blender not exporting radians?)
|
// cam.fov = model.cameras[0].fov (why is blender not exporting radians?)
|
||||||
cam.far = model.cameras[0].far
|
cam.far = model.cameras[0].far
|
||||||
cam.near = model.cameras[0].near
|
cam.near = model.cameras[0].near
|
||||||
|
|
||||||
let rig = xrf.camera
|
let rig = xrf.camera
|
||||||
rig.position.copy( model.cameras[0].position )
|
rig.position.copy( model.cameras[0].position )
|
||||||
rig.position.y -= rig.offsetY // VR/AR compensate camera rig
|
rig.position.y -= rig.offsetY // VR/AR compensate camera rig
|
||||||
//rig.rotation.copy( model.cameras[0].rotation )
|
//rig.rotation.copy( model.cameras[0].rotation )
|
||||||
|
|
||||||
rig.updateProjectionMatrix()
|
rig.updateProjectionMatrix()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
xrf.addEventListener('dynamicKey', (opts) => {
|
||||||
|
// select active camera if any
|
||||||
|
let {id,match,v} = opts
|
||||||
|
console.dir(opts)
|
||||||
|
match.map( (w) => {
|
||||||
|
w.nodes.map( (node) => {
|
||||||
|
if( node.isCamera ){
|
||||||
|
console.log("setting camera to "+node.name)
|
||||||
|
xrf.model.camera = node
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue