Iphone OpenGL:glOrthof vs glFrustumf。是不是3D?

时间:2011-01-20 16:32:35

标签: iphone opengl-es

编码日不好。

我需要制作一个通过用户交互旋转的3D立方体。嘿,没什么大不了的 制作3D立方体的所有示例似乎都使用了glOrthof,当我向人们演示一个时,他们说它不是3D。

问题是glFrustumf似乎把我放在了立方体而不是在我面前。我无法使用glTransform将其移回,因为它重新使用ModelView Matrix(我甚至尝试手动修改它)

/* 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但仍然重复使用模型矩阵(它使立方体在用户移动它的任何方向上旋转)

1 个答案:

答案 0 :(得分:3)

我不确定glOrthof()“你不是3-D”的意思。旋转立方体示例我有here(使用OpenGL ES 1.1和2.0来渲染纹理立方体)似乎适用于3-D,我在OpenGL ES 1.1中使用glOrthof()渲染器。可以独立于glOrthof()用法应用着色和其他效果。

在该示例中,我不回读模型视图矩阵来操纵立方体。相反,我在本地保留了一个矩阵的副本,并使用一些Core Animation辅助函数对其进行修改。除了我在多维数据集上执行的CATransform3DRotate()之外,你应该能够使用CATransform3DTranslate()来向某个方向移动它,同时仍然可以旋转它。

我保留了模型视图矩阵的本地副本以提高性能(回读模型视图矩阵会停止OpenGL ES 1.1上的渲染管道),并保持与2.0的兼容性(您需要将矩阵作为制服发送到着色器)。

此外,在回答您后来的问题(可能会被关闭)时,您不能随意更改模型视图矩阵中的值,并期望从中看到线性位移。你需要正确的数学,矩阵数学从来都不是我的优点之一。我觉得最好让变换操作(比如Core Animation中提供的操作)在操作矩阵时为你做数学处理。