opengl - 鼠标卡在原点的相机旋转

标签 opengl webgl

我用这个做我的相机

library.Camera = function Camera(PosX, PosY, PosZ, Pitch, Yaw){
    this.x = PosX;
    this.y = PosY;
    this.z = PosZ;
    this.pitch = Pitch;
    this.yaw = Yaw;

    this.getCameraMatrix = function(ModelMatrix){

        var TMatrix = ModelMatrix;

        mat4.translate(TMatrix, TMatrix, [this.x, this.y, this.z]);

        mat4.rotateX(TMatrix, TMatrix, degToRad(this.pitch));
        mat4.rotateY(TMatrix, TMatrix, degToRad(this.yaw));
        return TMatrix;

    };
};

移动效果很好,甚至旋转效果也不错。问题是用鼠标旋转总是绕着原点旋转。因此,如果我向左移动 (-x) 并开始旋转,相机仍会围绕原点旋转,而不是围绕我当前所在的点旋转。

http://glmatrix.net/docs/2.2.0/symbols/mat4.html

最佳答案

人们应该永远记住,线性变换是不可交换的,这只是意味着如果先旋转然后平移,您会得到与平移然后旋转不同的结果。

在您的情况下,在翻译之前进行旋转应该可以解决问题。

关于opengl - 鼠标卡在原点的相机旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17658145/

相关文章:

iOS:使用 Three.js 开发的 HTML5

javascript - 我们如何在 webgl 的两个 Canvas 中显示相同的对象?

javascript - Three.js Mesh 没有使用 AnimationHandler 进行动画处理

opengl-es - 使用具有球体 Material 属性和 float 的 '/' 运算符时出错 (glsl)

python - 使用 Pyglet 进行 OpenGL 拾取

java - 向后画弧线?

opengl - 在 OpenGL 中设置近平面

OpenGL灯光限制

javascript - Float32Array 在与 WebGL (Chrome) 交互时不更新 ArrayBuffer 以反射(reflect)分配的值

opengl - OpenGL 是什么类型的 API?