不能使用glTranslatef iPhone

时间:2011-10-10 10:15:54

标签: iphone ios4 opengl-es exc-bad-access

当我使用glTranslatef时,我有警告 函数'glTranslatef'的隐式声明在C99中无效 如果我建立&我有“EXC_BAD_ACCESS” 我怎么解决这个问题?

1 个答案:

答案 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.frameworkQuartzCore.framework

修改

在OpenGL ES 2.0中,您拥有1.0中可用的任何矩阵运算,例如glTranslatefglRotatefglFustrum等等。要自己实现它们并不容易,但如果你想要可编程管道,这就是你需要付出的代价。简而言之:你需要编写自己的函数来表示和操作4x4矩阵:多个矩阵,乘以矢量,创建旋转,平移和缩放矩阵,你还需要创建像fustrum这样的投影矩阵。之后,您需要在顶点着色器中声明制服以传递projectionmodelview矩阵。然后你需要将它们相乘以将变换和投影应用到顶点:

// 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。如果你不需要可编程管道就可以了。但在我看来,这值得学习。