Itzik984
Itzik984

Reputation: 16804

Adjusting camera view after translation and rotation

I'm trying to make a scene of a "walking camera" in a room.

For now, i cant see anything, let alone rotation and translation, and i cant figure out why.

Please note, that before i used the look at function, i could see all like i should,

But the translation and rotation were wrong since i always moved according to a defined axis,

And not the camera axis like i should.

This is my code for now:

The perspective and look at -

mat4 Projection = perspective(45.0f, 1.0f, 0.1f, 100.0f);

vec3 pos = vec3(0.0f, 0.0f, 0.0f);
vec3 target = vec3(0.0f, 0.0f, -99.0f);
vec3 up = vec3(0.0f, 1.0f, 0.0f);

wvp *= Projection;
wvp = lookAt(pos, target, up);

The Translation and rotation after pressing some keys:

glfwSwapBuffers();
    if(glfwGetKey( 'W' ))
    {
        wvp = translate(wvp, vec3(0,0,0.01));
    }
    if(glfwGetKey( 'S' ))
    {
        wvp = translate(wvp, vec3(0,0,-0.01));
    }
    if(glfwGetKey( 'A' ))
    {
        wvp = rotate(wvp,-1.0f, vec3(0.0f, 1.0f, 0.0f));
    }
    if(glfwGetKey( 'D' ))
    {
        wvp = rotate(wvp,1.0f, vec3(0.0f, 1.0f, 0.0f));
    }

The Defined vertex for now:

static const GLfloat vertices[] = {
 //Given square
 0.0f,  0.0f, 2.0f,
 1.0f,  0.0f, 2.0f,
 0.0f,  1.0f, 2.0f,
 1.0f,  1.0f, 2.0f,
}

The why i connect them:

static const GLubyte indices[] = {
   0,1,3,
   0,2,3,
}

Some buffering:

GLuint vertexbuffer;
glGenBuffers(1, &vertexbuffer);
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);


GLuint indexbuffer;
glGenBuffers(1, &indexbuffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexbuffer);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);

Any idea on how to define the camera as needed and use translation and rotation to go with the camera?

Upvotes: 2

Views: 216

Answers (1)

fen
fen

Reputation: 10125

you should update pos and target vectors (optionally update up), then build lookAt Matrix

vec3 pos, target, forward
update() {
    if (key_up)
        pos += forward
    ...
}

render() {
    camMatrix = lookat(pos, target, up)

    mvp = modelMatrix * camMatrix * projMatrix;
    render_geometry
}

forward is vector that means direction of movement.

Upvotes: 1

Related Questions