東西很多,很多東西我就不費話了,時間比金錢重要!
作為一個IOS程序員,如何學習OpenGL?
這一系列的東西,都是經(jīng)過前人總結(jié),然后自己學習研究,用于對IOS程序員理解和學習OpenGL的一點點學習資料,既是為自己學習總結(jié),也是為了同大家共享。
第一步:打開XCode
第二步:新建項目,加入下面兩個框架:

第三步:新建一個繼承UIView的view,取名OpenGlView,按下回車
第四步:

第五步:重寫這個view
????????????????+(Class)layerClass 方法

第六步:創(chuàng)建一個變量
CAEAGLLayer *_eaglLayer; //我們畫圖就是在這上面
創(chuàng)建一個方法:

第七步:再來一個變量
EAGLContext *_context;
無論你想讓OpenGl干什么,這個EAGLContext是缺一不可的,它管理所有OpenGl進行Draw的信息

第八步,創(chuàng)建幀緩存:
? ? ?因為這里不是說計算機圖形學的,所以我們這里簡單介紹下:GPU需要知道應該在內(nèi)存的什么位置存儲渲染的2d/3d圖像像素數(shù)據(jù)。就像為GPu提供數(shù)據(jù)的緩存一樣,接受渲染結(jié)果的緩存區(qū)叫做幀緩存。程序會想其他種類的緩存一樣生存,綁定,刪除幀緩存。但是幀緩存不需要初始化,因為渲染指令會在適當?shù)臅r候替換緩存的內(nèi)容。幀緩存會在被綁定的時候隱式開啟。
1 先創(chuàng)建一個變量叫做GLuint _colorRenderBuffer;?
用于創(chuàng)建渲染緩存區(qū) *GLuint: 無符號四字節(jié)整型,包含數(shù)值從0 到 4,294,967,295

第一行:讓OpenGL給我們一個唯一表示符,來綁定到我們創(chuàng)建的這個_colorRenderBuffer的地址(OpenGL中有太多的東西,我們需要一個唯一的ID,就像身份證一樣來標識出哪個是哪個。這個ID不能我們自己來定,只能告訴OpenGL說,我需要一個唯一ID,你給我一個吧。然后,OpenGL就會給你一個沒用過的唯一ID,這個過程是由glGenBuffers來實現(xiàn)的)
第二行:指明緩存對象類型:OpenGL中有很多緩存對象,雖然它給了我們一個ID,但不知道這個ID是用來表示什么緩存對象的。我們要明確告訴它,這里我們告訴它這是一個渲染幀。
第三行:將EAGLDrawable(我們創(chuàng)建的那個畫圖的平臺)作為存儲OpenGL ES renderbuffer對象綁定到這個渲染緩存區(qū)上。簡單就是為了為render buffer分配空間。
2 創(chuàng)建幀緩存區(qū)

前面兩部已經(jīng)在上面創(chuàng)建幀緩存區(qū)的時候解釋作用了。
最后一行:把前面創(chuàng)建的渲染緩存區(qū)依附在幀緩存區(qū)的GL_COLOR_ATTACHMENT0位置上。
好了,我們前面已經(jīng)做了這么多工作,我們先來看點效果吧
創(chuàng)建一個方法,來看到點什么。
-(void)render{

重寫我們這個view的initFrame方法

之后如果程序正確,呈現(xiàn)的效果如下:

接下來,我們渲染一個幾何體,因為晚上的教程都是話一個三角形,畫太多了,所以我們這里畫一個菱形。
在OpenGL ES2.0 的世界,在場景中渲染任何一種幾何圖形,你都需要創(chuàng)建兩個稱之為“著色器”的小程序。著色器什么的我們后面說,這里你先打出來
打開你的xcode,F(xiàn)ile\New\New File… 選擇iOS\Other\Empty, 點擊下一步。命名為:
SimpleVertex.glsl 然后保存,將下面的代碼敲進去。
這是一個頂點著色器:

下面再用同樣的方法創(chuàng)建一個片段著色器。命名為:SimpleFragment.glsl
