2013-03-21 5 views
2

Я пытаюсь создать сцену «камеры для ходьбы» в комнате.Настройка просмотра камеры после перевода и вращения

На данный момент я не вижу ничего, не говоря уже о переводе и переводе, и я не могу понять, почему.

Пожалуйста, обратите внимание, что, прежде чем я использовал взгляд на функции, я мог видеть все, как я должен,

Но перевод и вращение были неправы, так как я всегда перемещается в соответствии с заданной оси,

И а не ось камеры, как я должен.

Это мой код сейчас:

Перспективное и смотреть -

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); 

перевода и вращения после нажатия некоторых клавиш:

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)); 
    } 

Заданная вершина сейчас:

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, 
} 

почему я подключить их:

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

Некоторые буферизацию:

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); 

Любая идея о том, как определить камеру по мере необходимости и использовать перевод и вращение идти с камерой?

ответ

1

следует обновить POS и целевые векторы (необязательно обновлять вверх), а затем построить 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 это вектор, который означает направление движения.