如何将控制键映射到特定角度或方向?

时间:2016-07-13 23:30:48

标签: 3d three.js babylonjs

目前,我基本上已经构建了一个包含各种角度的大型哈希表以及它们映射到的方向,如果用户按下右,上,下,左。在我的情况下,这是必需的,因为我有一组几何形状,当用户按下右边时,它们都向右移动,当它们离开时,它们都向左移动......

但是,当包含这些内容的场景旋转到原始状态以外的任何内容时,需要更新/反转这些控件等。也就是说,如果您从后面查看场景,现在按左键可以使对象全部正确等等。

我试图看看是否有一种更简单的方法来应用矩阵变换,而不是硬编码将各种场景角度映射到键的大型哈希表。

1 个答案:

答案 0 :(得分:0)

您可以使用位移矢量(一组这样的矢量,每个矢量用于所需的移动方向),然后使用相机旋转它,或者,如果您的相机静止并旋转场景,则旋转位移方向与场景旋转方向相反(即,如果围绕x轴顺时针旋转场景,则绕同一轴逆时针旋转位移矢量相同的角度)。更正式地说,你应该苹果旋转矩阵反转场景的旋转。

旧答案:

  

如果我正确地理解了你的问题,那么你需要一些方法   使用键盘从不同的角度查看场景。嗯,一个人可以   通过各种方式获得真正的想象力,但我认为最重要的一个   传统的方法是旋转场景   按下相应的键。例如,按下左键时,   在每一帧中添加(或减去)一个常数值(即   旋转速度)到(来自)围绕给定轴的场景旋转:

var speed = 0;

document.body.addEventListener('keydown', function (e) {
    switch (e.keyCode) {
        case 37: // left arrow
            speed = -0.1;
            break;
        case 39: // right arrow
            speed = 0.1;
            break;
    }
});
document.body.addEventListener('keyup', function (e) {
    speed = 0;
});

function update () {
    scene.rotateX(speed);
    renderer.render(scene, camera);
    requestAnimationFrame(update);
}