OpenGL的基本概念

OpenGL的版本

OS系统默认支持OpenGl ES1.0、ES2.0以及ES3.0 3个版本,三者之间并不是简单的版本升级,设计理念甚至完全不同,在开发OpenGL项目前,需要根据业务需求选择合适的版本。通过EAGLContext指定ES版本号

EAGLContext *mContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2]; //2.0,还有1.0和3.0 

OpenGL坐标系

OpenGL坐标系不同于UIKit坐标系,其实它是这样的

OpenGL的基本概念_第1张图片

GLKViewController & GLKView

系统对OpenGL进行了简单的封装,继承GLKViewController定义了自己的ViewController,CLKViewController的View为CLKView类

GLKViewController渲染并非NSRunLoopCommonModes,而是NSDefaultLoopMode,因此在UIKit使用CLKViewController,当滑动界面的时候,OpenGL是不会渲染的

EAGLContext

EAGLContext与UIKit中的CGContextRef相识,EAGLContext相当于OpenGL绘制句柄或者上下文,在绘制图之前需要指定使用创建的上下文绘制。

[EAGLContext setCurrentContext:self.mContext];

渲染场景的代码

- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect {

glClearColor(0.3f, 0.6f, 1.0f, 1.0f);

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

//启动着色器

[self.mEffect prepareToDraw];

glDrawElements(GL_TRIANGLES, self.mCount, GL_UNSIGNED_INT, 0);

}

glClear-清除viewport的缓存区

GL_API void          GL_APIENTRY glClear (GLbitfield mask);

GL_API void          GL_APIENTRY glClearColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);// 清除颜色的设置

GL_API void          GL_APIENTRY glClearDepthf (GLclampf depth);

GL_API void          GL_APIENTRY glClearStencil (GLint s);

GL_COLOR_BUFFER_BIT: 当前可写的颜色缓冲

GL_DEPTH_BUFFER_BIT: 深度缓冲

GL_ACCUM_BUFFER_BIT: 累积缓冲

GL_STENCIL_BUFFER_BIT: 模板缓冲

你可能感兴趣的:(OpenGL的基本概念)