第一節(jié):我們不畫三角形!

東西很多,很多東西我就不費話了,時間比金錢重要!

作為一個IOS程序員,如何學習OpenGL?

這一系列的東西,都是經(jīng)過前人總結(jié),然后自己學習研究,用于對IOS程序員理解和學習OpenGL的一點點學習資料,既是為自己學習總結(jié),也是為了同大家共享。

第一步:打開XCode

第二步:新建項目,加入下面兩個框架:

兩個框架很重要

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

第四步:

引入三個頭文件

第五步:重寫這個view

????????????????+(Class)layerClass 方法

想要顯示OpenGL的內(nèi)容,你需要把它缺省的layer設置為一個特殊的layer。(CAEAGLLayer)。這里通過直接復寫layerClass的方法。相當于構(gòu)建了一個平臺來畫圖

第六步:創(chuàng)建一個變量

CAEAGLLayer *_eaglLayer; //我們畫圖就是在這上面

創(chuàng)建一個方法:


將這個view的layer賦值給這個變量;并讓他的opaqua為yes,這樣做的目的是節(jié)省內(nèi)存,使用過tableview cell 應該有所了解

第七步:再來一個變量

EAGLContext *_context;

無論你想讓OpenGl干什么,這個EAGLContext是缺一不可的,它管理所有OpenGl進行Draw的信息

第三行:分配一個實例,表示當前使用的是哪個版本的OpenGL ES,我們使用APIOpenGLES2(為什么要用二,因為我也剛學,還不是很清楚1,2,3之間的區(qū)別到底有哪些)第九行:獲取當前使用的上下文

第八步,創(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{

第一行:設置一個顏色,讓這個顏色充滿這個viewRGBA你懂的 第二行:使用glClear來用上面的顏色填充GL_COLOR_BUFFER_BIT緩存區(qū) 第三行:OpenGL上下文context將這個顏色緩存區(qū)中的東西呈現(xiàn)出來

重寫我們這個view的initFrame方法


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


接下來,我們渲染一個幾何體,因為晚上的教程都是話一個三角形,畫太多了,所以我們這里畫一個菱形。

在OpenGL ES2.0 的世界,在場景中渲染任何一種幾何圖形,你都需要創(chuàng)建兩個稱之為“著色器”的小程序。著色器什么的我們后面說,這里你先打出來

打開你的xcode,F(xiàn)ile\New\New File… 選擇iOS\Other\Empty, 點擊下一步。命名為:

SimpleVertex.glsl 然后保存,將下面的代碼敲進去。

這是一個頂點著色器:

可以看出來,其實就是一個C程序

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

下面,我們將這兩個著色器進行編譯。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容