2014-11-08 61 views
0

我做了这个函数,为每个几何顶点创建一个球体并将它放置在vertice的相同位置。例如,如果我有一个立方体,函数为每个立方体放置一个球体顶点。Three.js将两个对象作为一个连接

function makeSphereVertices(){ 
console.log("makesphere"); 

spheres = []; 

for(var j=0 ; j<geometryContainer.length ; j++) {    
for (var i=0 ; i<geometryContainer[j].geometry.vertices.length ; i++){ 
var sphereGeometry = new THREE.SphereGeometry(0.04,10,10);//relative to dimension object : ToDo 
var sphereMaterial = new THREE.MeshBasicMaterial({transparent: false,color: 0x000000 /*opacity: 0.01*/}); 
spheres = new THREE.Mesh(sphereGeometry,sphereMaterial); 
spheres.position.set(geometryContainer[j].geometry.vertices[i].x, 
        geometryContainer[j].geometry.vertices[i].y, 
        geometryContainer[j].geometry.vertices[i].z); 
        console.log(geometryContainer[j].id); 
    spheres.name = "sphere";    
scene.add(spheres); 
verticesSphere.push(spheres); 

} 
    } 


    } 

在此之后,我创建了移动我的立方体像这样的功能Draggable shape。现在的问题是:我无法找到将立方体和所有球体一起移动的方法。例如,如果我拖动立方体,所有的球体都保留在旧的位置。有没有办法将球体链接到我的魔方?谢谢。

回答

1

通过将它们放在一个新的对象。

group = new THREE.Object3D();//create an empty container 
group.add(mesh);//add a mesh with geometry to it 
scene.add(group);//when done, add the group to the scene 

three.js - mesh group example? (THREE.Object3D() advanced)

所以一定要确保你把你的新创建的组对象的立方体和所有的领域。

+0

我已经完成并呈现良好,但raycaster.intersectObjects(组);给我没有与组的交集。 @hobs – stefano 2014-11-08 12:38:50

+0

我认为这个问题的答案和我昨天所要求的一样。你需要做的是传递递归标志。 raycaster.intersectObjects(group,true); http://stackoverflow.com/questions/26800922/threejs-raycast-click-detection-not-working-on-loaded-3dobject这样它也检查“组”的孩子。 – hobs 2014-11-09 01:11:50

相关问题