javascript - How to merge two geometries or meshes using three.js r71? -


here bumped problem since need merge 2 geometries (or meshes) one. using earlier versions of three.js there nice function:

three.geometryutils.merge(pendulum, ball); 

however, not on new version anymore.

i tried merge "pendulum" , "ball" following code:

"ball' mesh.

var ballgeo = new three.spheregeometry(24,35,35); var ballmat = new three.meshphongmaterial({color: 0xf7fe2e});  var ball = new three.mesh(ballgeo, ballmat);  ball.position.set(0,0,0);  var pendulum = new three.cylindergeometry(1, 1, 20, 16); ball.updatematrix(); pendulum.merge(ball.geometry, ball.matrix); scene.add(pendulum); 

after all, got following error:

three.object3d.add: object not instance of three.object3d. three.cylindergeometry {uuid: "688b0eb1-70f7-4c51-86db-5b1b90a8a24c", name: "", type: "cylindergeometry", vertices: array[1332], colors: array[0]…}three.error @ three_r71.js:35three.object3d.add @ three_r71.js:7770(anonymous function) @ pendulum.js:20 

to explain darius' answer more (as struggled it, while trying update version of mr doob's procedural city work face3 boxes):

essentially merging of meshes single geometry. so, if you, instance, want merge box , sphere:

var box = new three.boxgeometry(1, 1, 1); var sphere = new three.spheregeometry(.65, 32, 32); 

...into single geometry:

var singlegeometry = new three.geometry(); 

...you create mesh each geometry:

var boxmesh = new three.mesh(box); var spheremesh = new three.mesh(sphere); 

...then call merge method of single geometry each, passing geometry , matrix of each method:

boxmesh.updatematrix(); // needed singlegeometry.merge(boxmesh.geometry, boxmesh.matrix);  spheremesh.updatematrix(); // needed singlegeometry.merge(spheremesh.geometry, spheremesh.matrix); 

once merged, create mesh single geometry , add scene:

var material = new three.meshphongmaterial({color: 0xff0000}); var mesh = new three.mesh(singlegeometry, material); scene.add(mesh); 

a working example:

<!doctype html>  <script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r77/three.js"></script>  <!-- orbitcontrols.js not versioned , may stop working r77 -->  <script src='http://threejs.org/examples/js/controls/orbitcontrols.js'></script>    <body style='margin: 0px; background-color: #bbbbbb; overflow: hidden;'>    <script>      // init renderer      var renderer = new three.webglrenderer();      renderer.setsize(window.innerwidth, window.innerheight);      document.body.appendchild(renderer.domelement);        // init scene , camera      var scene = new three.scene();      var camera = new three.perspectivecamera(45, window.innerwidth / window.innerheight, 0.01, 3000);      camera.position.z = 5;      var controls = new three.orbitcontrols(camera)     	      // our code      var box = new three.boxgeometry(1, 1, 1);      var sphere = new three.spheregeometry(.65, 32, 32);        var singlegeometry = new three.geometry();        var boxmesh = new three.mesh(box);      var spheremesh = new three.mesh(sphere);        boxmesh.updatematrix(); // needed      singlegeometry.merge(boxmesh.geometry, boxmesh.matrix);        spheremesh.updatematrix(); // needed      singlegeometry.merge(spheremesh.geometry, spheremesh.matrix);        var material = new three.meshphongmaterial({color: 0xff0000});      var mesh = new three.mesh(singlegeometry, material);      scene.add(mesh);        // light      var light = new three.hemispherelight(0xfffff0, 0x101020, 1.25);      light.position.set(0.75, 1, 0.25);      scene.add(light);  	      // render      requestanimationframe(function animate(){  	    requestanimationframe(animate);  	    renderer.render(scene, camera);		      })    </script>  </body>

at least, that's how interpreting things; apologies if have wrong, no close being three.js expert (currently learning). had "bad luck" try hand @ customizing mr. doob's procedural city code, when latest version breaks things (the merge stuff being 1 of them, fact three.js no longer uses quads cube -ahem- box geometry other - has led kinds of fun getting shading , such work again).


Comments

Popular posts from this blog

Email notification in google apps script -

c++ - Difference between pre and post decrement in recursive function argument -

javascript - IE11 incompatibility with jQuery's 'readonly'? -