我正在尝试用点云制作静态3D棱镜,每个点都有特定数量的粒子。我根据转弯角度获得了棱镜每一侧的角坐标,并尝试在这些坐标约束的区域内产生粒子。相反,结果点云只保留左下角坐标。
屏幕截图:http://i.stack.imgur.com/uQ7Q8.png
我试图设置每个云对象的旋转,使它们的边缘相交,但它们只会围绕世界中心旋转。我认为这与旋转矩阵和欧拉角有关,但是,我已经试图将它们用了3天,我已经绝望了。 (我是社会学家,而不是开发者,在此项目之前没有触及图形。)
请帮帮忙?如何在棱镜的每个面上设置旋转?或者也许有一种更合理的方法让粒子首先在正确的区域产生?
代码:
// draw the particles
var n = 0;
do {
var geom = new THREE.Geometry();
var material = new THREE.PointCloudMaterial({size: 1, vertexColors: true, color: 0xffffff});
for (i = 0; i < group[n]; i++) {
if (geom.vertices.length < group[n]){
var particle = new THREE.Vector3(
Math.random() * screens[n].bottomrightback.x + screens[n].bottomleftfront.x,
Math.random() * screens[n].toprightback.y + screens[n].bottomleftfront.y,
Math.random() * screens[n].bottomrightfront.z + screens[n].bottomleftfront.z);
geom.vertices.push(particle);
geom.colors.push(new THREE.Color(Math.random() * 0x00ffff));
}
}
var system = new THREE.PointCloud(geom, material);
scene.add(system);
**// something something matrix Euler something?**
n++
}
while (n < numGroups);
答案 0 :(得分:0)
我试图设置每个云对象的旋转,以便他们的 边缘相遇,但它们只会围绕世界中心旋转。
确实,它们仅在0,0,0左右旋转。然后,简单的解决方案是将对象移动到中心,旋转它,然后将其移回原始位置。
例如(代码未经过测试,可能需要稍微调整一下):
var m = new THREE.Matrix4();
var movetocenter = new THREE.Matrix4();
movetocenter.makeTranslation(-x, -y, -z);
var rotate = new THREE.Matrix4();
rotate.makeRotationFromEuler(); //Build your rotation here
var moveback = new THREE.Matrix4();
moveback .makeTranslation(x, y, z);
m.multiply(movetocenter);
m.multiply(rotate);
m.multiply(moveback);
//Now you can use geometry.applyMatrix(m)