【问题标题】:How to map control key to a specific angle or orientation?如何将控制键映射到特定的角度或方向?
【发布时间】:2016-07-14 22:05:23
【问题描述】:

目前,我基本上已经构建了一个各种角度的大型哈希表,以及它们映射到的方向,如果用户按右、上、下、左键。就我而言,这是必需的,因为我有一组几何图形,当用户按下右时,它们都向右移动,当用户按下时,它们都向左移动......

但是,当包含这些的场景旋转到其原始状态以外的任何位置时,这些控件需要更新/反转/等。也就是说,如果你从后面看场景,现在按向左可以让所有对象都向右移动,等等。

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

【问题讨论】:

  • 如果问题不清楚,我很抱歉。我有场景和旋转的对象,但是,控件搞砸了,因为如果场景现在反转,你的左边变成你的右边,等等......我希望有一种更简单的方法来将控件映射到一个方向而不是构建一个大的 if/else 或对象映射,我将在其中将场景旋转角度映射到键的方向。例如:如果scene.rotation === 0,right = x 但是如果scene.rotation === Math.PI,right = -x,等等......这是我想要的一个简单例子,但是我有它的所有方向

标签: 3d three.js babylonjs


【解决方案1】:

您可以使用位移矢量(一组这样的矢量,每个矢量用于所需的移动方向)并使用相机旋转它,或者,如果您的相机是静止的并且场景旋转,则沿方向旋转位移与场景旋转方向相反(即,如果您围绕 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);
}

【讨论】:

  • 如果问题不清楚,我很抱歉。我有场景和旋转的对象,但是,控件搞砸了,因为如果场景现在反转,你的左边变成你的右边,等等......我希望有一种更简单的方法来将控件映射到一个方向而不是构建一个大的 if/else 或对象映射,我将在其中将场景旋转角度映射到键的方向。例如:如果scene.rotation === 0,right = x 但是如果scene.rotation === Math.PI,right = -x,等等......这是我想要的一个简单例子,但是我有它的所有方向
  • @Detuned 我可以说你想将物体的运动方向链接到相机吗?所以当你按右键时,对象总是会在屏幕上向右移动。
  • 有机会,你有一个可行的例子吗?这将非常有帮助,因为我在网上没有找到任何其他内容。
  • 不幸的是,我没有。如果对这个想法有什么不清楚的地方,请在 cmets 中提问,我很乐意帮助您理解它。
猜你喜欢
  • 2015-09-05
  • 1970-01-01
  • 2017-02-25
  • 2012-11-04
  • 1970-01-01
  • 2015-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多