

下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第 18 課 二次幾何體:利用二次幾何體,你可以很容易的創(chuàng)建球,圓盤,圓柱和圓錐。二次曲面是一種畫復(fù)合對(duì)象的方法,這種方法通常并不需要很多的三角形。要增加 7 個(gè)變量以及修改紋理以增加一些變化 :要使用第七課的代碼。boolsp;/ 空格鍵是否按下part1; part2; p1=0; p2=1;GLUquadricObj/ 圓盤的起始角度/ 圓盤的結(jié)束角度/ 增量 1/ 增量 1*quadratic;/ 二次幾何體/ 二次幾何體標(biāo)示符GLuobject=0;好了現(xiàn)在開始搞 InitGL()函數(shù)。打算增加 3 行代碼用來(lái)初始化的二次曲面。這 3 行代碼將在你使 1 號(hào)光源有效后增加,但是要在返
2、回之前。第一行代碼將初始化二次曲面并且創(chuàng)建一個(gè)指向改二次曲面的指針,如果改二次曲面不能被創(chuàng)建的話,那么該指針就是 NULL。第二行代碼將在二次曲面的表面創(chuàng)建平滑的法向量,這樣當(dāng)燈光照上去的時(shí)候?qū)?huì)好看些。另外一些可能的取值是:GLU_NONE 和 GLU_FLAT。最后使在二次曲面表面的紋理有效。quadratic=gewQuadric();/ 創(chuàng)建二次幾何體ormals(quadratic,gluQuadricTexture(quadratic,GLU_SMOOTH);GL_TRUE);/ 使用平滑法線/ 使用紋理現(xiàn)在我決定在本課里保留立方體,這樣你可以看到紋理是如何到二次曲面對(duì)象上的。而且
3、我打算將繪制立方體的代碼定義為一個(gè)單獨(dú)的函數(shù),這樣在定義函數(shù) Draw()的時(shí)候它將會(huì)變的不那么凌亂。每個(gè)人都應(yīng)該記住這些代碼:GLvoid glDrawCube()glBegin(GL_QUADS);/ 前面 glNormal3f( 0.0f, glTexCoord2f(0.0f, glTexCoord2f(1.0f, glTexCoord2f(1.0f, glTexCoord2f(0.0f,/ 后面 glNormal3f( 0.0f, glTexCoord2f(1.0f, glTexCoord2f(1.0f, glTexCoord2f(0.0f, glTexCoord2f(0.0f,/ 上
4、面 glNormal3f( 0.0f, glTexCoord2f(0.0f, glTexCoord2f(0.0f, glTexCoord2f(1.0f, glTexCoord2f(1.0f,/ 下面/ 繪制立方體0.0f, 1.0f);0.0f);0.0f);1.0f);1.0f);glVertex3f(-1.0f, -1.0f,1.0f);1.0f);1.0f);1.0f);glVertex3f( 1.0f, glVertex3f( 1.0f,glVertex3f(-1.0f,-1.0f,1.0f,1.0f,0.0f,-1.0f);0.0f);1.0f);1.0f);0.0f);glVert
5、ex3f(-1.0f, glVertex3f(-1.0f, glVertex3f( 1.0f,glVertex3f( 1.0f,-1.0f, -1.0f);1.0f, -1.0f);1.0f, -1.0f);-1.0f,-1.0f);1.0f, 0.0f);1.0f);0.0f);0.0f);1.0f);glVertex3f(-1.0f, glVertex3f(-1.0f, glVertex3f( 1.0f,glVertex3f( 1.0f,1.0f,1.0f,1.0f,1.0f,-1.0f);1.0f);1.0f);-1.0f);glNormal3f( 0.0f,-1.0f, 0.0f);g
6、lTexCoord2f(1.0f, glTexCoord2f(0.0f, glTexCoord2f(0.0f, glTexCoord2f(1.0f,/ 右面 glNormal3f( 1.0f, glTexCoord2f(1.0f, glTexCoord2f(1.0f, glTexCoord2f(0.0f, glTexCoord2f(0.0f,/ 左面 glNormal3f(-1.0f, glTexCoord2f(0.0f, glTexCoord2f(1.0f, glTexCoord2f(1.0f,glTexCoord2f(0.0f,1.0f);1.0f);0.0f);0.0f);glVerte
7、x3f(-1.0f, glVertex3f( 1.0f, glVertex3f( 1.0f,glVertex3f(-1.0f,-1.0f, -1.0f);-1.0f,-1.0f,-1.0f,-1.0f);1.0f);1.0f);0.0f, 0.0f);0.0f);1.0f);1.0f);0.0f);glVertex3f( glVertex3f( glVertex3f(glVertex3f(1.0f,1.0f,1.0f,1.0f,-1.0f,1.0f,1.0f,-1.0f,-1.0f);-1.0f);1.0f);1.0f);0.0f, 0.0f);0.0f);0.0f);1.0f);1.0f);
8、glVertex3f(-1.0f, glVertex3f(-1.0f, glVertex3f(-1.0f,glVertex3f(-1.0f,-1.0f, -1.0f);-1.0f,1.0f,1.0f,1.0f);1.0f);-1.0f);glEnd();接下來(lái)就是場(chǎng)景繪制函數(shù)了,在這里我只寫一個(gè)簡(jiǎn)單的例子。并且當(dāng)我繪制一個(gè)部分的盤子的時(shí)候,我將使用一個(gè)靜態(tài)變量(一個(gè)局部的變量,該變量可以保留他的值不論你任何時(shí)候調(diào)用他)來(lái)表達(dá)一個(gè)非??岬男Ч?。為了清晰起見我將要重寫 DrawGLScene 函數(shù)。將會(huì)注意到當(dāng)我這些正在使用的參數(shù)時(shí)我忽略了當(dāng)前函數(shù)的第一個(gè)參數(shù)(quadratic)。這個(gè)參數(shù)將被除
9、立方體外的所有對(duì)象使用。所以當(dāng)我這些參數(shù)的時(shí)候我忽略了它。DrawGLScene(GLvoid)/./ 這部分是新增加的switch(object)case 0: glDrawCube(); break;/ 繪制哪一種二次幾何體/ 繪制立方體創(chuàng)建的第 2 個(gè)對(duì)象是一個(gè)圓柱體。參數(shù) 1(1.0F)是圓柱體的底面半徑,參數(shù) 2(1.0F)是圓柱體的餓頂面半徑,參數(shù) 3(3.0F)是圓柱體的高度。參數(shù) 4(32)是緯線(環(huán)繞 Z 軸有多少細(xì)分),參數(shù) 5(32)是經(jīng)線(沿著Z 軸有多少細(xì)分)。細(xì)分越多該對(duì)象就越細(xì)致??梢杂迷黾蛹?xì)分的方法來(lái)增加對(duì)象的多邊形數(shù)。因此你可以犧牲速度換回質(zhì)量(以時(shí)間換質(zhì)量)
10、,大多數(shù)的時(shí)候適的“度”。都可以很容易的找到一個(gè)合case 1:/ 繪制圓柱體glTranslatef(0.0f,0.0f,-1.5f);gluCylinder(quadratic,1.0f,1.0f,3.0f,32,32); break;對(duì)象 3 將會(huì)創(chuàng)建一個(gè) CD 樣子的盤子。參數(shù) 1(0.5F)是盤子的內(nèi)圓半徑,該參數(shù)可以為 0,則表示在盤子中間沒(méi)孔,內(nèi)圓半徑越大孔越大。參數(shù) 2(1.5F)表示外圓半徑,這個(gè)參數(shù)必須比內(nèi)圓半徑大。參數(shù) 3(32)是組成該盤子的切片的數(shù)量,這個(gè)數(shù)量可以想象成披薩餅中的切片的數(shù)量。切片越多,外圓邊緣就越平滑。最后一個(gè)參數(shù)(32)是組成盤子的環(huán)的數(shù)量。環(huán)很像唱
11、片上的軌跡,一環(huán)套一環(huán)。這些環(huán)從內(nèi)圓半徑細(xì)分到外圓半徑。再說(shuō)一次,細(xì)分越多,速度越慢。case 2:/ 繪制圓盤gluDisk(quadratic,0.5f,1.5f,32,32);break;的第 4 個(gè)對(duì)象我知道為描述它耗盡精力。就是球。繪制球?qū)?huì)變的非常簡(jiǎn)單。參數(shù) 1 是球的半徑。如果你無(wú)法理解半徑/直徑等等的話,可以理解成物體中心到物體外部的距離,在這里使用 1.3F作為半徑。接下來(lái)兩個(gè)參數(shù)就是細(xì)分了,和圓柱體一樣,參數(shù) 2 是緯線,參數(shù) 3 是經(jīng)線。細(xì)分越多球看起來(lái)就越平滑,通常球需要多一些的細(xì)分以使他們看起來(lái)平滑。case 3:/ 繪制球gluSphere(quadratic,1.
12、3f,32,32);break;創(chuàng)建的第 4 個(gè)對(duì)象使用與曾經(jīng)創(chuàng)建的圓柱體一樣令來(lái)創(chuàng)建,如果你還記得的話,可以通過(guò)控制參數(shù) 2 和參數(shù) 3 來(lái)控制頂面半徑和地面半徑。因此可以使頂面半徑為 0 來(lái)繪制一個(gè)圓錐體,頂面半徑為 0 將會(huì)在頂面上創(chuàng)建一個(gè)點(diǎn)。因此在下面的代碼中,使頂面半徑等于 0,這將會(huì)創(chuàng)建一個(gè)點(diǎn),同時(shí)也就創(chuàng)建了的圓錐。case 4:/ 繪制圓錐glTranslatef(0.0f,0.0f,-1.5f); gluCylinder(quadratic,1.0f,0.0f,3.0f,32,32);break;的第 6 個(gè)對(duì)象將被 gluPartialDisk 函數(shù)創(chuàng)建。打算創(chuàng)建的這個(gè)對(duì)象使
13、用了一些命令,這些命令在創(chuàng)建對(duì)象之前,你將會(huì)清楚的看到。但是命令 gluPartialDisk 擁有兩個(gè)新的參數(shù)。第 5 個(gè)參數(shù)是我們想要繪制的部分盤子的開始角度,參數(shù) 6 是旋轉(zhuǎn)角,也就是轉(zhuǎn)過(guò)的角度。起盤子沿順時(shí)針?lè)较蚓徛谋焕L制在屏幕上。一旦旋轉(zhuǎn)角達(dá)到 360 度要增加旋轉(zhuǎn)角,這將引開始增加開始角度,這樣盤子看起來(lái)就想是被逐漸的抹去一樣。重復(fù)這些過(guò)程。case 5: part1+=p1;part2+=p2;/ 繪制部分圓盤if(part1359)p1=0;part1=0; p2=1;part2=0;if(part2359)p1=1; p2=0;gluPartialDisk(quadratic,0.5f,1.5f,32,32,part1,part2-part1); break;/.he KillGLWindow() section of code, we need tete the quadraticgluDeleteQuadratic.tofree up system resour. We do this with thedGLvoid KillGLW
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 加油站服務(wù)合同范例
- 倉(cāng)儲(chǔ)物流物料訂購(gòu)合同范例
- 三棟鋪面出租合同范本
- 農(nóng)資商品購(gòu)銷合同范本
- 環(huán)保沙發(fā)采購(gòu)合同范本
- 合同范例范例租車
- 企業(yè)購(gòu)買葡萄合同范本
- 口腔護(hù)士用工合同范例
- 卡制作合同范例
- 合同范本自助
- 2025年無(wú)線電管理局招聘(10人)高頻重點(diǎn)提升(共500題)附帶答案詳解
- 湖南省長(zhǎng)沙市2024年七年級(jí)上學(xué)期期末數(shù)學(xué)試卷【附答案】
- 護(hù)苗行動(dòng)課件
- 《人工授精雞》課件
- 內(nèi)蒙古自治區(qū)商品房買賣合同(現(xiàn)售)示范文本
- 《青少年抑郁癥的人際心理治療》黃滿麗
- 2022部編版道德與法治四年級(jí)下冊(cè)《我們的好朋友》教學(xué)設(shè)計(jì)
- 稅務(wù)會(huì)計(jì)崗位招聘面試題與參考回答2024年
- 心肺復(fù)蘇術(shù)課件2024新版
- 道法滋養(yǎng)心靈+課件- 2024-2025學(xué)年統(tǒng)編版道德與法治七年級(jí)上冊(cè)
- 醫(yī)院培訓(xùn)課件:《嚴(yán)重創(chuàng)傷快速轉(zhuǎn)診機(jī)制》
評(píng)論
0/150
提交評(píng)論