Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于面向方向偏移的三维运动_Java_Opengl - Fatal编程技术网

Java 基于面向方向偏移的三维运动

Java 基于面向方向偏移的三维运动,java,opengl,Java,Opengl,我有一个相机,有偏航和俯仰 相机的位置是x、y和z 我需要一种方法来转换偏航和按钮按下(WASD)沿x和z移动 所以,我按下W键,相机矩阵向后移动,根据偏航,给出向前移动的外观,但我不知道这样做的公式 照相机类(我认为不需要): 谢谢你的阅读 编辑: 在这里找到了解决方案[ 出于某种原因,如果我向前看,我的W向前移动,如果我向后看,我向后移动,但不在两者之间 新代码: 公共静态最终向量3f getRotationVector(){ 浮点数r=(浮点数)数学旋转半径(滚动); Matrix4f m

我有一个相机,有偏航和俯仰

相机的位置是x、y和z

我需要一种方法来转换偏航和按钮按下(WASD)沿x和z移动

所以,我按下W键,相机矩阵向后移动,根据偏航,给出向前移动的外观,但我不知道这样做的公式

照相机类(我认为不需要):

谢谢你的阅读

编辑:

在这里找到了解决方案[

出于某种原因,如果我向前看,我的W向前移动,如果我向后看,我向后移动,但不在两者之间

新代码:

公共静态最终向量3f getRotationVector(){ 浮点数r=(浮点数)数学旋转半径(滚动); Matrix4f mat=GameMath.createTransformationmatrix(新向量3f(),俯仰,偏航,0,1); 向量3f向量=新向量3f(材料m20,材料m21,-材料m22); 返回新向量3f((float)(vector.x*Math.cos(r)+vector.y*Math.sin(r)),(float)(vector.y*Math.cos(r)-vector.x*Math.sin(r)),vector.z); }

运动:

if (Keyboard.isKeyDown(Keyboard.KEY_S) && escape == false) {
        position.x -= getRotationVector().x;
        position.z -= getRotationVector().z;
    }

    if (Keyboard.isKeyDown(Keyboard.KEY_W) && escape == false) {
        position.x += getRotationVector().x;
        position.x += getRotationVector().z;
    }

    if (Keyboard.isKeyDown(Keyboard.KEY_A) && escape == false) {
        position.z -= getRotationVector().z;
        position.x -= getRotationVector().x;
    }

    if (Keyboard.isKeyDown(Keyboard.KEY_D) && escape == false) {
        position.z += getRotationVector().z;
        position.x += getRotationVector().x;
    }

你需要一些三角学才能做到这一点。我建议从二维平面的运动开始。给定当前(x,y)位置和航向角θ。如何计算新位置(x',y'))在编写代码之前,先拿一张纸和铅笔,然后再弄明白如何操作。你还想学习一些线性代数。一旦你了解矩阵乘法,这些变换的公式就变得更容易管理。用C++代替java,但是它显示了一些来自OpenGLAnd的概念。另一个问题:看看我在你问题顶部给出的链接。如果你仍然需要帮助,请随意发布一个新问题,并更新你所学到的知识。
if (Keyboard.isKeyDown(Keyboard.KEY_S) && escape == false) {
        position.x -= getRotationVector().x;
        position.z -= getRotationVector().z;
    }

    if (Keyboard.isKeyDown(Keyboard.KEY_W) && escape == false) {
        position.x += getRotationVector().x;
        position.x += getRotationVector().z;
    }

    if (Keyboard.isKeyDown(Keyboard.KEY_A) && escape == false) {
        position.z -= getRotationVector().z;
        position.x -= getRotationVector().x;
    }

    if (Keyboard.isKeyDown(Keyboard.KEY_D) && escape == false) {
        position.z += getRotationVector().z;
        position.x += getRotationVector().x;
    }