当我使用glTranslatef时,我有警告 函数'glTranslatef'的隐式声明在C99中无效 如果我建立&我有“EXC_BAD_ACCESS” 我怎么解决这个问题?
答案 0 :(得分:3)
看起来如此 您尚未导入所需的标头。如果要开发OpenGL ES 1.0应用程序,则需要包含以下标题:
#import <OpenGLES/EAGL.h>
#import <QuartzCore/QuartzCore.h>
#import <OpenGLES/ES1/gl.h>
#import <OpenGLES/ES1/glext.h>
不要忘记添加框架:OpenGLES.framework
和QuartzCore.framework
。
修改强>
在OpenGL ES 2.0中,您不拥有1.0中可用的任何矩阵运算,例如glTranslatef
,glRotatef
,glFustrum
等等。要自己实现它们并不容易,但如果你想要可编程管道,这就是你需要付出的代价。简而言之:你需要编写自己的函数来表示和操作4x4矩阵:多个矩阵,乘以矢量,创建旋转,平移和缩放矩阵,你还需要创建像fustrum这样的投影矩阵。之后,您需要在顶点着色器中声明制服以传递projection
和modelview
矩阵。然后你需要将它们相乘以将变换和投影应用到顶点:
// Simple vertex shader
uniform mat4 projection;
uniform mat4 modelview;
attribute vec3 position;
void main(){
gl_Position = projection * modelview * vec4(position, 1.0);
}
有一本很棒的书可以教你如何在iPhone上使用ES1和ES2 - iPhone 3d Programming。如果你没有时间,坚持使用ES1。如果你不需要可编程管道就可以了。但在我看来,这值得学习。