我想围绕一个球体旋转一个立方体,当我按空格键时,立方体开始围绕球体旋转就好,但它比我想要的要快得多,我写了一个函数,它将使用“角度”作为参数来计算旋转。完全旋转将要求角度从0到359(或1到360),但是当角度仅增加7度时,立方体完全围绕球体旋转。Three.js围绕一个球体旋转一个立方体
代码:(IM不含立方体的初始化和球啮合,就在函数)
var rotationAngle = 0;
function rotate(angle)
{
if(angle == 0)
{
keu.position.x = whiteBall.position.x + 1;
keu.position.z = whiteBall.position.z;
} else if(angle > 0 && angle < 90)
{
keu.position.x = whiteBall.position.x + Math.cos(angle);
keu.position.z = whiteBall.position.z - Math.sin(angle);
} else if(angle == 90)
{
keu.position.x = whiteBall.position.x;
keu.position.z = whiteBall.position.z - 1;
} else if(angle > 90 && angle < 180)
{
angle -= 90;
keu.position.x = whiteBall.position.x - Math.sin(angle);
keu.position.z = whiteBall.position.z - Math.cos(angle);
} else if(angle == 180)
{
keu.position.x = whiteBall.position.x - 1;
keu.position.z = whiteBall.position.z;
} else if(angle > 180 && angle < 270)
{
angle -= 180;
keu.position.x = whiteBall.position.x - Math.cos(angle);
keu.position.z = whiteBall.position.z + Math.sin(angle);
} else if(angle == 270)
{
keu.position.x = whiteBall.position.x;
keu.position.z = whiteBall.position.z + 1;
}else if(angle > 270 && angle < 360)
{
angle -= 270;
keu.position.x = whiteBall.position.x + Math.sin(angle);
keu.position.z = whiteBall.position.z + Math.cos(angle);
}
console.log(angle);
}
在上面的代码
“whiteball是球体,而‘KEU’是立方体
在我的渲染功能,我必须下面的代码以增加角度和应用旋转:
if(isKeyPressed)
{
if(rotationAngle < 360)
{
rotationAngle += 1;
}
if(rotationAngle == 360)
rotationAngle = 0;
}
rotate(rotationAngle);
我不知道为什么只有7度的增加会导致立方体围绕球体进行完整的旋转,任何代码片段/建议将不胜感激。立方体为Math.sin(counter)
和y位置Math.cos(counter)
其中计数器是递增在一些requestAnimationFrame环一些号码,并且如果是空格键向下然后递增计数器,并且如果达然后停止递增它的
嗯,实现这个,使得它每完成一个角度,或者在这种情况下,“counter”增加7 im,每个render loop增加1个角度,这意味着360循环后键被按下),它只会围绕球体旋转一次。 – FrankK
这就是'speed'变量的用途,用于控制立方体绕球体旋转的速度。另外你需要记住单位。 – Azamantes