iphoneopengl es iphone-opengl教程02.x嚴(yán)格意義上來(lái)說(shuō)矩形并不是OpenGLES的圖元但是讓我們面對(duì)_第1頁(yè)
iphoneopengl es iphone-opengl教程02.x嚴(yán)格意義上來(lái)說(shuō)矩形并不是OpenGLES的圖元但是讓我們面對(duì)_第2頁(yè)
iphoneopengl es iphone-opengl教程02.x嚴(yán)格意義上來(lái)說(shuō)矩形并不是OpenGLES的圖元但是讓我們面對(duì)_第3頁(yè)
iphoneopengl es iphone-opengl教程02.x嚴(yán)格意義上來(lái)說(shuō)矩形并不是OpenGLES的圖元但是讓我們面對(duì)_第4頁(yè)
iphoneopengl es iphone-opengl教程02.x嚴(yán)格意義上來(lái)說(shuō)矩形并不是OpenGLES的圖元但是讓我們面對(duì)_第5頁(yè)
已閱讀5頁(yè),還剩1頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、-OpenGL ESOpenGL ES 02 繪制圖元 2 矩形-02嚴(yán)格意義上來(lái)說(shuō),矩形并不是OpenGL ES 的圖元。 但是,讓面對(duì)現(xiàn)實(shí),繪制這些矩形象繪制一個(gè)三角形一樣非常簡(jiǎn)單。在本中,把基本的三角形繪制代碼轉(zhuǎn)化為繪制矩形。再一次說(shuō)明,這些渲染是的,但是通過(guò)轉(zhuǎn)化(即移動(dòng)它們)來(lái)使它們快速移動(dòng)。當(dāng)然,一旦完成了矩形,試圖完成一個(gè)立方體,完成一個(gè)紋理的立方體。本的快速小結(jié)及其他用空白畫(huà)布的 XCode 工程來(lái)渲染了一個(gè)實(shí)心的白色的三角形。為了做到這點(diǎn),上 個(gè),你創(chuàng)建了一個(gè)頂點(diǎn)數(shù)組,告訴OpenGL 這些數(shù)據(jù)并且使用 glVertexPoer() 來(lái)格式化。為渲染這個(gè)頂點(diǎn)數(shù)組定義一個(gè)狀態(tài),并

2、且使用 glDrawArrays ()來(lái)渲染它。,要使用之前的代碼,用制作三角形的方法來(lái)制作一個(gè)矩形。要做到這點(diǎn),僅僅需要修改一對(duì)(組)代碼。第一點(diǎn)是顯然的,需要 4 點(diǎn)來(lái)組成矩形, 而不是原來(lái) 3 點(diǎn)的三角形。然后,要告訴OpenGL 用不一樣的 glDrawArrays().方法來(lái)繪制一個(gè)不同的物體。讓開(kāi)始吧。定義矩形的頂點(diǎn)打開(kāi)之前刪除它,中建立的XCode 工程,找到 drawView 函數(shù)。注釋掉triangleVerti在之后轉(zhuǎn)換的時(shí)候還需要用到,并且添加下列代碼:,但是不是constGLfloat squareVerti = -1.0, 1.0, -6.0,/ Bottom lef

3、t 1.0, 1.0, -6.0/ Top left-1.0, -1.0, -6.0,/ Bottom right1.0, -1.0, -6.0,/ Top right;這個(gè)定義了的矩形。注意,這個(gè)矩形的頂點(diǎn)也是逆時(shí)針的。然 后,到下面的繪制三角形的代碼處,將這些代碼都注釋掉,回復(fù)到開(kāi)始狀態(tài)。 所以注釋掉三個(gè)函數(shù)調(diào)用的glVertexArray( ) , glEnableCntS e ( ) ,和glDrawArrays ( ) ,并添加以下代碼:glVertexPoer(3, GL_FLOAT, 0, squareVerti glEnableCntSe(GL_VERTEX_ARRAY); g

4、lDrawArrays(GL_TRIANGLE_FAN, 0, 4););這三項(xiàng)職能相同,只是功能略有不同。glVertexPoer(3, GL_FLOAT, 0, squareVerti);這個(gè)唯一的變化就是告訴OpenGL 使用了不同的頂點(diǎn)設(shè)置方案,而不是現(xiàn)在的三角形。glEnableC ntS e()同樣是告訴 OpenGL 從頂點(diǎn)數(shù)組來(lái)繪制(而不是顏色數(shù)組或者其他的什么)glDrawArrays(GL_TRIANGLE_FAN, 0, 4);這里有些改變了。在上個(gè),使用GL_TRIANGLES 做用第一個(gè)參數(shù),并且使用 3 在第3 個(gè)參數(shù)里。第 2 個(gè)參數(shù)。之前是 0,這里也還是 0,

5、因?yàn)橹话司匦蔚捻旤c(diǎn)。第一個(gè)參數(shù)是繪圖模式,而且你現(xiàn)在看到兩種可能的OpenGL 繪圖方式。花時(shí)間來(lái)現(xiàn)在不同的繪圖模式。它們是:GL_PO GL_LINESSGL_LINE_LOOP GL_LINE_STRIP GL_TRIANGLES GL_TRIANGLE_STRIP GL_TRIANGLE_FAN還沒(méi)有點(diǎn)或線(xiàn),所以我只介紹最后的三個(gè)。在我開(kāi)始之前,我要提醒你,頂點(diǎn)數(shù)組可能包含不止一個(gè)三角形,以您只看到一個(gè)物體頂點(diǎn)數(shù)組,你要知道,不僅限于這一點(diǎn)。GL_TRIANGLES - 這個(gè)參數(shù)意味著OpenGL 使用三個(gè)頂點(diǎn)來(lái)組成圖形。所以,在開(kāi)始的三個(gè)頂點(diǎn),將用頂點(diǎn) 1,頂點(diǎn) 2,頂點(diǎn) 3 來(lái)組

6、成一個(gè)三角形。完成后,在用下一組的三個(gè)頂點(diǎn)來(lái)組成三角形,直到數(shù)組結(jié)束。GL_TRIANGLE_STRIP - OpenGL 的使用將最開(kāi)始的兩個(gè)頂點(diǎn)出發(fā),然后遍歷每個(gè)頂點(diǎn),這些頂點(diǎn)將使用前 2 個(gè)頂點(diǎn)一起組成一個(gè)三角形。所以 squareVerti68將與 squareVerticies02和 squareVerticies35.生成一個(gè)三角形。 squareVerti911將與 squareVerti35 和squareVerti68生成三角形。也就是說(shuō),0,1,2 這三個(gè)點(diǎn)組成一個(gè)三角形,1,2,3 這三個(gè)點(diǎn)也組成一個(gè)三角形。注意的是, squareVerticies02表示的意思是: s

7、quareVerticies0 x 坐標(biāo)squareVerticies1 y 坐標(biāo)squareVerticies2 z 坐標(biāo)如果我沒(méi)有說(shuō)清楚的話(huà),我用下面的例子來(lái)說(shuō)明。GL_TRIANGLE_FAN - 在跳過(guò)開(kāi)始的 2 個(gè)頂點(diǎn),然后遍歷每個(gè)頂點(diǎn),讓OpenGL 將這些頂點(diǎn)于它們前一個(gè),以及數(shù)組的第一個(gè)頂點(diǎn)一起組成一個(gè)三角形。 squareVerti68將與squareVerticies35 (前一個(gè))和 squareVerticies02(第一個(gè)).生成一個(gè)三角形。也就是說(shuō),同樣是 0,1,2,3 這 4 個(gè)頂點(diǎn)。在STRIP 狀態(tài)下是,0,1,2;1,2,3 這 2 個(gè)三角形。在 FAN

8、狀態(tài)下是,2,1,0;3,2,0 這 2 個(gè)三角形。這次使用GL_TRIANGLE_FAN ,在顯示區(qū)域獲得一個(gè)矩形。點(diǎn)擊”Build & Go”,然后你將在屏幕上看到一個(gè)白色的矩形(平面)回頭看你的頂點(diǎn)數(shù)組。設(shè)法想像用三角形來(lái)繪制一個(gè)矩形。OpenGL 就是這樣做的。三角形點(diǎn) 1: squareVerticies02三角形點(diǎn) 2: squareVerticies35矩形的左上矩形的左下三角形點(diǎn) 3: squareVerticies68矩形的右下考慮到上述 3 點(diǎn),一個(gè)三角形的OpenGL 的繪制將彌補(bǔ)左下角的一半面積。試想矩形被對(duì)角線(xiàn)分割為左上角和右下角。如何通知這兩個(gè)三角形?OpenGL

9、剛才只繪制了矩形的左半邊。三角形點(diǎn) 1: squareVerticies911三角形點(diǎn) 2: squareVerticies68三角形點(diǎn) 3: squareVerticies02矩形的右上矩形的右下,上個(gè)點(diǎn)矩形的左上,第一點(diǎn)只使用了一個(gè)新的點(diǎn),OpenGL 可以渲染這個(gè)三角形來(lái)完成矩形。GL_TRIANGLE_STRIP返回代碼,改變glDrawArrays() 的第一個(gè)參數(shù)由 GL_TRIANGLE_FAN 為GL_TRIANGLE_STRIP:。點(diǎn)擊”Build & Go”然后你會(huì)獲得下面的。讓來(lái)看看,為什么只是單單修改了下繪制模式,卻沒(méi)有獲得一個(gè)矩形。OpenGL展示的頂點(diǎn)數(shù)組如下:三角

10、形點(diǎn) 1: squareVerticies02三角形點(diǎn) 2: squareVerticies35三角形點(diǎn) 3: squareVerticies68矩形的左上矩形的左下矩形的右下OpenGL 使用了前 3 個(gè)點(diǎn)來(lái)渲染一個(gè)三角形。這個(gè)左下的三角形和之前是相同的。三角形點(diǎn) 1: squareVerticies911三角形點(diǎn) 2: squareVerticies68三角形點(diǎn) 3: squareVerticies35矩形的右上矩形的右下,上個(gè)點(diǎn)矩形的左下,上 2 個(gè)點(diǎn)這個(gè)是現(xiàn)在渲染三角形的 3 個(gè)點(diǎn)。這個(gè)三角形和理想的三角形有 90 度的夾角。提供的頂點(diǎn)的數(shù)組不同,可以實(shí)現(xiàn)一個(gè)正確的 GL_TRIANG

11、LE_STRIP ,如果現(xiàn)在還是做的GL_TRIANGLE_FAN 。必須記住,你的繪制模式必須和你的頂點(diǎn)數(shù)組保持一致,否則,就會(huì)出現(xiàn)奇怪的效果,就象剛才修改的那樣。如果,你堅(jiān)持使用 GL_TRIANGLE_STRIP ,你只需要修改你的頂點(diǎn)數(shù)組,如下:const GLfloat stripSquare = -1.0, -1.0, -6.0,1.0, -1.0, -6.0,-1.0, 1.0, -6.0,1.0, 1.0, -6.0/ bottom left/ bottom right/ top left/ top right;因此,與上述情況,可以看到第一個(gè)三角形將形成頭三個(gè)頂點(diǎn),產(chǎn)生一個(gè)三角形如下:現(xiàn)在,通過(guò)指定點(diǎn)右上角頂點(diǎn)( P4) ,一個(gè)新的三角地帶將形成與左上角工作( P3 )和第二前頂點(diǎn)(P2)這是右下角。新的頂點(diǎn)顯示為橙色,綠色和紅色如下:結(jié)果是,那種方式都可以讓生成一個(gè)矩形。最終

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論