OpenGL編程基礎(chǔ)實(shí)用教案_第1頁(yè)
OpenGL編程基礎(chǔ)實(shí)用教案_第2頁(yè)
OpenGL編程基礎(chǔ)實(shí)用教案_第3頁(yè)
OpenGL編程基礎(chǔ)實(shí)用教案_第4頁(yè)
OpenGL編程基礎(chǔ)實(shí)用教案_第5頁(yè)
已閱讀5頁(yè),還剩59頁(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、2021-12-101OpenGL的功能:的功能: 模型繪制模型繪制 繪制點(diǎn)、線(xiàn)和多邊形,構(gòu)造三維模型。繪制點(diǎn)、線(xiàn)和多邊形,構(gòu)造三維模型。 模型觀察模型觀察 建立建立(jinl)變換變換(坐標(biāo)變換,投影變換,坐標(biāo)變換,投影變換,視窗變換視窗變換)。 顏色模式的指定:顏色模式的指定:RGBA模式和顏色索引模式模式和顏色索引模式 光照應(yīng)用光照應(yīng)用 圖象效果增強(qiáng):反走樣、混合和霧化圖象效果增強(qiáng):反走樣、混合和霧化 位圖和圖象處理位圖和圖象處理 紋理映射紋理映射 實(shí)時(shí)動(dòng)畫(huà):雙緩存技術(shù)實(shí)時(shí)動(dòng)畫(huà):雙緩存技術(shù)(double buffer) 交互技術(shù)交互技術(shù) 提供人機(jī)交互的接口。提供人機(jī)交互的接口。第1頁(yè)/共

2、63頁(yè)第一頁(yè),共64頁(yè)。OpenGL的特點(diǎn)從程序開(kāi)發(fā)人員的角度來(lái)看,OpenGL是一組繪圖命令的API集合。利用這些API能夠方便地描述二維和三維幾何物體,并控制這些物體按某種方式繪制到顯示緩沖區(qū)中。OpenGL的API集提供了物體描述、平移、旋轉(zhuǎn)、縮放、光照、紋理、材質(zhì)、像素、位圖、文字、交互以及提高顯示性能等方面的功能,基本涵蓋了開(kāi)發(fā)二、三維圖形程序所需的各個(gè)方面。與一般的圖形開(kāi)發(fā)工具相比(xin b),OpenGL具有以下幾個(gè)突出特點(diǎn):第2頁(yè)/共63頁(yè)第二頁(yè),共64頁(yè)。(1)跨平臺(tái)特性 OpenGL與硬件、窗口和操作系統(tǒng)是相互獨(dú)立的。為了構(gòu)成一個(gè)完整功能的圖形處理系統(tǒng),其設(shè)計(jì)實(shí)現(xiàn)共分 5

3、 層:圖形硬件、操作系統(tǒng)、窗口系統(tǒng)、 OpenGL和應(yīng)用軟件。 因而, OpenGL可以集成到各種標(biāo)準(zhǔn)窗口和操作系統(tǒng)中。例如,操作系統(tǒng)包括UNIX,Windows NT, Windows 95/98, DOS等;窗口系統(tǒng)包括X Windows, Microsoft Windows等。OpenGL圖形函數(shù)定義獨(dú)立于任何程序設(shè)計(jì)語(yǔ)言(yyn),在各種編程語(yǔ)言(yyn)中,如C,C+,F(xiàn)ORTRAIN,Ada和Java等,都可以調(diào)用OpenGL的庫(kù)函數(shù)。第3頁(yè)/共63頁(yè)第三頁(yè),共64頁(yè)。(2)應(yīng)用(yngyng)的廣泛性O(shè)penGL是目前最主要的二、三維交互式圖形應(yīng)用(yngyng)程序開(kāi)發(fā)環(huán)境,已

4、成為業(yè)界最受推薦的圖形應(yīng)用(yngyng)編程接口。自從1992年發(fā)表以來(lái),OpenGL已被廣泛地應(yīng)用(yngyng)于CAD/CAM、三維動(dòng)畫(huà)、數(shù)字圖像處理以及虛擬現(xiàn)實(shí)等領(lǐng)域,Kinetix公司的3D Studio Max就是突出的代表。無(wú)論是在PC機(jī)上,還是在工作站甚至是大型機(jī)和超級(jí)計(jì)算機(jī)上,OpenGL都能表現(xiàn)出它的高性能和強(qiáng)大威力。第4頁(yè)/共63頁(yè)第四頁(yè),共64頁(yè)。(3)網(wǎng)絡(luò)透明性 建立在客戶(hù)/服務(wù)器模型上的網(wǎng)絡(luò)透明性是OpenGL的固有特性,它允許一個(gè)運(yùn)行在工作站上的進(jìn)程在本機(jī)或通過(guò)網(wǎng)絡(luò)在遠(yuǎn)程工作站上顯示圖形。利用這種性質(zhì)能夠均衡各工作站的工作負(fù)荷(fh),共同承擔(dān)圖形應(yīng)用任務(wù)。(4

5、)高質(zhì)量和高性能 無(wú)論是在CAD/CAM、三維動(dòng)畫(huà)還是可視化仿真等領(lǐng)域,OpenGL高質(zhì)量和高效率的圖形生成能力都能得到充分的體現(xiàn)。在這些領(lǐng)域中,開(kāi)發(fā)人員可以利用OpenGL制作出效果逼真的二、三維圖像來(lái)。第5頁(yè)/共63頁(yè)第五頁(yè),共64頁(yè)。(5)出色的編程特性 OpenGL在各種平臺(tái)上已有多年的應(yīng)用實(shí)踐,加上嚴(yán)格的規(guī)范控制(kngzh),因此OpenGL具有良好的穩(wěn)定性。 OpenGL具有充分的獨(dú)立性與易使用性等。第6頁(yè)/共63頁(yè)第六頁(yè),共64頁(yè)。2021-12-1072、OpenGL的工作方式 (1)體系結(jié)構(gòu) 一個(gè)完整的窗口(chungku)系統(tǒng)的OpenGL圖形處理系統(tǒng)的結(jié)構(gòu)如右圖所示:最

6、底層為圖形硬件,第二層為操作系統(tǒng),第三層為窗口(chungku)系統(tǒng),第四層為OpenGL,最上面的層為應(yīng)用軟件。 應(yīng)用軟件OpenGL窗口系統(tǒng)操作系統(tǒng)圖形硬件第7頁(yè)/共63頁(yè)第七頁(yè),共64頁(yè)。2021-12-108(2)OpenGL的流水線(xiàn) 當(dāng)應(yīng)用程序進(jìn)行OpenGL API函數(shù)調(diào)用時(shí),OpenGL命令將被放在一個(gè)命令緩沖區(qū)中,這樣,命令緩沖區(qū)中包含了大量的命令、頂點(diǎn)數(shù)據(jù)和紋理數(shù)據(jù)。當(dāng)這個(gè)緩沖區(qū)被清空時(shí),緩沖區(qū)中的命令和數(shù)據(jù)都將傳遞(chund)給流水線(xiàn)的下一個(gè)階段。OpenGL Command BufferRasterizationT&LFrame bufferOpenGL API

7、 Calls第8頁(yè)/共63頁(yè)第八頁(yè),共64頁(yè)。2021-12-109(3)OpenGL狀態(tài)機(jī)制狀態(tài)機(jī)制 OpenGL的工作方式是一種的工作方式是一種(y zhn)狀態(tài)機(jī)制,狀態(tài)機(jī)制,它可以進(jìn)行各種狀態(tài)或模式設(shè)置,這些狀態(tài)或模式它可以進(jìn)行各種狀態(tài)或模式設(shè)置,這些狀態(tài)或模式在重新改變它們之前一直有效。在重新改變它們之前一直有效。 狀態(tài)變量可以通過(guò)狀態(tài)變量可以通過(guò)glEnable()、glDisable()這兩這兩個(gè)函數(shù)來(lái)設(shè)置成有效或無(wú)效狀態(tài)個(gè)函數(shù)來(lái)設(shè)置成有效或無(wú)效狀態(tài) 。 另外可以用下列四個(gè)函數(shù)來(lái)獲取某個(gè)狀態(tài)變量另外可以用下列四個(gè)函數(shù)來(lái)獲取某個(gè)狀態(tài)變量的值:的值:glGetBooleanv()、g

8、lGetDoublev()、glGetFloatv()和和glGetIntegerv()。 第9頁(yè)/共63頁(yè)第九頁(yè),共64頁(yè)。2021-12-10103、OpenGL的組成的組成 OpenGL是一種是一種API,包括了多個(gè)圖形,包括了多個(gè)圖形(txng)函數(shù),函數(shù),主要由以下函數(shù)庫(kù)組成。主要由以下函數(shù)庫(kù)組成。(1)OpenGL核心庫(kù):核心庫(kù):gl(2)OpenGL實(shí)用程序庫(kù):實(shí)用程序庫(kù): glu(3)OpenGL編程輔助庫(kù):編程輔助庫(kù):aux(4)OpenGL實(shí)用程序工具包(實(shí)用程序工具包(OpenGL utility toolkit,GLUT):):glut(5)Windows專(zhuān)用庫(kù):專(zhuān)用庫(kù)

9、:wgl(6)Win32 API函數(shù)庫(kù)函數(shù)庫(kù)第10頁(yè)/共63頁(yè)第十頁(yè),共64頁(yè)。2021-12-10114、OpenGL中的數(shù)據(jù)類(lèi)型中的數(shù)據(jù)類(lèi)型 數(shù)據(jù)類(lèi)型 內(nèi)部表示法 定義為C類(lèi)型 GLbyte 8位整數(shù) signed char GLshort 16位整數(shù) short GLint,GLsizei 32位整數(shù) long GLfloat,GLclampf 32位浮點(diǎn)數(shù) float GLdouble,GLclampd 64位浮點(diǎn)數(shù) double GLubyte,GLboolean 8位無(wú)符號(hào)整數(shù) unsigned char GLshort 16位無(wú)符號(hào)整數(shù) unsigned short GLuint

10、,GLenum,GLbitfield 32位無(wú)符號(hào)整數(shù) unsigned long 第11頁(yè)/共63頁(yè)第十一頁(yè),共64頁(yè)。2021-12-10125、函數(shù)命名約定OpenGL函數(shù)都遵循一個(gè)命名約定,即采用以下格式:例如函數(shù)glColor3f(),gl表示這個(gè)函數(shù)來(lái)自庫(kù)gl.h,color表示該函數(shù)用于顏色設(shè)定,3f表示這個(gè)函數(shù)采用了三個(gè)浮點(diǎn)數(shù)參數(shù)。 第12頁(yè)/共63頁(yè)第十二頁(yè),共64頁(yè)。2021-12-10136、OpenGL中的顏色在OpenGL中,一種顏色用紅、綠、藍(lán)成分的混合來(lái)表示(biosh),每種成分的值范圍是0.0到1.0 。數(shù)據(jù)類(lèi)型 紅色成分 綠色成分藍(lán)色成分黑 0.0 0.00

11、.0紅 1.00.00.0綠 0.0 1.00.0黃 1.0 1.00.0紫 1.0 0.01.0青 0.0 1.01.0深灰 0.25 0.250.25第13頁(yè)/共63頁(yè)第十三頁(yè),共64頁(yè)。OpenGL初步(chb)編程在在WindowsWindows下開(kāi)發(fā)和創(chuàng)建一個(gè)下開(kāi)發(fā)和創(chuàng)建一個(gè)OpenGLOpenGL程序的基本程序的基本(jbn)(jbn)步驟:步驟: 第一步,選擇一個(gè)編譯環(huán)境,如第一步,選擇一個(gè)編譯環(huán)境,如VC+VC+ 第二步,安裝第二步,安裝GLUTGLUT工具包工具包 第三步,建立一個(gè)第三步,建立一個(gè)OpenGLOpenGL工程工程 第四步,編譯連接第四步,編譯連接 第五步,執(zhí)行

12、程序第五步,執(zhí)行程序 第14頁(yè)/共63頁(yè)第十四頁(yè),共64頁(yè)。OpenGL初步(chb)編程O(píng)penGL庫(kù)和頭文件:動(dòng)態(tài)(dngti)庫(kù):opengl32.dll glu32.dll glut32.dll 放入windowssystem32目錄下靜態(tài)庫(kù):opengl32.lib glu32.lib glut32.lib放入VC安裝目錄的LIB目錄下頭文件:gl.h glu.h glut.h放入VC安裝目錄的IncludeGL文件夾下第15頁(yè)/共63頁(yè)第十五頁(yè),共64頁(yè)。程序清單1.1:在窗口內(nèi)繪制一個(gè)矩形/GLRect.c#include #include #include#include/ 函

13、數(shù)RenderScene用于在窗口中繪制需要(xyo)的圖形void RenderScene(void)/用當(dāng)前清除色清除顏色緩沖區(qū),即設(shè)定窗口的背景色glClear(GL_COLOR_BUFFER_BIT); /設(shè)置當(dāng)前繪圖使用的RGB顏色 glColor3f(1.0f, 0.0f, 0.0f); /使用當(dāng)前顏色繪制一個(gè)填充的矩形glRectf(100.0f, 150.0f, 150.0f, 100.0f); /刷新OpenGL命令隊(duì)列g(shù)lFlush();第16頁(yè)/共63頁(yè)第十六頁(yè),共64頁(yè)。/ 函數(shù)ChangeSize是窗口大小改變時(shí)調(diào)用的登記函數(shù)void ChangeSize(GLsiz

14、ei w, GLsizei h)if(h = 0) h = 1;/設(shè)置視區(qū)尺寸glViewport(0, 0, w, h); / 重置坐標(biāo)(zubio)系統(tǒng),使投影變換復(fù)位glMatrixMode(GL_PROJECTION);glLoadIdentity();/ 建立修剪空間的范圍 if (w = h) glOrtho (0.0f, 250.0f, 0.0f, 250.0f*h/w, 1.0f, -1.0f); else glOrtho (0.0f, 250.0f*w/h, 0.0f, 250.0f, 1.0f, -1.0f);glMatrixMode(GL_MODELVIEW);glLoa

15、dIdentity();/函數(shù)SetupRC用于初始化,常用來(lái)設(shè)置場(chǎng)景渲染狀態(tài)void SetupRC(void)/ 設(shè)置窗口的清除色為白色 glClearColor(1.0f, 1.0f, 1.0f, 1.0f); 第17頁(yè)/共63頁(yè)第十七頁(yè),共64頁(yè)。void main(void) /初始化GLUT庫(kù)OpenGL窗口的顯示模式glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); / 創(chuàng)建一個(gè)名為GLRect的窗口glutCreateWindow(GLRect); / 設(shè)置當(dāng)前窗口的顯示回調(diào)函數(shù)和窗口再整形(zhng xng)回調(diào)函數(shù)glutDisplay

16、Func(RenderScene); glutReshapeFunc(ChangeSize); SetupRC();/啟動(dòng)主GLUT事件處理循環(huán)glutMainLoop();第18頁(yè)/共63頁(yè)第十八頁(yè),共64頁(yè)。GLRect程序運(yùn)行結(jié)果(ji gu) 第19頁(yè)/共63頁(yè)第十九頁(yè),共64頁(yè)。2021-12-10201、畫(huà)點(diǎn)、線(xiàn)和面、畫(huà)點(diǎn)、線(xiàn)和面glBegin(GL_POINTS);glVertex3f(0.0f,0.0f,0.0f);glVertex3f(10.0f,10.0f,10.0f);glEnd(); 計(jì)算機(jī)中的圖元只是把一組頂點(diǎn)計(jì)算機(jī)中的圖元只是把一組頂點(diǎn)(dngdin)或頂點(diǎn)或頂點(diǎn)(

17、dngdin)列表解釋為屏幕上繪制的某些形狀,而頂列表解釋為屏幕上繪制的某些形狀,而頂點(diǎn)點(diǎn)(dngdin)是用函數(shù)是用函數(shù)glVertex3f來(lái)定義,該函數(shù)中來(lái)定義,該函數(shù)中的參數(shù)指明定義點(diǎn)的的參數(shù)指明定義點(diǎn)的x、y和和z坐標(biāo)。坐標(biāo)。 二、用二、用OpenGL繪圖繪圖(hu t)第20頁(yè)/共63頁(yè)第二十頁(yè),共64頁(yè)。2021-12-1021模式圖元類(lèi)型GL_POINTS將指定的各個(gè)頂點(diǎn)用于創(chuàng)建單個(gè)的點(diǎn)GL_LINES將指定的頂點(diǎn)用于創(chuàng)建線(xiàn)段。每?jī)蓚€(gè)頂點(diǎn)指定一條單獨(dú)的線(xiàn)段。如果頂點(diǎn)個(gè)數(shù)是奇數(shù),則忽略最后一個(gè)GL_LINE_STRIP將指定的頂點(diǎn)用于創(chuàng)建線(xiàn)條。第一個(gè)頂點(diǎn)之后的每個(gè)頂點(diǎn)指定的是線(xiàn)條延

18、伸到的下一個(gè)點(diǎn)GL_LINE_LOOP特性和GL_LINE_STRIP相似,只不過(guò)最后一條線(xiàn)段是在指定的最后一個(gè)和第一個(gè)頂點(diǎn)之間繪制。典型情況下,這用于繪制那些可能違反了GL_POLYGON用法規(guī)則的封閉區(qū)域GL_TRIANGLES將指定的頂點(diǎn)用于構(gòu)造三角形。每三個(gè)頂點(diǎn)指定一個(gè)新三角形。如果頂點(diǎn)個(gè)數(shù)不是三的倍數(shù),多余的頂點(diǎn)將被忽略GL_TRIANGLE_STRIP將指定的頂點(diǎn)用于創(chuàng)建三角條。指定前三個(gè)頂點(diǎn)之后,后繼的每個(gè)頂點(diǎn)與它前面兩個(gè)頂點(diǎn)一起用來(lái)構(gòu)造下一個(gè)三角形。每個(gè)頂點(diǎn)三元組(在最初的組之后)會(huì)自動(dòng)重新排列以確保三角形繞法的一致性。GL_TRIANGLE_FAN將指定的頂點(diǎn)用于構(gòu)造三角扇形

19、。第一個(gè)頂點(diǎn)充當(dāng)原點(diǎn),第三個(gè)頂點(diǎn)之后的每個(gè)頂點(diǎn)與它的前一個(gè)頂點(diǎn)還有原點(diǎn)一起組合。GL_QUADS每四個(gè)頂點(diǎn)一組用于構(gòu)造一個(gè)四邊形。如果頂點(diǎn)個(gè)數(shù)不是四的倍數(shù),多余的頂點(diǎn)將被忽略GL_QUADS_STRIP將指定的頂點(diǎn)用于構(gòu)造四條形邊。在第一對(duì)頂點(diǎn)之后,每對(duì)頂點(diǎn)定義一個(gè)四邊形。和GL_QUADS的頂點(diǎn)順序不一樣,每對(duì)頂點(diǎn)以指定順序的逆序使用,以便保證繞法的一致GL_POLYGON將指定的頂點(diǎn)用于構(gòu)造一個(gè)凸多邊形。多邊形的邊緣決不能相交。最后一個(gè)頂點(diǎn)會(huì)自動(dòng)連接到第一個(gè)頂點(diǎn)以確保多邊形是封閉的第21頁(yè)/共63頁(yè)第二十一頁(yè),共64頁(yè)。2021-12-1022(1)點(diǎn)的大小void glPointSize

20、(GLfloat size);GLfloat sizes2; /保存繪制點(diǎn)的尺寸范圍(fnwi)GLfloat step; /保存繪制點(diǎn)尺寸的步長(zhǎng)glGetFloarv(GL_POINT_SIZE_RANGE,sizes);glGetFloatv(GL_POINT_SIZE_GRANULARITY,&step); (2)線(xiàn)寬void glLineWidth(GLfloat width) GLfloat sizes2; /保存線(xiàn)寬的尺寸范圍(fnwi)GLfloat step; /保存線(xiàn)寬尺寸的最小間隔glGetFloarv(GL_LINE_WIDTH_RANGE,sizes);glGe

21、tFloatv(GL_LINE_WIDTH_GRANULARITY,&step); 第22頁(yè)/共63頁(yè)第二十二頁(yè),共64頁(yè)。2021-12-1023(3)線(xiàn)型glEnable(GL_LINE_STIPPLE);glLineStipple(GLint factor,GLushort pattern); pattern是一個(gè)16位值,他指定了畫(huà)線(xiàn)時(shí)所用的模式。每一位代表線(xiàn)段的一部分是開(kāi)還是關(guān)。默認(rèn)情況下,每一位對(duì)應(yīng)一個(gè)象素,但factor參數(shù)充當(dāng)倍數(shù)可以增加(zngji)模式的寬度。 在應(yīng)用模式時(shí),pattern是逆向使用的,即模式的最低有效位最先作用于指點(diǎn)線(xiàn)段。 patternfacto

22、r00FF1200FF第23頁(yè)/共63頁(yè)第二十三頁(yè),共64頁(yè)。2021-12-10242、繞法與多邊形模式、繞法與多邊形模式 在繪制三角形的過(guò)程中,三個(gè)頂點(diǎn)將三角形封閉在繪制三角形的過(guò)程中,三個(gè)頂點(diǎn)將三角形封閉(fngb)的過(guò)程是有序的,即三角形的構(gòu)成路徑具有方的過(guò)程是有序的,即三角形的構(gòu)成路徑具有方向性,我們把指定頂點(diǎn)時(shí)順序和方向的組合稱(chēng)為向性,我們把指定頂點(diǎn)時(shí)順序和方向的組合稱(chēng)為“繞繞法法”。繞法是任何多邊形圖元的一個(gè)重要特性。一般默繞法是任何多邊形圖元的一個(gè)重要特性。一般默認(rèn)情況下,認(rèn)情況下,OpenGL認(rèn)為逆時(shí)針繞法的多邊形是正對(duì)著認(rèn)為逆時(shí)針繞法的多邊形是正對(duì)著的。的。 glFront

23、Face(GL_CW);glFrontFace(GL_CCW);第24頁(yè)/共63頁(yè)第二十四頁(yè),共64頁(yè)。2021-12-1025函數(shù)glPolygonMode用于設(shè)定多邊形模式: glPolygonMode(GLenum face,GLenum mode); 其中,參數(shù)face用于指定多邊形的哪一個(gè)面受到模式改變的影響(GL_FRONT,GL_BACK或GL_FRONT_AND_BACK)。 參數(shù)mode用于指定新的繪圖模式。GL_FILL是默認(rèn)值,生成填充的多邊形;GL_LINE生成多邊形的輪廓(lnku);而GL_POINT只畫(huà)出頂點(diǎn)。第25頁(yè)/共63頁(yè)第二十五頁(yè),共64頁(yè)。2021-12

24、-10263、多邊形顏色的設(shè)置、多邊形顏色的設(shè)置 在在OpenGL中,顏色實(shí)際上是對(duì)各個(gè)頂點(diǎn)中,顏色實(shí)際上是對(duì)各個(gè)頂點(diǎn)(dngdin)而不是對(duì)各個(gè)多邊形指定的。而不是對(duì)各個(gè)多邊形指定的。(1)glShadeModel(GL_FLAT)告訴告訴OpenGL用指定多邊用指定多邊形最后一個(gè)頂點(diǎn)形最后一個(gè)頂點(diǎn)(dngdin)時(shí)的當(dāng)前顏色作為填充多邊時(shí)的當(dāng)前顏色作為填充多邊形的純色,唯一例外是形的純色,唯一例外是GL_POLYGON圖元,它采用的圖元,它采用的是第一個(gè)頂點(diǎn)是第一個(gè)頂點(diǎn)(dngdin)的顏色。的顏色。(2)glShadeModel(GL_SMOOTH)告訴告訴OpenGL從各個(gè)頂從各個(gè)頂點(diǎn)

25、點(diǎn)(dngdin)給三角形投上光滑的陰影,試圖在為各個(gè)給三角形投上光滑的陰影,試圖在為各個(gè)頂點(diǎn)頂點(diǎn)(dngdin)指定的顏色之間進(jìn)行插值。指定的顏色之間進(jìn)行插值。第26頁(yè)/共63頁(yè)第二十六頁(yè),共64頁(yè)。 Gouraud Gouraud明暗處理通常算法明暗處理通常算法為:先用多邊形頂點(diǎn)的光強(qiáng)線(xiàn)性為:先用多邊形頂點(diǎn)的光強(qiáng)線(xiàn)性插值出當(dāng)前掃描線(xiàn)與多邊形邊交插值出當(dāng)前掃描線(xiàn)與多邊形邊交點(diǎn)處的光強(qiáng),然后再用交點(diǎn)的光點(diǎn)處的光強(qiáng),然后再用交點(diǎn)的光強(qiáng)線(xiàn)插值處掃描線(xiàn)位于多邊形內(nèi)強(qiáng)線(xiàn)插值處掃描線(xiàn)位于多邊形內(nèi)區(qū)段上每一象素處的光強(qiáng)值。采區(qū)段上每一象素處的光強(qiáng)值。采用用(ciyng)Gouraud(ciyng)Gour

26、aud明暗處理不明暗處理不但可以使用多邊形表示的曲面光但可以使用多邊形表示的曲面光強(qiáng)連續(xù),而且計(jì)算量很小。強(qiáng)連續(xù),而且計(jì)算量很小。第27頁(yè)/共63頁(yè)第二十七頁(yè),共64頁(yè)。2021-12-10284、深度測(cè)試、深度測(cè)試 深度測(cè)試是一種移除被擋住表面的有效技術(shù)。深度測(cè)試是一種移除被擋住表面的有效技術(shù)。為了啟用深度測(cè)試,只要調(diào)用:為了啟用深度測(cè)試,只要調(diào)用:glEnable(GL_DEPTH_TEST);glDisable(GL_DEPTH_TEST);另外為了使深度緩沖區(qū)正常完成深度測(cè)試功能,另外為了使深度緩沖區(qū)正常完成深度測(cè)試功能,在每次渲染場(chǎng)景時(shí),必須在每次渲染場(chǎng)景時(shí),必須(bx)先清除深度緩

27、沖區(qū):先清除深度緩沖區(qū):glClear(GL_DEPTH_BUFFER_BIT);第28頁(yè)/共63頁(yè)第二十八頁(yè),共64頁(yè)。2021-12-10295、多邊形構(gòu)造規(guī)則、多邊形構(gòu)造規(guī)則(1)所有多邊形都必須是平面的。)所有多邊形都必須是平面的。(2)第二條規(guī)則是多邊形的邊緣)第二條規(guī)則是多邊形的邊緣(binyun)決不能相決不能相交,而且多邊形必須是凸的。交,而且多邊形必須是凸的。解決:對(duì)于非凸多邊形,可以把它分割成幾個(gè)凸多邊解決:對(duì)于非凸多邊形,可以把它分割成幾個(gè)凸多邊形(通常是三角形),再將它繪制出來(lái)。形(通常是三角形),再將它繪制出來(lái)。問(wèn)題:輪廓圖形狀態(tài)會(huì)看到組成大表面的所有小三角問(wèn)題:輪廓

28、圖形狀態(tài)會(huì)看到組成大表面的所有小三角形。處理形。處理OpenGL提供了一個(gè)特殊標(biāo)記來(lái)處理這些邊提供了一個(gè)特殊標(biāo)記來(lái)處理這些邊緣緣(binyun),稱(chēng)為邊緣,稱(chēng)為邊緣(binyun)標(biāo)記。標(biāo)記。glEdgeFlag(True)glEdgeFlag(False)第29頁(yè)/共63頁(yè)第二十九頁(yè),共64頁(yè)。1、 OpenGL中的變換中的變換 (1)視圖變換:指定觀察者或攝影機(jī)的位置;視圖變換:指定觀察者或攝影機(jī)的位置; (2)模型變換:在場(chǎng)景中移動(dòng)對(duì)象;模型變換:在場(chǎng)景中移動(dòng)對(duì)象; (3)模型視圖變換:描述視圖變換與模型變換的對(duì)偶性;模型視圖變換:描述視圖變換與模型變換的對(duì)偶性; (4)投影變換:對(duì)視見(jiàn)

29、空間投影變換:對(duì)視見(jiàn)空間(kngjin)進(jìn)行修剪和改變大進(jìn)行修剪和改變大?。恍?; (5)視見(jiàn)區(qū)變換:對(duì)窗口的最終輸出進(jìn)行縮放;視見(jiàn)區(qū)變換:對(duì)窗口的最終輸出進(jìn)行縮放;三、圖形三、圖形(txng)的變換的變換 第30頁(yè)/共63頁(yè)第三十頁(yè),共64頁(yè)。 2、模型視圖、模型視圖(sht)矩陣矩陣(1)平移)平移 void glTranslated(f)(GLdouble x,GLdouble y,GLdouble z); (2)旋轉(zhuǎn))旋轉(zhuǎn)void glRotated(f)(GLdouble angle,GLdouble x,GLdouble y,GLdouble z ); (3)比例)比例 void g

30、lScaled(f)(GLdouble x,GLdouble y,GLdouble z);第31頁(yè)/共63頁(yè)第三十一頁(yè),共64頁(yè)。矩陣矩陣(j zhn)(j zhn)的操作的操作glMatrixMode(GLenum mode)glMatrixMode(GLenum mode);參數(shù)參數(shù)modemode用于確定將哪個(gè)矩陣用于確定將哪個(gè)矩陣(j zhn)(j zhn)堆棧用于矩陣堆棧用于矩陣(j zhn)(j zhn)操作。操作。GL_MODELVIEWGL_MODELVIEW:模型視圖矩陣:模型視圖矩陣(j zhn)(j zhn)堆棧堆棧GL_PROJECTIONGL_PROJECTION:投

31、影矩陣:投影矩陣(j zhn)(j zhn)堆棧堆棧GL_TEXTUREGL_TEXTURE:紋理矩陣:紋理矩陣(j zhn)(j zhn)堆棧堆棧 第32頁(yè)/共63頁(yè)第三十二頁(yè),共64頁(yè)。3、單位矩陣單位矩陣 glTranslatef(10.0f, 0.0f, 0.0f);glutSolidSphere(1.0f, 15, 15);glTranslatef(0.0f, 10.0f, 0.0f);glutSolidSphere(1.0f , 15, 15);glMatrixMode(GL_MODELVIEW); glLoadIdentity();第33頁(yè)/共63頁(yè)第三十三頁(yè),共64頁(yè)。4、矩陣

32、堆棧、矩陣堆棧 OpenGL為模型為模型(mxng)視圖矩陣和投影矩陣各視圖矩陣和投影矩陣各維護(hù)著一個(gè)維護(hù)著一個(gè)“矩陣堆棧矩陣堆?!保梢园旬?dāng)前矩陣壓到堆,可以把當(dāng)前矩陣壓到堆棧中保存它,然后對(duì)當(dāng)前矩陣進(jìn)行修改。把矩陣彈棧中保存它,然后對(duì)當(dāng)前矩陣進(jìn)行修改。把矩陣彈出堆棧即可恢復(fù)。使用的函數(shù)如下:出堆棧即可恢復(fù)。使用的函數(shù)如下:void glPushMatrix(void);void glPopMatrix(void);第34頁(yè)/共63頁(yè)第三十四頁(yè),共64頁(yè)。5、投影變換、投影變換 OpenGL中只提供中只提供(tgng)了兩種投影方式,一了兩種投影方式,一種是平行投影(正射投影),另一種是透視

33、投影。在種是平行投影(正射投影),另一種是透視投影。在投影變換之前必須指定當(dāng)前處理的是投影變換矩陣:投影變換之前必須指定當(dāng)前處理的是投影變換矩陣:glMAtrixMode(GL_PROJECTION); glLoadIdentity();第35頁(yè)/共63頁(yè)第三十五頁(yè),共64頁(yè)。(1)平行投影)平行投影 平行投影,它的視景體是一個(gè)矩形的平行管道,也平行投影,它的視景體是一個(gè)矩形的平行管道,也就是一個(gè)長(zhǎng)方體,其特點(diǎn)是無(wú)論物體距離相機(jī)多遠(yuǎn),投影就是一個(gè)長(zhǎng)方體,其特點(diǎn)是無(wú)論物體距離相機(jī)多遠(yuǎn),投影后的物體大小尺寸不變。后的物體大小尺寸不變。void glOrtho (GLdouble left,GLdo

34、uble right,GLdouble bottom,GLdouble top,GLdouble near,GLdouble far);這個(gè)函數(shù)的操作是創(chuàng)建這個(gè)函數(shù)的操作是創(chuàng)建(chungjin)一個(gè)正射投影矩陣,一個(gè)正射投影矩陣,并且用這個(gè)矩陣乘以當(dāng)前矩陣。并且用這個(gè)矩陣乘以當(dāng)前矩陣。第36頁(yè)/共63頁(yè)第三十六頁(yè),共64頁(yè)。void gluOrtho2D (GLdouble left,GLdouble right,GLdouble bottom,GLdouble top); 它是一個(gè)特殊的正射投影函數(shù),主要用于二維它是一個(gè)特殊的正射投影函數(shù),主要用于二維圖像圖像(t xin)到二維屏幕上的投

35、影。它的到二維屏幕上的投影。它的near和和far缺省值分別為缺省值分別為-1.0和和1.0,所有二維物體的,所有二維物體的Z坐標(biāo)都為坐標(biāo)都為0.0。因此它的裁剪面是一個(gè)左下角點(diǎn)為(。因此它的裁剪面是一個(gè)左下角點(diǎn)為(left,bottom)、右上角點(diǎn)為()、右上角點(diǎn)為(right,top)的矩形。)的矩形。 第37頁(yè)/共63頁(yè)第三十七頁(yè),共64頁(yè)。(2)透視投影)透視投影 void glFrustum (GLdouble left,GLdouble Right,GLdouble bottom,GLdouble top,GLdouble near,GLdouble far);此函數(shù)創(chuàng)建一個(gè)透視投

36、影矩陣,并且用這個(gè)矩陣乘此函數(shù)創(chuàng)建一個(gè)透視投影矩陣,并且用這個(gè)矩陣乘以當(dāng)前矩陣。它的參數(shù)只定義近裁剪平面的左下角點(diǎn)和以當(dāng)前矩陣。它的參數(shù)只定義近裁剪平面的左下角點(diǎn)和右上角點(diǎn)的三維空間坐標(biāo),即(右上角點(diǎn)的三維空間坐標(biāo),即(left,bottom,-near)和(和(right,top,-near);最后一個(gè)參數(shù));最后一個(gè)參數(shù)far是遠(yuǎn)裁剪平是遠(yuǎn)裁剪平面的面的Z負(fù)值負(fù)值(f zh),其左下角點(diǎn)和右上角點(diǎn)空間坐標(biāo)由,其左下角點(diǎn)和右上角點(diǎn)空間坐標(biāo)由函數(shù)根據(jù)透視投影原理自動(dòng)生成。函數(shù)根據(jù)透視投影原理自動(dòng)生成。第38頁(yè)/共63頁(yè)第三十八頁(yè),共64頁(yè)。void gluPerspective (GLdoub

37、le fovy,GLdouble aspect,GLdouble zNear, GLdouble zFar);它也創(chuàng)建它也創(chuàng)建(chungjin)一個(gè)對(duì)稱(chēng)透視視景體,但它一個(gè)對(duì)稱(chēng)透視視景體,但它的參數(shù)定義于前面的不同,其操作是創(chuàng)建的參數(shù)定義于前面的不同,其操作是創(chuàng)建(chungjin)一個(gè)對(duì)稱(chēng)的透視投影矩陣,并且用這個(gè)矩陣乘以當(dāng)前一個(gè)對(duì)稱(chēng)的透視投影矩陣,并且用這個(gè)矩陣乘以當(dāng)前矩陣。參數(shù)矩陣。參數(shù)fovy定義視野在定義視野在X-Z平面(垂直方向上的可平面(垂直方向上的可見(jiàn)區(qū)域)的角度,范圍是見(jiàn)區(qū)域)的角度,范圍是0.0, 180.0;參數(shù);參數(shù)aspect是投是投影平面的縱橫比(寬度與高度的比值

38、);參數(shù)影平面的縱橫比(寬度與高度的比值);參數(shù)zNear和和Far分別是遠(yuǎn)近裁剪面沿分別是遠(yuǎn)近裁剪面沿Z負(fù)軸到視點(diǎn)的距離。負(fù)軸到視點(diǎn)的距離。 第39頁(yè)/共63頁(yè)第三十九頁(yè),共64頁(yè)。第40頁(yè)/共63頁(yè)第四十頁(yè),共64頁(yè)。6、高級(jí)矩陣、高級(jí)矩陣(j zhn)處理處理 glfloat m = 1.0f, 0.0f, 3.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, ;glMatrixMode(GL_MODELVIEW);glLoadMatrixf(m);第41頁(yè)/共63頁(yè)第四十一

39、頁(yè),共64頁(yè)。 當(dāng)光照射到一個(gè)物體表面上時(shí),會(huì)出現(xiàn)三種情形。首先,光可以通過(guò)物體表面向空間反射(fnsh),產(chǎn)生反射(fnsh)光。其次,對(duì)于透明體,光可以穿透該物體并從另一端射出,產(chǎn)生透射光。最后,部分光將被物體表面吸收而轉(zhuǎn)換成熱。在上述三部分光中,僅僅是透射光和反射(fnsh)光能夠進(jìn)入人眼產(chǎn)生視覺(jué)效果。 四、四、光照處理光照處理第42頁(yè)/共63頁(yè)第四十二頁(yè),共64頁(yè)。(1)環(huán)境光()環(huán)境光(Ambient Light) 環(huán)境光不來(lái)自于任何特殊的方向環(huán)境光不來(lái)自于任何特殊的方向(fngxing),他有,他有光源,但是被周?chē)姆块g或場(chǎng)景多次反射,以致于變光源,但是被周?chē)姆块g或場(chǎng)景多次反射,

40、以致于變得沒(méi)有方向得沒(méi)有方向(fngxing)。被環(huán)境光照射的物體表面的。被環(huán)境光照射的物體表面的各個(gè)方向各個(gè)方向(fngxing)都均等受光。都均等受光。(2)散射光()散射光(Diffuse Light) 光來(lái)自某個(gè)方向光來(lái)自某個(gè)方向(fngxing),被物體表面均勻地反,被物體表面均勻地反射。光是被均勻反射回去的,它直射的物體表面比從射。光是被均勻反射回去的,它直射的物體表面比從某個(gè)角度照射過(guò)來(lái)時(shí)要亮。某個(gè)角度照射過(guò)來(lái)時(shí)要亮。第43頁(yè)/共63頁(yè)第四十三頁(yè),共64頁(yè)。(3 3)鏡面光()鏡面光( Specular Light Specular Light ) 鏡面光也有方向性,但被強(qiáng)烈地反

41、射到另一特定的鏡面光也有方向性,但被強(qiáng)烈地反射到另一特定的方向。高亮度的鏡面光能夠在被照射的物體表面上產(chǎn)生方向。高亮度的鏡面光能夠在被照射的物體表面上產(chǎn)生(chnshng)(chnshng)稱(chēng)之為亮斑的亮點(diǎn)。稱(chēng)之為亮斑的亮點(diǎn)。 任何一個(gè)光源都是由環(huán)境光、散射光和鏡面光三種任何一個(gè)光源都是由環(huán)境光、散射光和鏡面光三種光照成分組成,各成分的定義是由光照成分組成,各成分的定義是由RGBARGBA值定義的。值定義的。第44頁(yè)/共63頁(yè)第四十四頁(yè),共64頁(yè)。5. 5. 材質(zhì)材質(zhì) OpenGL OpenGL用材料對(duì)光的紅、綠、藍(lán)三原色的反射率用材料對(duì)光的紅、綠、藍(lán)三原色的反射率來(lái)近似定義材料的顏色。象光源

42、一樣來(lái)近似定義材料的顏色。象光源一樣(yyng)(yyng),材料,材料顏色也分成環(huán)境、漫反射和鏡面反射成分,它們決定顏色也分成環(huán)境、漫反射和鏡面反射成分,它們決定了材料對(duì)環(huán)境光、漫反射光和鏡面反射光的反射程度。了材料對(duì)環(huán)境光、漫反射光和鏡面反射光的反射程度。 在進(jìn)行光照計(jì)算時(shí),材料對(duì)環(huán)境光的反射率與每個(gè)在進(jìn)行光照計(jì)算時(shí),材料對(duì)環(huán)境光的反射率與每個(gè)進(jìn)入光源的環(huán)境光結(jié)合,對(duì)漫反射光的反射率與每個(gè)進(jìn)入光源的環(huán)境光結(jié)合,對(duì)漫反射光的反射率與每個(gè)進(jìn)入光源的漫反射光結(jié)合,對(duì)鏡面光的反射率與每個(gè)進(jìn)入光源的漫反射光結(jié)合,對(duì)鏡面光的反射率與每個(gè)進(jìn)入光源的鏡面反射光結(jié)合。進(jìn)入光源的鏡面反射光結(jié)合。 第45頁(yè)/共

43、63頁(yè)第四十五頁(yè),共64頁(yè)。 材質(zhì)的顏色實(shí)際決定了反射光與入射光的百分比率:若OpenGL的光源顏色為(LR、LG、LB),材質(zhì)顏色屬性(shxng)為(MR、MG、MB)。那么,最終到達(dá)眼睛的光的顏色為 (LR*MR、LG*MG、LB*MB) 三種光照成分的RGBA值疊加就形成了物體最終的顏色。當(dāng)任何一種顏色成分大于1.0,就用1.0計(jì)算。第46頁(yè)/共63頁(yè)第四十六頁(yè),共64頁(yè)。6. 加入光照(1)glEnable(GL_LIGHTING) 指定OpenGL可以利用(lyng)材質(zhì)屬性和光照參數(shù)決定場(chǎng)景中每個(gè)頂點(diǎn)的顏色。第47頁(yè)/共63頁(yè)第四十七頁(yè),共64頁(yè)。(2)glLightModelf

44、v(f,i,iv)(Glenum pname, const GLfloat *param) 指定光照模型GL_LIGHT_MODEL_AMBIENT:設(shè)置環(huán)境光GL_LIGHT_MODEL_LOCAL_VIEWER:定義視點(diǎn),0表示鏡面反射角度認(rèn)為視線(xiàn)方向平行于z軸負(fù)向,否則鏡面反射從視點(diǎn)坐標(biāo)系的原點(diǎn)來(lái)計(jì)算(j sun)。GL_LIGHT_MODEL_TWO_SIDE:啟用雙面關(guān)照,0.0時(shí)表示只有多邊形表面的正面進(jìn)行光照計(jì)算(j sun),否則正反兩面都進(jìn)行光照計(jì)算(j sun)。第48頁(yè)/共63頁(yè)第四十八頁(yè),共64頁(yè)。(3)glMaterialfv(GLenum face, GLenum

45、pname, const GLfloat *params) Face參數(shù):GL_FRONT;GL_BACK;GL_FRONT_AND_BACK。Pname參數(shù):GL_AMBIENT:材質(zhì)(ci zh)環(huán)境反射RGBA值。GL_DIFFUSE:材質(zhì)(ci zh)漫反射RGBA值。GL_SPECULAR:材質(zhì)(ci zh)鏡面反射RGBA值。GL_SHININESS:材質(zhì)(ci zh)的RGBA鏡面指數(shù)。第49頁(yè)/共63頁(yè)第四十九頁(yè),共64頁(yè)。(4)glEnable(GL_COLOR_MATERIAL) 啟用顏色跟蹤法,此時(shí)可以通過(guò)(tnggu)glColor設(shè)置材質(zhì)屬性。(5)glColorMa

46、terial(Glenum face,Glenum mode)mode:指定哪個(gè)材質(zhì)屬性能夠遵循當(dāng)前的顏色。GL_EMISSION;GL_AMBIENT;GL_DIFFUSE;GL_SPECULAR;GL_AMBIENT_AND_DIFFUSE。第50頁(yè)/共63頁(yè)第五十頁(yè),共64頁(yè)。7. 7. 使用點(diǎn)光源使用點(diǎn)光源 OpenGL OpenGL支持支持8 8種獨(dú)立光源,它們可以放置種獨(dú)立光源,它們可以放置(fngzh)(fngzh)在場(chǎng)景中的任意位置,也可放在視見(jiàn)空間之外。當(dāng)將在場(chǎng)景中的任意位置,也可放在視見(jiàn)空間之外。當(dāng)將光源放在無(wú)窮遠(yuǎn)處就可以得到平行的光線(xiàn)。光源放在無(wú)窮遠(yuǎn)處就可以得到平行的光線(xiàn)

47、。 光源發(fā)射光線(xiàn)射到多邊形的表面,與平面成角度光源發(fā)射光線(xiàn)射到多邊形的表面,與平面成角度A A,在以角度在以角度B B反射進(jìn)入觀察者,通過(guò)這些角度可以計(jì)算反射進(jìn)入觀察者,通過(guò)這些角度可以計(jì)算光線(xiàn)照射的多邊形表面的顏色。光線(xiàn)照射的多邊形表面的顏色。 OpenGL OpenGL有意讓計(jì)算的位置就是多邊形的頂點(diǎn)。通有意讓計(jì)算的位置就是多邊形的頂點(diǎn)。通過(guò)計(jì)算各個(gè)頂點(diǎn)的顏色,再在各個(gè)頂點(diǎn)間進(jìn)行光滑著過(guò)計(jì)算各個(gè)頂點(diǎn)的顏色,再在各個(gè)頂點(diǎn)間進(jìn)行光滑著色。色。第51頁(yè)/共63頁(yè)第五十一頁(yè),共64頁(yè)。(1 1)法線(xiàn)矢量)法線(xiàn)矢量 從假想從假想(jixing)(jixing)的平面(或者是多邊形)上的一個(gè)的平面(或

48、者是多邊形)上的一個(gè)頂點(diǎn)引出來(lái)的一條垂直向上的線(xiàn)稱(chēng)為法線(xiàn)矢量。頂點(diǎn)引出來(lái)的一條垂直向上的線(xiàn)稱(chēng)為法線(xiàn)矢量。 glNormal3f(GLfloat x, GLfloat y, GLfloat z) glNormal3f(GLfloat x, GLfloat y, GLfloat z) 指定法指定法線(xiàn)矢量。線(xiàn)矢量。 OpenGL OpenGL最后都將表面法線(xiàn)轉(zhuǎn)化成單位法線(xiàn),對(duì)于最后都將表面法線(xiàn)轉(zhuǎn)化成單位法線(xiàn),對(duì)于光照計(jì)算,所有的法線(xiàn)矢量都必須歸一化。光照計(jì)算,所有的法線(xiàn)矢量都必須歸一化。glEnable(GL_NORMALIZE)glEnable(GL_NORMALIZE)glEnable(GL_R

49、ESCALE_NORMALS)glEnable(GL_RESCALE_NORMALS) 法線(xiàn)矢量的計(jì)算法線(xiàn)矢量的計(jì)算第52頁(yè)/共63頁(yè)第五十二頁(yè),共64頁(yè)。(2 2)設(shè)置)設(shè)置(shzh)(shzh)光源參數(shù)光源參數(shù)glLightf(GLenum light,GLenum pname,GLenum param)glLightf(GLenum light,GLenum pname,GLenum param) light: light:光源編號(hào)光源編號(hào) pname:指定光源(gungyun)參數(shù)類(lèi)型GL_AMBIENT:光照的環(huán)境RGBA濃度。GL_DIFFUSE:光照的漫射RGBA濃度。GL_S

50、PECULAR:光照的鏡面RGBA濃度。第53頁(yè)/共63頁(yè)第五十三頁(yè),共64頁(yè)。(3 3) 鏡面光處理鏡面光處理 使用使用glLightfvglLightfv函數(shù)在光源中加入鏡面光成分,為了出現(xiàn)函數(shù)在光源中加入鏡面光成分,為了出現(xiàn)鏡面光效果,還要在材質(zhì)屬性中增加鏡面成分。鏡面光效果,還要在材質(zhì)屬性中增加鏡面成分。鏡面指數(shù):鏡面指數(shù): glMateriali(GL_FRONT,GL_SHININESS,128) glMateriali(GL_FRONT,GL_SHININESS,128);GL_SHININESSGL_SHININESS屬性設(shè)置材質(zhì)的鏡面指數(shù),它說(shuō)明如何屬性設(shè)置材質(zhì)的鏡面指數(shù),它

51、說(shuō)明如何確定鏡面關(guān)亮斑的大小和聚焦確定鏡面關(guān)亮斑的大小和聚焦(jjio)(jjio)程度。程度。第54頁(yè)/共63頁(yè)第五十四頁(yè),共64頁(yè)。(4 4)光的衰減)光的衰減 真實(shí)的光,離光源真實(shí)的光,離光源(gungyun)(gungyun)越遠(yuǎn)則光強(qiáng)越小。越遠(yuǎn)則光強(qiáng)越小。OpenGLOpenGL的光衰減是通過(guò)光源的光衰減是通過(guò)光源(gungyun)(gungyun)的發(fā)光量乘以衰的發(fā)光量乘以衰減因子計(jì)算出來(lái)的。缺省狀態(tài)下,常數(shù)衰減因子是(減因子計(jì)算出來(lái)的。缺省狀態(tài)下,常數(shù)衰減因子是(1.01.0,0.00.0,0.00.0)。用戶(hù)也可以自己定義這些值,如:)。用戶(hù)也可以自己定義這些值,如:glLig

52、htf(GL_LIGHT0,GL_CONSTANT_ATTENUATION,2.0);glLightf(GL_LIGHT0,GL_CONSTANT_ATTENUATION,2.0);glLightf(GL_LIGHT0,GL_LINEAR_ATTENUATION,1.0);glLightf(GL_LIGHT0,GL_LINEAR_ATTENUATION,1.0);glLightf(GL_LIGHT0,GL_QUADRATIC_ATTENUATION,0.5);glLightf(GL_LIGHT0,GL_QUADRATIC_ATTENUATION,0.5); 注意:環(huán)境光、漫反射光和鏡面光的強(qiáng)度

53、都衰減,只注意:環(huán)境光、漫反射光和鏡面光的強(qiáng)度都衰減,只有輻射光和全局環(huán)境光的強(qiáng)度不衰減。有輻射光和全局環(huán)境光的強(qiáng)度不衰減。第55頁(yè)/共63頁(yè)第五十五頁(yè),共64頁(yè)。(5)聚光和多光源 定位(dngwi)光源可以定義成聚光燈形式,即將光的形狀限制在一個(gè)圓錐內(nèi)。OpenGL中聚光的定義有以下幾步: a)定義聚光源位置。因?yàn)榫酃庠匆彩嵌ㄏ蚬庠?,所以他的位置同一般定向光一樣。如?GLfloat light_pos =1.0,1.0,1.0,1.0; glLightfv(GL_LIGHT0,LIGHT_POSITION,light_pos); light_pos參數(shù)的最后一個(gè)分量為0,則光源為方向光源,分量為

溫馨提示

  • 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)論