2011-01-20 50 views
0

編碼錯誤。Iphone OpenGL:glOrthof vs glFrustumf。 glOrthof不是3D嗎?

正確的我需要製作一個3D立方體,通過用戶交互旋轉等等。嘿沒有biggy。
製作3D立方體的所有示例似乎都使用glOrthof,當我向人們演示一個3D模型時,他們說它不是3D。

問題是,glFrustumf似乎把我放在立方體而不是在我面前。我不能用glTransform,因爲它重新使用模型視圖矩陣將其移回(我甚至嘗試手動修改)

/* save current rotation state */ 
GLfloat matrix[16]; 
glGetFloatv(GL_MODELVIEW_MATRIX, matrix); 

/* re-center cube, apply new rotation */ 
glLoadIdentity(); 


glRotatef(self.angle, self.dy,self.dx,0); 

/* reapply other rotations so far */ 
glMultMatrixf(matrix); 

所以問題是。
做一個3D立方體我必須使用glFrustumf如果是,到底如何做我退後一步5,但仍重複使用模型矩陣(它保持在什麼都向用戶移動它的立方體旋轉)

+0

你的[`glMatrixMode()`](http://www.khronos.org/opengles/documentation/opengles1_0/html/glMatrixMode.html)調用在哪裏? – genpfault 2011-01-20 18:51:48

回答

3

我不確定你的意思是glOrthof()「不是3-D」。旋轉立方體示例我有here(同時使用OpenGL ES 1.1和2.0渲染紋理立方體)似乎適用於3D,並且我在渲染器的OpenGL ES 1.1一側使用了glOrthof()。可以獨立於glOrthof()的用法應用陰影和其他效果。

在該示例中,我不回讀模型視圖矩陣來操作多維數據集。相反,我在本地保留一個矩陣的副本,並使用一些Core Animation輔助函數修改它。除了我在立方體上執行的CATransform3DRotate()之外,您還應該能夠投入CATransform3DTranslate()以使其在特定方向上移位,同時仍能旋轉它。

我保留了模型視圖矩陣的本地副本以獲得性能(回讀模型視圖矩陣會暫停OpenGL ES 1.1上的渲染管道),並且爲了與2.0兼容(需要將矩陣作爲統一發送到着色器)。

此外,在對後面的問題(可能會關閉)的回答中,您不能隨意更改模型視圖矩陣中的值,並期望看到線性位移。你需要正確的計算數學,矩陣數學從來不是我的優點之一。我發現最好讓轉換操作(如Core Animation中提供的那些操作)在操作矩陣時爲您做數學運算。