0

这是我的 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 附近移动,此代码工作正常。

4

0 回答 0