2013-03-21 82 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矩陣

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

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

    mvp = modelMatrix * camMatrix * projMatrix; 
    render_geometry 
} 

forward是矢量,這意味着移動的方向。