以three.js动态添加和旋转几何体

时间:2016-10-27 13:26:55

标签: javascript three.js

参考https://jsfiddle.net/pmankar/svt0nhuv/

主要的大型红色二十面体几何体围绕y轴旋转。我添加了一个小的红色球体几何体,并将其合并到主要的大型红色二十面体几何体中。直到这里它工作正常。为此,我使用了THREE.GeometryUtils.merge(point_sphere_iso_geom, sphere);

但是,当我尝试通过鼠标单击动态添加球体时,会添加它们(黄色球体),但它们不会与主要的大型红色二十面体几何体一起旋转。

任何人都可以解释为什么它在初始情况下有效,但在动态添加时不能解决,以及如何动态实现它。

1 个答案:

答案 0 :(得分:1)

我希望我能正确理解你。每次单击鼠标,您必须基于前一个几何体(网格几何和网格矩阵)创建新几何体,将其与新球体的几何体合并,并将其应用于新网格,然后移除旧网格并添加新网格之一。

vars的一些变化

var geometry, material, point_sphere_iso_geom, mesh;

创建开始合并网格

point_sphere_iso_geom = new THREE.IcosahedronGeometry(100, 4);
cygeo = new THREE.SphereGeometry(5, 10, 10);
cygeo.translate(0,0,120);
point_sphere_iso_geom.merge( cygeo );
mesh = new THREE.Mesh(point_sphere_iso_geom, material);

和addYellowPoint的功能

function addYellowPoint(valX, valY) {
    var sgeometry = new THREE.SphereGeometry(2.5, 10, 10);

    var range = 150;
    var x = Math.random() * range - range / 2;
    var y = Math.random() * range - range / 2;
    var z = Math.random() * range - range / 2;
    sgeometry.translate(x,y,z);
    point_sphere_iso_geom = mesh.geometry.clone();
    point_sphere_iso_geom.applyMatrix(mesh.matrix);
    point_sphere_iso_geom.merge(sgeometry);

    scene.remove(mesh);
    mesh.geometry.dispose();
    mesh.material.dispose();
    mesh = new THREE.Mesh(point_sphere_iso_geom, material);
    scene.add(mesh);
}