如何计算OpenGL 3. + 2D相机胶卷的视图matrix

我正在尝试为2D游戏引擎创建相机对象,但我似乎无法将视图matrix向右移动。

这是我目前使用的代码:

glm::mat4 Camera::GetViewMatrix() { glm::mat4 view; glm::vec3 camPos = glm::vec3(this->pos, CAM_Z); GLfloat xup, yup; xup = sin(this->rot); yup = cos(this->rot); view = glm::lookAt(camPos, camPos + glm::vec3(0.0f, 0.0f, -1.0f), glm::vec3(xup, yup, 0.0f)); return view; } 

我从这得到的结果如下旋转之前: 图片1

旋转后: 图片2

如您所见,相机正在左上角旋转。 左上角是原点(0,0,0),相机的位置是(0,0)。 不应该使用lookAt函数将摄像机定位在(0,0,1)并将其指向(0,0,0)? 这不是似乎正在发生的事情。

我只是试图让相机滚动它的位置。 任何帮助将不胜感激! 提前致谢!

我find了一个解决scheme:D

我只是不得不放弃glm::lookAt的使用,并自己创建视图matrix(很简单,因为它是一个2D相机)。

以下是适用于我的代码:

 glm::mat4 Camera::GetViewMatrix() { glm::mat4 view; glm::vec2 midOffset = glm::vec2(this->width * 0.5, this->height * 0.5); view = glm::translate(view, glm::vec3(midOffset, 0.0)); view = glm::rotate(view, -this->rot, glm::vec3(0.0, 0.0, 1.0)); view = glm::translate(view, glm::vec3(-midOffset, 0.0)); view = glm::translate(view, glm::vec3(-this->pos, CAM_Z)); return view; }