Opengl es OpenGL制作物体面相机 OpenGL ES3,C++ 11,Android,我有一个对象和一个相机实现第三人称相机,所以我想让物体在触摸屏幕时向相机看,所以我有一个变换矩阵,用于对象和相机的视图矩阵,摄像机在物体周围旋转,当我触摸屏幕时,我希望对象朝着相机旋转,因此我尝试了以下操作: glm::vec3 up(0, 1, 0); glm::vec3 camFor(glm::cross(camera.getRight(), up)); GLfloat theta = glm::angle(glm::vec2(camFor.x, camFor.z), glm::vec2(getDirection().x, getDirection().z)); LOGI("game theta %f", theta); matrix = glm::rotate(matrix, theta, glm::vec3(0.0, 1.0, 0.0));

Opengl es OpenGL制作物体面相机 OpenGL ES3,C++ 11,Android,我有一个对象和一个相机实现第三人称相机,所以我想让物体在触摸屏幕时向相机看,所以我有一个变换矩阵,用于对象和相机的视图矩阵,摄像机在物体周围旋转,当我触摸屏幕时,我希望对象朝着相机旋转,因此我尝试了以下操作: glm::vec3 up(0, 1, 0); glm::vec3 camFor(glm::cross(camera.getRight(), up)); GLfloat theta = glm::angle(glm::vec2(camFor.x, camFor.z), glm::vec2(getDirection().x, getDirection().z)); LOGI("game theta %f", theta); matrix = glm::rotate(matrix, theta, glm::vec3(0.0, 1.0, 0.0));,opengl-es,rotation,linear-algebra,glm-math,Opengl Es,Rotation,Linear Algebra,Glm Math,我得到了物体前向矢量和相机前向矢量之间的水平角,即glm::vec3(矩阵[2][0],矩阵[2][1],矩阵[2][2]),第一次当摄像机正好在物体后面时,我得到θ等于π,这是正确的,然后我触摸屏幕触发事件,物体旋转并按预期看向摄像机,θ变为零,如果我围绕物体旋转摄像机并再次触发事件,它会为θ提供意外值。 摄像机的旋转代码为: void Camera::rotate(GLfloat xoffset, GLfloat yoffset, glm::vec3& c, double&

我得到了物体前向矢量和相机前向矢量之间的水平角,即
glm::vec3(矩阵[2][0],矩阵[2][1],矩阵[2][2])
,第一次当摄像机正好在物体后面时,我得到θ等于π,这是正确的,然后我触摸屏幕触发事件,物体旋转并按预期看向摄像机,θ变为零,如果我围绕物体旋转摄像机并再次触发事件,它会为θ提供意外值。 摄像机的旋转代码为:

void Camera::rotate(GLfloat xoffset, GLfloat yoffset, glm::vec3& c, double& delta, GLboolean constrainpitch) {
    xoffset *= (delta * this->rotSpeed);
    yoffset *= (delta * this->rotSpeed);
    pitch += yoffset;
    yaw += xoffset;
    if (constrainpitch) {
        if (pitch >= maxPitch) {
            pitch = maxPitch;
            yoffset = 0;
        }
        if (pitch <= minPitch) {
            pitch = minPitch;
            yoffset = 0;
        }
    }
    glm::quat Qx(glm::angleAxis(glm::radians(yoffset), glm::vec3(1.0f, 0.0f, 0.0f)));
    glm::quat Qy(glm::angleAxis(glm::radians(xoffset), glm::vec3(0.0f, 1.0f, 0.0f)));
    glm::mat4 rotX = glm::mat4_cast(Qx);
    glm::mat4 rotY = glm::mat4_cast(Qy);
    view = glm::translate(view, c);
    view = rotX * view;
    view = view * rotY;
    view = glm::translate(view, -c);
}

错误在于获取相机矩阵的正确向量。这是正确的

glm::vec3& Camera::getRight() {
    right = glm::vec3(view[0][0], view[1][0], view[2][0]);
    return right;
}
glm::vec3& Camera::getRight() {
    right = glm::vec3(view[0][0], view[1][0], view[2][0]);
    return right;
}

请将问题张贴到您自己的答案中,而不是将其编辑到问题中。