这是我的 CAMERA 类,它在 vertexshader 中制作 viewMat 统一变量。
struct CAMERA {
glm::vec3 EYE{ 0.0f,0.0f,150.0f };
glm::vec3 AT{ 0.0f,0.0f,0.0f };
glm::vec3 UP{ 0.0f,1.0f,0.0f };
glm::vec3 Dir() { return glm::normalize(this->EYE - this->AT); }
glm::vec3 Right() { return glm::normalize(glm::cross(this->UP, this->Dir())); }
glm::vec3 Up() { return glm::normalize(glm::cross(this->Dir(), this->Right())); }
glm::mat4 view_M() {
glm::vec3 cameraDirection = glm::normalize(this->EYE - this->AT);
glm::vec3 cameraRight = glm::normalize(glm::cross(this->UP, cameraDirection));
glm::vec3 cameraUp = glm::normalize(glm::cross(cameraDirection, cameraRight));
return glm::lookAt(this->EYE, cameraDirection, cameraUp);
}
}camera;
我想让相机移动从右到左。我认为这会起作用..但是这段代码不像我预期的那样工作..
// go up
glm::vec3 t{ camera.Up() };
camera.EYE = glm::translate(glm::mat4(1.0f), t) * glm::vec4(camera.EYE,1.0f);
camera.AT = glm::translate(glm::mat4(1.0f), t) * glm::vec4(camera.AT, 1.0f);
这是我的预期.. 相机上升,物体似乎下降.. 红点不是真正的 obj。
如何使用(CAMERA)相机结构进行相机移动?
if (up) {
glm::mat4 R = glm::rotate(glm::mat4(1.0f), glm::radians(-degree), camera.Right());
camera.EYE = glm::vec3(R * glm::vec4(camera.EYE, 1.0f));
camera.UP = glm::vec3(R * glm::vec4(camera.UP, 1.0f));
}
if (down) {
glm::mat4 R = glm::rotate(glm::mat4(1.0f), glm::radians(degree), camera.Right());
camera.EYE = glm::vec3(R * glm::vec4(camera.EYE, 1.0f));
camera.UP = glm::vec3(R * glm::vec4(camera.UP, 1.0f));
}
if (right) {
glm::mat4 R = glm::rotate(glm::mat4(1.0f), glm::radians(degree), camera.Up());
camera.EYE = glm::vec3(R * glm::vec4(camera.EYE, 1.0f));
camera.UP = glm::vec3(R * glm::vec4(camera.UP, 1.0f));
}
if (left) {
glm::mat4 R = glm::rotate(glm::mat4(1.0f), glm::radians(-degree), camera.Up());
camera.EYE = glm::vec3(R * glm::vec4(camera.EYE, 1.0f));
camera.UP = glm::vec3(R * glm::vec4(camera.UP, 1.0f));
}
这是我的卫星运动在 0,0 附近移动,此代码工作正常。