2017-07-03 50 views
0

我有一个物体“角色”,它可以左右转动自己并朝着它的脸部方向前进,并且相机总是看着物体并可以围绕它旋转。OpenGL模拟波斯王子相机

enter image description here

的问题是:我想要摄像机的方向移动,在其方向的对象移动的摄像头,无论是在波斯的王子,如果对摄像机的方向和字符的字符脸前进这意味着如果相机没有移动角色变得更靠近相机,所以如果相机可移动,则相机应该移回以使它们之间的距离相同,如果角色朝右看则相机应该移动到其右边照相机具有位置,前,右和向上矢量以及偏航和俯仰角度,角色具有位置和偏航角度以及俯仰角度。 这使得字符移动的代码是:

void Mesh::Move(Move_Directions direction, GLfloat deltaTime) { 
GLfloat velocity = 50 * this->movementSpeed * deltaTime; 
if (direction == FORWARD) { 
    glm::vec3 t = glm::vec3(sin(glm::radians(yaw)), 0.0, cos(glm::radians(yaw))) * velocity; 
    matrix = glm::translate(matrix, t); 
    for (GLuint i = 0; i < this->m_Entries.size(); i++) { 
     this->m_Entries[i].setModelMatrix(matrix); 
    } 
    //scene->getDefCamera()->Translate(t); 
} 
if (direction == BACKWARD) { 
    glm::vec3 t = glm::vec3(sin(glm::radians(yaw)), 0.0, cos(glm::radians(yaw))) * velocity; 
    matrix = glm::translate(matrix, -t); 
    for (GLuint i = 0; i < this->m_Entries.size(); i++) { 
     this->m_Entries[i].setModelMatrix(matrix); 
    } 
    //scene->getDefCamera()->Translate(t); 
} 
if (direction == RIGHT) { 
    matrix = glm::rotate(matrix, (GLfloat) -M_PI*deltaTime, glm::vec3(0.0, 1.0, 0.0)); 
    for (GLuint i = 0; i < this->m_Entries.size(); i++) { 
     this->m_Entries[i].setModelMatrix(matrix); 
    } 
} 
if (direction == LEFT) { 
    matrix = glm::rotate(matrix, (GLfloat) M_PI*deltaTime, glm::vec3(0.0, 1.0, 0.0)); 
    for (GLuint i = 0; i < this->m_Entries.size(); i++) { 
     this->m_Entries[i].setModelMatrix(matrix); 
    } 
} 
} 

和摄像头的代码是:

void Camera::updateVectors() { 
    GLfloat radius = glm::length(center - position); 
    position.x = radius * cos(glm::radians(this->yaw)) * cos(glm::radians(this->pitch)); 
    position.y = radius * sin(glm::radians(this->pitch)); 
    position.z = radius * sin(glm::radians(this->yaw)) * cos(glm::radians(this->pitch)); 
    this->front = glm::normalize(center - position); 
    this->right = glm::normalize(glm::cross(this->front, this->worldUp)); 
    this->up = glm::normalize(glm::cross(this->right, this->front)); 
} 
+0

字符和相机“波斯王子”的【第三人称视角]你创造的名字( https://en.wikipedia.org/wiki/Virtual_camera_system#Third-person_view)?无论如何,我没有看到一个问题被问到。 –

+0

我知道第三人称相机,但在波斯王子的行为是不同于普通的射击游戏,我添加了一个图像来描述更多我想要的 – Mohamed

+1

你想添加一个行为到你的相机基地,也许在距离物体的距离。也许增加一个阈值,如果camera.pos - object.pos

回答

1

你想一个行为添加到您的相机底座,也许到物体的距离。也许增加一个阈值,如果camera.pos - object.pos d,移动相机,否则相机应该停留在它的位置。

对于你的图像,你可以计算你的对象面临的向量。

当你把你的“Z,Q,S,D”输入你应该将用等量