OpenGL入门级

2018-07-18  本文已影响0人  大鹏你我他

1.在我们画出出色的效果之前,首先要做的就是创建一个OpenGL上下文(Context)和一个用于显示的窗口

上下文(Context)

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

用于显示的窗口

GLKView* view = (GLKView *)self.view; //storyboard记得添加

view.context = self.mContext;

view.drawableColorFormat = GLKViewDrawableColorFormatRGBA8888;  //颜色缓冲区格式

[EAGLContext setCurrentContext:self.mContext];

2.图形渲染管线可以被划分为两个主要部分:第一部分把你的3D坐标转换为2D坐标,第二部分是把2D坐标转变为实际的有颜色的像素

定义顶点 数据 

顶点着色器接着会处理我们在内存中指定数量的顶点。

我们通过顶点缓冲对象(Vertex Buffer Objects, VBO)管理这个内存,它会在GPU内存(通常被称为显存)中储存大量顶点

顶点缓冲对象是我们在OpenGL教程中第一个出现的OpenGL对象。就像OpenGL中的其它对象一样,这个缓冲有一个独一无二的ID,所以我们可以使用glGenBuffers函数和一个缓冲ID生成一个VBO对象:

GLuint buffer;

glGenBuffers(1, &buffer);

OpenGL有很多缓冲对象类型,顶点缓冲对象的缓冲类型是GL_ARRAY_BUFFER。OpenGL允许我们同时绑定多个缓冲,只要它们是不同的缓冲类型。我们可以使用glBindBuffer函数把新创建的缓冲绑定到GL_ARRAY_BUFFER目标上:

glBindBuffer(GL_ARRAY_BUFFER, buffer);

从这一刻起,我们使用的任何(在GL_ARRAY_BUFFER目标上的)缓冲调用都会用来配置当前绑定的缓冲(VBO)。然后我们可以调用glBufferData函数,它会把之前定义的顶点数据复制到缓冲的内存中

glBufferData(GL_ARRAY_BUFFER, sizeof(squareVertexData), squareVertexData, GL_STATIC_DRAW);

3.现在我们已经把顶点数据储存在显卡的内存中,用VBO这个顶点缓冲对象管理。下面我们会创建一个顶点和片段着色器来真正处理这些数据。现在我们开始着手创建它们吧。

5.在每个新的渲染迭代开始的时候我们总是希望清屏,否则我们仍能看见上一次迭代的渲染结果(这可能是你想要的效果,但通常这不是)我们可以通过调用glClear函数来清空屏幕的颜色缓冲,它接受一个缓冲位(Buffer Bit)来指定要清空的缓冲,可能的缓冲位有GL_COLOR_BUFFER_BIT,GL_DEPTH_BUFFER_BIT和GL_STENCIL_BUFFER_BIT。由于现在我们只关心颜色值,所以我们只清空颜色缓冲。

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

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

注意,除了glClear之外,我们还调用了glClearColor来设置清空屏幕所用的颜色。当调用glClear函数,清除颜色缓冲之后,整个颜色缓冲都会被填充为glClearColor里所设置的颜色

//启动着色器

[self.mEffect prepareToDraw];

glDrawArrays(GL_TRIANGLES, 0, 6);

http://blog.csdn.net/wanglixin1999/article/details/51792505

http://blog.csdn.net/wangdingqiaoit/article/details/51318793

顶点着色器负责将用户指定的顶点转换为内部表示,

片元着色器决定最终生成图像的颜色

顶点着色器的和片元着色器之间可以通过传递变量来沟通

使用这两个着色器就可以绘制基本的图形了,主要的流程是:

(1) 用户在程序中指定或者加载顶点属性数据

(2) 将顶点属性数据传送到GPU,由顶点着色器处理顶点数据

(3) 由片元着色器负责最终图形的颜色

顶点属性包括位置、纹理坐标、法向量、颜色等多个属性,每个属性的数据可以存放在不同的buffer中

http://blog.csdn.net/wangdingqiaoit/article/details/51318793

https://blog.csdn.net/pdunderstand/article/details/52515151 参考文档

上一篇下一篇

猜你喜欢

热点阅读