Xcode建立opengl模板,此模板并不推荐使用。
自己建立模板:
创建单个视图控制器模板,在xib界面中把模板关联上模板。
添加库文件:
Opengles,quartzcore
在appdelegate中,方法:applicationWillResignActive中添加(eaglview*)self.viewcontroller.view stopAnimation
didBecomeAction:修改 startanimation
willTerminate:stopanimation
三个地方要修改。
在init方法中修改颜色可以验证是否配置成功。(清除缓存区)
opengl就是api的工具包,负责图形的渲染。
苹果下没有摄像机,需要手动裁减过来。
opengl是一个状态机,就是学习它的状态。状态就是渲染的状态,改变这些状态可以渲染出来不同的图形。包含颜色,线条的粗细,图形的纹理。
渲染管线:就是说明opengl有一套严格的处理顺序,也就是定点的处理顺序,定点缓冲,颜色,帧缓冲,深度缓冲。
程序入口:layerlass
结束:creatFramebuffer
从这里开始就是我们的渲染上下文设置,渲染上下文主要用来设置颜色缓冲区,深度缓冲区,绘制前的准备工作,再windows中一行代码就可以实现。
layerclass层的作用:这个方法可以实现coreanimation与opengl es之间的连接,重载这个方法,返回caeagllayer层。
确定版本号:initapi:keaglrenderingapiopengles1 1.0 2.0两个版本
函数:creatframebuffer 创建帧缓冲区,颜色缓冲区,将来还有深度缓冲区
操作缓冲区对象步骤:获取,绑定,修改,使用,删除。
缓冲区就是操作的对象,分为颜色缓冲,深度,模板缓冲。颜色缓冲就是在屏幕上显示二进制的颜色。深度缓冲就是模型当中各个点的数据以及位置的信息。
视口就是坐标系,
glloadidentity转换成单位矩阵
glorthof视口大小(前两项是一个x)
Cadisplaylink定时器,相当高效
视口是屏幕外的区域,这才是坐标系,不是画上去的,是投影上去的。
Gldrawarrays绘制函数
glcolor4f 0-1的范围,4ub是0-255。
构建立方体:
线:
两个点,颜色,粗细glLineWith
GL_LINES
三角形:
3个点
GL_TRIANGLES
四边形:
GL_TRIANGLE_FAN
有锯齿现象,可消
打开深度,才能绘制立方体。
glEnable(GL_DEPTH_TEST) 启用Z轴,此函数是一个开关,还可以打开其他的效果。
定点绘制和索引绘制。
逆时针排列。
8个点建立完毕
确定6个面的顺序
这是按照索引来绘制的。
gltramslatef平移
Gldrawelements绘制
远裁减面和近裁减面之间才能绘制。
写在数组中的点,无法修改每个面的颜色。
此方法可以修改每个面的颜色。
剔除现象,物体转动后绘制就变成正方向了,就透视了,始终有一个面无法穿透。
手动创建深度缓冲区:
if(USE_DEPTH_BUFFER)
{
1.获取标识符
glGenRenderbuffers(1,&地址1);
2.绑定深度缓冲区,把这个内存变量绑定到渲染缓冲区的一个区域
glBindRenderbuffer(GL_RENDERBUFFER_OES,地址1);
填充数据:
glRenderbufferStorageOES(GL_RENDERBUFFER_OES,GL_DEPTH_COMPONENT16_OES,framebufferWidth,framebufferHeight);
按照屏幕的范围来包含深度缓冲区
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES,GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES,depthRenderbuffer);
绑定到帧缓冲区
}
缓冲区不用的时候要释放:
=0;
在二维中谁先绘制谁就在下面,三维是根据z轴判断的。
glpushmatrix
中间是模型的动作,单独的区域,不影响别人。
glpopmatrix
逆时针:GL_CCW
顺时针:GL_CW