所以我的问题是,我试图在three.js中创建一个随机星图,当放大后,它就变成了一个由恒星产生的行星(球体)。
目前使用的代码im随机生成我的恒星,但当我放大它是一个立方体,而不是一个球体。
for (var i = 0;i<2000;i++){
var mesh = new THREE.Mesh( geometry, material);
mesh.position.x = ( Math.random() - 0.5) * 4000 * Math.random();
mesh.position.y = ( Math.random() - 0.5) * 4000* Math.random() ;
mesh.position.z = ( Math.random() - 0.5) * 4000* Math.random() ;
mesh.rotation.x = Math.random();
mesh.rotation.y = Math.random();
mesh.rotation.z = Math.random();
scene.add(mesh);
objects.push(mesh);
}这是一个for循环,我在其中生成我的恒星,第3-6行决定了恒星的产生方式,然而,我所能做的就是再次用数学随机乘以定位,创建一个稍微不那么定义的立方体,而不是我想要的球体。
发布于 2016-11-08 11:18:03
不要像您所做的那样设置网格的x,y,z位置,而是尝试这样做
var newPos = new THREE.Vector3(Math.random() - 0.5, Math.random() - 0.5, Math.random() - 0.5 ).normalize().multiplyScalar( 4000 * Math.random() );
mesh.position.copy(newPos);因此,设置一个随机向量,然后将其规范化,使其长度等于1,然后用一个随机值乘以它。简单地说:你设定了方向和距离。
有一个包含这两种解决方案的小提琴示例(我的和Adder的)
发布于 2016-11-08 14:07:31
把星体外的星星修剪一下:
var R=2000;
for (var i = 0;i<2000;){
var mesh = new THREE.Mesh( geometry, material);
mesh.position.x = ( Math.random() - 0.5) * R*2 * Math.random();
mesh.position.y = ( Math.random() - 0.5) * R*2 * Math.random() ;
mesh.position.z = ( Math.random() - 0.5) * R*2 * Math.random() ;
mesh.rotation.x = Math.random();
mesh.rotation.y = Math.random();
mesh.rotation.z = Math.random();
var distance_squared = mesh.position.x*mesh.position.x + mesh.position.y*mesh.position.y + mesh.position.z*mesh.position.z;
if(distance_squared <= R*R) {
scene.add(mesh);
objects.push(mesh);
++i;
}
}https://stackoverflow.com/questions/40485197
复制相似问题