我正在使用Three.js
编写一个简单的太阳系。这时我增加了3个行星,每个行星都在其轴上旋转。在中间我加了太阳。
mesh
); Object3D
); 我可以:
问题在于,当我在例如1
的主要组中进行旋转时,每个行星都会移动1.例如:
如果我将行星旋转180度,每个行星在其轨道上旋转180度。那么我怎样才能以不同的速度旋转每个行星呢?
我认为不需要主要组,我必须编写一个算法并将其用于每个星球,但我不知道算法是如何工作的。有人可以帮帮我吗?
代码的重要部分:
...主循环:
function loop() {
jQuery.each(planets, function( key, value ) {
value.rotation.y += 0.005;
value.rotation.x += 0.005;
});
group.rotation.z -= 0.005;
requestAnimationFrame( loop );
}
...添加一颗行星:
var data = {
0: {
texture: "images/telos.png",
radius: 10,
segments: 20
},
1: {
texture: "images/ako.png",
radius: 8,
segments: 20
},
2: {
texture: "images/alba.png",
radius: 21,
segments: 20
}
};
var planets = {}
jQuery.each(data, function( key, value ) {
var planet = creator.planet({
texture: value.texture,
radius: value.radius,
segments: value.segments
});
planet.position.set( key * 60, 0, 0 );
planets[ key ] = planet;
group.add( planets[ key ] );
});
任何提示?
答案 0 :(得分:0)
这一行:
value.rotation.y += 0.005;
是关键。在这里你可以按照每个'tick'旋转所有行星相同的角度。你想要不同的速度,每个星球需要保持不同的速度值,所以首先:
var planet = creator.planet({
texture: value.texture,
radius: value.radius,
segments: value.segments,
speed: value.speed
});
然后您需要访问该值:
value.rotation.y += value.speed;
然后确保在创建行星时发送速度值。
如果您想要实际的速度值,可以使用Kepler's laws of planetary motion从半径计算它们。比率是平方反比,所以你可以这样做:
var planet = creator.planet({
texture: value.texture,
radius: value.radius,
segments: value.segments,
speed: 1/(value.radius*value.radius) * 100 //change 100 to taste
});