threex
Version:
Game Extensions for three.js http://www.threejsgames.com/extensions/
52 lines (40 loc) • 1.5 kB
JavaScript
var THREEx = THREEx || {}
/**
* [ description]
* @param {String} labelSuffix the label of the sceneMirror
* @param {THREE.Scene} srcScene the scene to mirror
* @return {THREE.SceneMirror} [description]
*/
THREEx.SceneMirror = function(srcScene, opts){
opts = opts || {}
var labelSuffix = opts.labelSuffix || Math.floor(Math.random()*0x10000).toString(16)
var onAdded = opts.onAdded || function(dstObject, srcObject, event){}
var dstScene = opts.dstScene || new THREE.Scene()
this.dstScene = dstScene
var label = 'sceneMirror-'+labelSuffix
// TODO refactor this API
// - with a opts i guess
dstScene = dstScene || new THREE.Scene()
this.dstScene = dstScene
srcScene.userData[label] = dstScene
var addedCallback = function(event){
var srcObject = event.target
var geometry = srcObject.geometry.clone()
var material = srcObject.material.clone()
var dstObject = new THREE.Mesh(geometry, material)
srcObject.clone(dstObject)
dstObject.position = srcObject.position
dstObject.quaternion = srcObject.quaternion
dstObject.scale = srcObject.scale
console.assert(srcObject.parent)
console.assert(srcObject.parent.userData[label])
var dstParent = srcObject.parent.userData[label]
dstParent.add(dstObject)
console.assert(srcObject.userData[label] === undefined)
srcObject.userData[label] = dstObject
onAdded(dstObject, srcObject, event)
}
this.add = function(srcObject3d){
srcObject3d.addEventListener('added', addedCallback)
}
}