2013-07-22 74 views
1

我在OpenGL ES 2.0中創建了一個應用程序,並且想要設置一個2D投影矩陣來整理由方面引起的拉伸和失真屏幕的比例。我通過使用函數創建了具有所需值的矩陣。函數的結果是一個4x4矩陣,然後上傳到頂點着色器。當我運行該程序時,出現一個編譯錯誤:「無法轉換GLfloat (*)[4]' to GLfloat'作爲回報​​」。我有限的C++知識,不知道如何解決這個問題,下面是我調用的函數的代碼。OpenGL ES 2.0 2D投影矩陣,將GLfloat(*)[4]錯誤轉換爲GLfloat

GLfloat ortho_matrix(float left, float right, float bottom, float top, float near, 
float far) 
{ 
GLfloat result[4][4]; 

result[0][0] = 2.0/(right - left); 
result[1][0] = 0.0; 
result[2][0] = 0.0; 
result[3][0] = 0.0; 

//Second Column 
result[0][1] = 0.0; 
result[1][1] = 2.0/(top - bottom); 
result[2][1] = 0.0; 
result[3][1] = 0.0; 

//Third Column 
result[0][2] = 0.0; 
result[1][2] = 0.0; 
result[2][2] = -2.0/(far - near); 
result[3][2] = 0.0; 

//Fourth Column 
result[0][3] = -(right + left)/(right - left); 
result[1][3] = -(top + bottom)/(top - bottom); 
result[2][3] = -(far + near)/(far - near); 
result[3][3] = 1; 

return result; 
} 

回答

1

你試圖從你的函數返回一個浮點數,你需要返回一個二維數組。聲明你的功能:

void ortho_matrix(float left, float right, float bottom, float top, float near, 
float far, GLfloat result[4][4]) 
+0

我需要返回的數組'結果'而不是虛空暗示的任何內容。我應該用什麼替換void來使數組返回? –

+0

在我的原型中,您將通過函數的''result''參數返回結果。你不需要函數中的''return''語句和''result [4] [4]''聲明。 –

+0

我解決了它。最後,我將它存儲爲一維矩陣,因爲我使用的統一函數(glUniformMatrix4fv)在將它導入着色器之前自動將其轉換爲二維矩陣。然後解決了從Glfloat 4x4轉換爲GLfloat的問題。感謝您的建議,並幫助我找到正確的答案。 –

0

看看GLM。它具有適當的矩陣類型和對矩陣操作的適當支持。它也是OpenGL友好的。