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