openGLES就是openGL的阉割版,就是作者删除了一些自认为没多大作用的API。
openGL是啥,这里就不废话去讲了,我们直奔主题。
我们做OpenGLES的ios开发必须导入两个框架
QuartzCore.framework以及OpenGLES.framework(该框架的所有api都是c语言形式的)
本文分两部分介绍,一部分是基本的编写步骤,第二部分是一些API的展示
OpenGLES程序编写步骤是(以绘制正方形为例)
1、创建一个UIView的子类,并重写下面的方法
+(Class)layerClass
{
return [CAEAGLLayer class];
}
2、在init的方法中,从 基类获取 layer 属性,并将其转型至 CAEAGLLayer
CAEAGLLayer * eaglLayer = ( CAEAGLLayer *) super . layer ;
eaglLayer. opaque = YES ; // 无需 Quartz 处理透明度
3、建立一个 EAGLContext 对象( GL上下文对象)
EAGLContext * context = [[ EAGLContext alloc ] initWithAPI : kEAGLRenderingAPIOpenGLES1 ];
/*
后面的参数有两个选择
kEAGLRenderingAPIOpenGLES1=1 表示用渲染库的API版本是1.1
kEAGLRenderingAPIOpenGLES2=2 表示用 渲染库的API版本是2.0
*/
//设定当期上下文对象
[ EAGLContext setCurrentContext : m_context ]
//设定被渲染的层对象
[ m_context renderbufferStorage : GL_RENDERBUFFER_OES fromDrawable :eaglLayer];
4、创建帧缓冲管线以及渲染缓冲管线
//创建渲染缓冲管线
glGenRenderbuffersOES(1, &m_renderBuffer);
//绑定渲染缓冲管线
glBindRenderbufferOES(GL_RENDERBUFFER_OES, m_renderBuffer);
//创建帧缓冲管线
glGenFramebuffersOES(1, &m_frameBuffer);
//绑定帧缓冲管线
glBindFramebufferOES(GL_FRAMEBUFFER_OES, m_frameBuffer);
//将渲染缓冲区附加到帧缓冲区上
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, m_renderBuffer);
//创建显示区域
glViewport(0, 0, width, height);
//设定矩阵模式
glMatrixMode(GL_PROJECTION);
//设定投影空间
glOrthof(-maxX, maxX, -maxY, maxY, -1, 1);
5、渲染部分(绘制)
//清除颜色
glClearColor ( 0.5f , 0.5f , 0.5f , 1 );//清除
glClear ( GL_COLOR_BUFFER_BIT );
//压入矩阵
glPushMatrix ();
//设定特征数组
glEnableClientState ( GL_VERTEX_ARRAY );
//指定顶点
glColor4f(0, 1.0f, 0, 1);
float triangles[][2] = { { 0,0},{ 0,1},{ 1