对于我的来源,请访问http://jsfiddle.net/fYtwf/
背景
我有一个使用three.js 的简单3d 模拟,其中相机被立方体包围在3 维中。在对视图控件进行编码和测试之前,这些立方体将帮助可视化相机正在查看的位置。我想创建一个简单的 3D 应用程序,通过up、down、left和right键控制相机。就像移动你的头一样
问题
在我当前的应用程序中,当面向前方并开始向上看时,我们是成功的。但是,当我们向左转 90 度并按下向上箭头时……错误的事情发生了。相机增加 x 轴,但因为我们面向另一个方向,单独修改 x 轴是错误的......
现在我假设这是因为需要一些三角函数来计算 z 轴的正确值。但是,我的三角并不出色。
当前的
为了更好地理解我的意思,请访问我的 jsfiddle:http: //jsfiddle.net/fYtwf/
UP键仅增加 X
DOWN键仅递减 X
LEFT键仅增加 Y
RIGHT键仅递减 Y
Q键仅增加 Z
W键仅递减 Z
( Q 和 W 只是为了帮助我理解而编码。)
根据我目前的理解,当我按下 UP 键时,X 必须递增,Z 轴必须根据当前的 Y 轴进行修改。但是我不知道算法:(
所以必须在KEYUP代码中修改X和Z(我认为,如果我错了,请纠正我)
// setRotateX, getRotateX, setRotateY and getRotateY are extended
// camera functions I wrote so I could work with degrees. Solution
// IS NOT required to use them, they just helped me
switch( key )
{
case KEYUP:
if ( camera.getRotateX() < 90 ){ // restrict so they cannot look overhead
camera.setRotateX( camera.getRotateX() + VIEW_INCREMENT );
}
break;
case KEYDOWN:
if ( camera.getRotateX() > -90 ){ // restrict so they cannot look under feet
camera.setRotateX( camera.getRotateX() - VIEW_INCREMENT );
}
break;
case KEYLEFT:
camera.setRotateY( camera.getRotateY() + VIEW_INCREMENT );
break;
case KEYRIGHT:
camera.setRotateY( camera.getRotateY() - VIEW_INCREMENT );
break;
}