xrfragment-haxe/src/three/index.js

37 lines
1.3 KiB
JavaScript
Raw Normal View History

xrfragment.three = {}
xrfragment.init = function(opts){
opts = opts || {}
2023-05-04 21:28:12 +02:00
for ( let i in opts ) xrfragment[i] = opts[i]
for ( let i in xrfragment.XRF ) xrfragment[i] = xrfragment.XRF[i] // shortcuts to constants (BROWSER_OVERRIDE e.g.)
xrfragment.Parser.debug = xrfragment.debug
if( opts.loaders ) opts.loaders.map( xrfragment.patchLoader )
2023-05-04 21:28:12 +02:00
return xrfragment
}
xrfragment.patchLoader = function(loader){
loader.prototype.load = ((load) => function(url, onLoad, onProgress, onError){
load.call( this,
url,
(model) => { onLoad(model); xrfragment.parseModel(model) },
onProgress,
onError)
})(loader.prototype.load)
}
xrfragment.parseModel = function(model){
model.scene.traverse( (mesh) => {
if( mesh.userData ){
let frag = {}
for( let k in mesh.userData ){
xrfragment.Parser.parse( k, mesh.userData[k], frag )
// call native function (xrf/env.js e.g.), or pass it to user decorator
let func = xrfragment.three[k] || function(){}
2023-05-04 21:28:12 +02:00
let opts = {mesh, model, camera:xrfragment.camera, scene: xrfragment.scene, renderer: xrfragment.renderer, THREE: xrfragment.THREE }
if( xrfragment[k] ) xrfragment[k]( func, frag[k], opts)
else func( frag[k], opts)
}
}
})
}