2013-10-29 228 views
2

正交相機的投影矩陣

我試圖實現正視相機的2D與OpenGL渲染的目標。

問題

沒有被繪製到屏幕上。

的設置

每個幀我使用此調用更新照相機:

updateCamera(&gCamera, -10.0f, 10.0f, 0.0f, 10.0f, 1.0f, -1.0f); 

的updateCamera方法具有以下聲明:

void updateCamera(Camera* cam, float top, float bottom, float left, float right, float zFar, float zNear); 

照相機結構簡單地有代表矩陣的float opm[4][4]成員。

的updateCamera方法具有以下實現:

cam->opm[0][0] = 2.0f/(right - left); 
cam->opm[1][1] = 2.0f/(top - bottom); 
cam->opm[2][2] = -2.0f/(zFar - zNear); 
cam->opm[3][0] = -(right + left)/(right - left); 
cam->opm[3][1] = -(top + bottom)/(top - bottom); 
cam->opm[3][2] = -(zFar + zNear)/(zFar - zNear); 
cam->opm[3][3] = 1.0f; 

一切都正確繪製如果使用單位矩陣,而不是上面的一個。我的矩陣計算中可能存在一個問題?

+1

爲什麼不使用http://glm.g-truc.net/?它從頭開始創建矩陣更加直觀! –

+1

雖然glm是一個很好的庫,它在其他項目中對我來說工作得很好,但對於我來說,這是一個小項目,可以讓我學習如何在這些矩陣方面進行一切工作。我發現這個知識很有用。 – RaptorDotCpp

+0

我明白,但GLM是一個非常輕的庫。你可以使用它,但仍然可以理解幕後的情況......但是如果你真的想讓自己成爲你的,那麼首先製作一個矩陣類,這樣你就可以乘上這些矩陣......然後用分開的步驟處理你的邏輯 –

回答

2

問題在於頂點的定義和對updateCamera的調用。

該三角形非常小,以至於沒有用這些參數繪製。

使用下列繪圖調用:

updateCamera(&gCamera, -1.0f, 1.0f, -1.0f, 1.0f, 1.0f, -1.0f); 

一切正常。

0

首先使用單位矩陣來確定繪圖是否工作 - 然後添加縮放和平移。

+0

感謝你的建議我找到了問題並回答了我自己的問題。 – RaptorDotCpp