javascript - How to encapsule a THREE.js script into classes? -


i have complex three.js script shows human 3d body can select segments.

var container; var camera; var scene; var renderer; var mouse; var raycaster; var controls; var hemilight;  function init(containerid) {     // setup needed variables     container = document.getelementbyid(containerid);     camera = new three.perspectivecamera(1, window.innerwidth / window.innerheight, 1, 2000);     camera.position.z = 400;      // scene     scene = new three.scene();     hemilight = new three.hemispherelight(0xcc9966, 0xcc9966, 1);     hemilight.position.set(0, 500, 0);     scene.add(hemilight);      // camera behaviour     controls = new three.trackballcontrols(camera);     controls.rotatespeed = 5.0;     controls.zoomspeed = 5;     controls.panspeed = 2;     controls.nozoom = false;     controls.nopan = false;     controls.staticmoving = true;     controls.dynamicdampingfactor = 0.3;     controls.enabled = false;      // model     var onprogress = function ( xhr ) {         // necessary if obj-file-size large     };     var onerror = function ( xhr ) {         // went wrong during loading obj-file         console.log("error, please report devs");     };      three.loader.handlers.add(/\.dds$/i, new three.ddsloader());     var loader = new three.objmtlloader();      // load 3d files     loader.load( 'objects/head.obj', 'images/head.mtl', function ( object ) {         prepareobj( object, "head" );     }, onprogress, onerror );     loader.load( 'objects/torso.obj', 'images/torso.mtl', function ( object ) {         prepareobj( object, "torso" );     }, onprogress, onerror );     loader.load( 'objects/arm_left.obj', 'images/arm_left.mtl', function ( object ) {         prepareobj( object, "arm_left" );     }, onprogress, onerror );     loader.load( 'objects/arm_right.obj', 'images/arm_right.mtl', function ( object ) {         prepareobj( object, "arm_right" );     }, onprogress, onerror );     loader.load( 'objects/leg_right.obj', 'images/leg_right.mtl', function ( object ) {         prepareobj( object, "leg_right" );     }, onprogress, onerror );     loader.load( 'objects/leg_left.obj', 'images/leg_left.mtl', function ( object ) {         prepareobj( object, "leg_left" );     }, onprogress, onerror );      renderer = new three.webglrenderer();     renderer.setpixelratio(window.devicepixelratio);     renderer.setsize(500, 500);     renderer.setclearcolor(0xffffff, 1);     container.appendchild(renderer.domelement);      document.addeventlistener("mouseover", function(e) {         checkbodyactive(e);     }, false);     document.addeventlistener("click", onclick, false);     window.addeventlistener("resize", onwindowresize, false);      raycaster = new three.raycaster();     mouse = new three.vector2();      camera.aspect = 1;     camera.updateprojectionmatrix();     renderer.render(scene, camera);     animate(); }  function checkbodyactive(event) {     // checks, if current body active     if(document.elementfrompoint(event.clientx, event.clienty) == renderer.domelement) {         animate();         controls.enabled = true;     }     else {         controls.enabled = false;     } }  function changetexture(part) {     // change texture of selected body part     scene.children[part].traverse( function ( child ) {         if (child instanceof three.mesh) {             // texture must changed             if(scene.children[part].children[0].children[0].material.map.sourcefile=="images/texture2.jpg") {                 // texture2 equipped, unequip                 child.material.map = three.imageutils.loadtexture("images/texture.jpg");             } else {                 // equip texture2                 child.material.map = three.imageutils.loadtexture("images/texture2.jpg");             }             child.material.needsupdate = true;         }     }); }  function onwindowresize() {     // function make sure proportions correct after resizing window     camera.aspect = 1;     camera.updateprojectionmatrix(); }  function onclick(event) {     // mouse-click-event, used check if intersects hit     //event.preventdefault();     mouse.x = (getoffset(event).x / renderer.domelement.width) * 2 - 1;     mouse.y = - (getoffset(event).y / renderer.domelement.height) * 2 + 1;      // create intersect raycasting     raycaster.setfromcamera(mouse, camera);     var intersects = raycaster.intersectobjects(scene.children, true);     if(intersects.length) {         var name = intersects[0].object.parent.parent.name;         for(var j = 0; j < scene.children.length; j++ ) {             if(scene.children[j].name == name) {                 // found same model intersects, change texture                 changetexture(j);             }         }     } }  function getoffset(event) {     // calcs layerx / layery clicked element     var el = event.target,         x = 0,         y = 0;      while (el && !isnan(el.offsetleft) && !isnan(el.offsettop)) {         x += el.offsetleft - el.scrollleft;         y += el.offsettop - el.scrolltop;         el = el.offsetparent;     }      x = event.clientx - x;     y = event.clienty - y;      return { x: x, y: y }; }  function prepareobj(object, name){     // general configuration of .obj files while loading     object.position.y = -3;     object.traverse(function(child) {         if(child instanceof three.mesh) {             child.material.map = three.imageutils.loadtexture("images/texture.jpg");             child.material.needsupdate = true;         }     });     object.name = name;     scene.add(object); }  function animate() {     // on every frame need calculate new camera position     // , have @ center of our scene.     requestanimationframe(animate);     controls.update();     camera.lookat(scene.position);     renderer.render(scene, camera); } 

currently there situation need 2 or 3 of bodies per page. not possible because if calling init("myid"); , init("myid2"); override variables above.

so question is: how can rewrite class? if having in form of real class there should no name-clashes correct? tried adding this.variable everywhere , change structure got errors. there way rewrite class? thanks!


Comments

Popular posts from this blog

cakephp - simple blog with croogo -

How to group boxplot outliers in gnuplot -

bash - Performing variable substitution in a string -