three.js-设置对象相对于其自身轴的旋转
我试图用点云制作一个静态的3D棱镜,每个点云中有特定数量的粒子。我已经得到了棱镜每一侧的角坐标,基于旋转角度,并尝试在这些坐标所限定的区域内繁殖粒子。相反,生成的点云只保留了左下角的坐标 截图: 我尝试设置每个云对象的旋转,使其边缘相交,但它们将仅围绕世界中心旋转。我想这与旋转矩阵和欧拉角有关,但是,我已经连续三天试图解决它们了,我已经绝望了。我是一名社会学家,不是开发人员,在这个项目之前我从未接触过图形 请帮忙?如何设置棱镜每个面上的旋转?或者也许有一种更合理的方法让粒子首先在正确的区域繁殖 守则:three.js-设置对象相对于其自身轴的旋转,three.js,Three.js,我试图用点云制作一个静态的3D棱镜,每个点云中有特定数量的粒子。我已经得到了棱镜每一侧的角坐标,基于旋转角度,并尝试在这些坐标所限定的区域内繁殖粒子。相反,生成的点云只保留了左下角的坐标 截图: 我尝试设置每个云对象的旋转,使其边缘相交,但它们将仅围绕世界中心旋转。我想这与旋转矩阵和欧拉角有关,但是,我已经连续三天试图解决它们了,我已经绝望了。我是一名社会学家,不是开发人员,在这个项目之前我从未接触过图形 请帮忙?如何设置棱镜每个面上的旋转?或者也许有一种更合理的方法让粒子首先在正确的区域繁殖
// 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旋转。然后,简单的解决方案是将对象移动到中心,旋转它,然后将其移回原始位置
例如,未测试的代码可能需要一些调整:
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)
考虑在棱镜的形状中创建几何学,然后在几何学的面内生成随机点:三。几何。您可以在examples/js/utils目录中找到GeometryUtils.js。先试试圆柱几何。啊哈,我希望有类似的东西存在,谢谢!突然间,矩阵变得更有意义了。这是我错过的乘法步骤。谢谢