2015-01-14 137 views
2

我一直在嘗試爲我的一個項目使用modelview矩陣,但現在我得到了一些意想不到的結果,這阻礙了我的進一步發展。openGL/glut&glm ModelView Matrix

GameEntity::GameEntity{ 
    view_matrix = glm::lookAt(glm::vec3(0.f, 0.f, 0.f), glm::vec3(0.f, 0.f, 1.f), glm::vec3(0.f, -1.f, 0.f)); 
    //view_matrix = glm::mat4(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0); //glLoadIdentity 
    //returns this matrix, since model_matrix is identity then this is clean view_matrix? 
    model_matrix = glm::mat4(1.0f); 
} 

void GameEntity::Scale(glm::vec3 vector) 
{ 
    model_matrix = glm::scale(model_matrix, vector); 
} 

void GameEntity::getMatrix(GLfloat arr[16]) 
{ 
    glm::mat4 modelview = view_matrix * model_matrix; 
    for (int i = 0; i < 4; i++){ 
     arr[i] = modelview[i][0]; 
     arr[i+1] = modelview[i][1]; 
     arr[i+2] = modelview[i][2]; 
     arr[i+3] = modelview[i][3]; 
     } 
} 

,現在該預期的結果矩陣(這是我從glLoadIdentity和glScale(0.3,0.3,1.0)獲得)

[ 0.3, 0.0, 0.0, 0.0 ] 
[ 0.0, 0.0, 0.0, 0.0 ] 
[ 0.0, 0.0, 0.0, 0.3 ] 
[ 0.0, 0.0, 0.3, 0.0 ] 

但在縮放之後,而不是我得到矩陣(正確的是在使用直接inputed view_matrix,GameEntity註釋的代碼)

[ 0.3, 0.0, 0.0, 0.0 ] [ 0.3, 0.0, 0.0, 0.0 ] 
[ 0.0, 0.0, 0.0, 0.0 ] [ 0.0, 0.0, 0.0, 0.0 ] 
[ 0.0, 0.0, 0.0, 0.0 ] [ 0.0, 0.0, 0.0, 1.0 ] 
[ 0.0, 0.0, 0.0, 1.0 ] [ 0.0, 0.0, 1.0, 0.0 ] 

隨着第一矩陣I獲得變平以雙線的圓,與第二它對單軸線伸出。任何想法我做錯了什麼?

回答

3

您的獲取矩陣功能是錯誤的。當你通過循環迭代,你沒有跳過在ARR元素適量,第一次迭代

arr[0] = modelview[0][0]; 
    arr[1] = modelview[0][1]; 
    arr[2] = modelview[0][2]; 
    arr[3] = modelview[0][3]; 

和第二進

arr[1] = modelview[1][0]; 
    arr[2] = modelview[1][1]; 
    arr[3] = modelview[1][2]; 
    arr[4] = modelview[1][3]; 

等。你要解決這個問題,通過使用

for (int i = 0; i < 4; i++) { 
    arr[4*i ] = modelview[i][0]; 
    arr[4*i+1] = modelview[i][1]; 
    arr[4*i+2] = modelview[i][2]; 
    arr[4*i+3] = modelview[i][3]; 
} 

BTW:你爲什麼在你getMatrix原型參考困擾?很明顯,你想在這裏使用簡單的C數組,所以只需使用指針(或者大小數組函數參數類型,它們像指針一樣)。 void GameEntity::getMatrix(GLfloat arr[16])的工作原理也很好,讀起來更容易。在那裏使用指針絕對沒有好處。

+0

上帝我很笨,很好的編碼在夜晚的掩護下是不好的:/ – Kwydin

+0

並且很有趣,看起來正確的glm :: lookAt在點vec3(0,0,0),vec3(0,0, -1),vec3(0,1,0),thx求助 – Kwydin