Part of the Khronos Group
OpenGL.org

The Industry's Foundation for High Performance Graphics

from games to virtual reality, mobile phones to supercomputers

Results 1 to 2 of 2

Thread: help me in this codes

  1. #1
    Newbie Newbie
    Join Date
    Jun 2014
    Posts
    1

    help me in this codes

    i am new in opengl and i need to help to fix my camera view using these codes;

    SDL_Window*window1;
    SDL_Event event;

    class cam
    {
    glm::mat4 ViewMatrix;
    glm::mat4 ProjectionMatrix;


    double currentTime = 0;
    double lastTime = 0;
    float deltaTime = 0.0;
    // Initial position : on +Z
    vec3 position = glm::vec3(0, 0, 5);
    // Initial horizontal angle : toward -Z
    float horizontalAngle = 3.14f;
    // Initial vertical angle : none
    float verticalAngle = 0.0f;
    // Initial Field of View
    float initialFoV = 45.0f;

    float speed = 3.0f; // 3 units / second
    float mouseSpeed = 0.005f;


    public:


    void computeMatricesFromInputs()
    {




    currentTime = SDL_GetTicks();
    lastTime = currentTime;
    deltaTime = (float)(currentTime - lastTime) / 1000;


    int xpos, ypos;

    SDL_GetMouseState(&xpos, &ypos);


    // Compute new orientation
    horizontalAngle += mouseSpeed * float(1024 / 2 - xpos);
    verticalAngle += mouseSpeed * float(768 / 2 - ypos);

    // Direction : Spherical coordinates to Cartesian coordinates conversion
    glm::vec3 direction(
    cos(verticalAngle) * sin(horizontalAngle),
    sin(verticalAngle),
    cos(verticalAngle) * cos(horizontalAngle)
    );

    // Right vector
    glm::vec3 right = glm::vec3(
    sin(horizontalAngle - 3.14f / 2.0f),
    0,
    cos(horizontalAngle - 3.14f / 2.0f)
    );

    // Up vector

    glm::vec3 up = glm::cross(right, direction);


    // Move forward
    if (event.type == SDL_KEYDOWN)
    {
    switch (event.key.keysym.sym)
    {
    case SDLK_UP:
    position += direction * deltaTime * speed;
    cout << "hello\n";
    break;
    case SDLK_DOWN:
    position -= direction * deltaTime * speed;
    break;
    case SDLK_RIGHT:
    position += right * deltaTime * speed;
    break;
    case SDLK_LEFT:
    position -= right * deltaTime * speed;
    break;
    default:
    break;

    }
    }



    float FoV = initialFoV;


    // Projection matrix : 45 Field of View, 4:3 ratio, display range : 0.1 unit <-> 100 units
    ProjectionMatrix = glm:erspective(FoV, 4.0f / 3.0f, 0.1f, 100.0f);
    // Camera matrix
    ViewMatrix = glm::lookAt(
    position, // Camera is here
    position + direction, // and looks here : at the same position, plus "direction"
    up // Head is up (set to 0,-1,0 to look upside-down)
    );




    }
    glm::mat4 getViewMatrix(){
    return ViewMatrix;
    }
    glm::mat4 getProjectionMatrix(){
    return ProjectionMatrix;
    }

    ands here my render
    void render()
    {

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glUseProgram(programID);
    cam a;

    a.computeMatricesFromInputs();
    glm::mat4 ProjectionMatrix = a.getProjectionMatrix();
    glm::mat4 ViewMatrix = a.getViewMatrix();
    glm::mat4 ModelMatrix = glm::mat4(1.0);
    glm::mat4 MVP = ProjectionMatrix * ViewMatrix * ModelMatrix;
    glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
    MatrixID = glGetUniformLocation(programID, "MVP");
    glUniformMatrix4fv(MatrixID, 1, GL_FALSE, &MVP[0][0]);

    codes maybe too many but i may think that the main error is the deltatime wrong usage or maybe theres something else error in my codes;
    Last edited by kon777; 06-08-2014 at 08:05 PM.

  2. #2
    Junior Member Newbie
    Join Date
    Sep 2012
    Posts
    28
    Here:
    Code :
    currentTime = SDL_GetTicks();
    lastTime = currentTime;
    deltaTime = (float)(currentTime - lastTime) / 1000;

    It won't work because you're setting to lastTime currentTime so their difference is 0. Try replacing it with:
    Code :
    currentTime = SDL_GetTicks();
    deltaTime = (float)(currentTime - lastTime) / 1000;
    lastTime = currentTime;

    If it is the first frame you'll get a big number because lastTime is 0 so you can force deltaTime to be 0.

    P.S.: Please edit your post adding [.code][/code] tags (without the dot).

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •