Пример #1
0
// update the scene based on the time elapsed since last update
void Update(float secondsElapsed) {
    const GLfloat degreesPerSecond = 180.0f;
    gDegreesRotated += secondsElapsed * degreesPerSecond;
    while(gDegreesRotated > 360.0f) gDegreesRotated -= 360.0f;

    // Move position of camera base on WASD keys
    const float moveSpeed = 3.0; // Units per second;
    if(glfwGetKey(gWindow, 'S'))
    {
        gCamera.offsetPosition(secondsElapsed * moveSpeed * -gCamera.forward());
    }else if(glfwGetKey(gWindow, 'W'))
    {
        gCamera.offsetPosition(secondsElapsed * moveSpeed * gCamera.forward());
    }

    if(glfwGetKey(gWindow, 'A'))
    {
        gCamera.offsetPosition(secondsElapsed * moveSpeed * gCamera.right());
    }else if(glfwGetKey(gWindow, 'D'))
    {
        gCamera.offsetPosition(secondsElapsed * moveSpeed * -gCamera.right());
    }

    if(glfwGetKey(gWindow, 'Z'))
    {
        gCamera.offsetPosition(secondsElapsed * moveSpeed * -gCamera.up());
    }else if(glfwGetKey(gWindow, 'X'))
    {
        gCamera.offsetPosition(secondsElapsed * moveSpeed * gCamera.up());
    }

    //rotate camera based on mouse movement
    const float mouseSensitivity = 0.1f;
    double mouseX, mouseY;
    glfwGetCursorPos(gWindow, &mouseX, &mouseY);
    gCamera.offsetOrientation(mouseSensitivity * (float)mouseY, mouseSensitivity * (float)mouseX);
    glfwSetCursorPos(gWindow, 0, 0); //reset the mouse, so it doesn't go out of the window

    //increase or decrease field of view based on mouse wheel
    const float zoomSensitivity = -0.2f;
    float fieldOfView = gCamera.fieldOfView() + zoomSensitivity * (float)gScrollY;
    if(fieldOfView < 5.0f) fieldOfView = 5.0f;
    if(fieldOfView > 130.0f) fieldOfView = 130.0f;
    gCamera.setFieldOfView(fieldOfView);
    gScrollY = 0;
}