freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

計(jì)算機(jī)圖形學(xué)ppt課件-資料下載頁(yè)

2025-05-04 12:18本頁(yè)面
  

【正文】 厚度嗎?一個(gè)粗略的辦法就是:用很多張紙疊在一起測(cè)厚度,計(jì)算平均值就可以了。這里也可以這樣辦。測(cè)量繪制50幅畫面(包括垂直同步等因素的等待時(shí)間)需要的時(shí)間 t39。,由 t39。=t*50很容易的得到 FPS=1/t=50/t39。 72 ? include double CalFrequency() { static int count。 static double save。 static clock_t last, current。 double timegap。 ++count。 if( count = 50 ) return save。 count = 0。 last = current。 current = clock()。 timegap = (currentlast)/(double)CLK_TCK。 save = 。 return save。 } ? include double FPS = CalFrequency()。 printf(FPS = %f\n, FPS)。 73 ? 完整代碼: ? include GL/ include include // 太陽(yáng)、地球和月亮 // 假設(shè)每個(gè)月都是 12天 // 一年 12個(gè)月,共是 360天 static int day = 200。 // day的變化:從 0到 359 double CalFrequency() { static int count。 static double save。 static clock_t last, current。 double timegap。 ++count。 if( count = 50 ) return save。 count = 0。 last = current。 current = clock()。 timegap = (currentlast)/(double)CLK_TCK。 save = 。 return save。 } void myDisplay(void) { double FPS = CalFrequency()。 printf(FPS = %f\n, FPS)。 glEnable(GL_DEPTH_TEST)。 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)。 glMatrixMode(GL_PROJECTION)。 glLoadIdentity()。 gluPerspective(75, 1, 1, 400000000)。 glMatrixMode(GL_MODELVIEW)。 glLoadIdentity()。 gluLookAt(0, 202200000, 202200000, 0, 0, 0, 0, 0, 1)。 ? // 繪制紅色的“太陽(yáng)” glColor3f(, , )。 glutSolidSphere(69600000, 20, 20)。 // 繪制藍(lán)色的“地球” glColor3f(, , )。 glRotatef(day/*, , , )。 glTranslatef(150000000, , )。 glutSolidSphere(15945000, 20, 20)。 // 繪制黃色的“月亮” glColor3f(, , )。 glRotatef(day/* day/*, , , )。 glTranslatef(38000000, , )。 glutSolidSphere(4345000, 20, 20)。 glFlush()。 glutSwapBuffers()。 } void myIdle(void) { ++day。 if( day = 360 ) day = 0。 myDisplay()。 } int main(int argc, char *argv[]) { glutInit(amp。argc, argv)。 glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE)。 glutInitWindowPosition(100, 100)。 glutInitWindowSize(400, 400)。 glutCreateWindow(太陽(yáng),地球和月亮 )。 glutDisplayFunc(amp。myDisplay)。 glutIdleFunc(amp。myIdle)。 glutMainLoop()。 return 0。 } 74 ? OpenGL光照 ? 從生理學(xué)的角度上講,眼睛之所以看見(jiàn)各種物體,是因?yàn)楣饩€直接或間接的從它們那里到達(dá)了眼睛。人類對(duì)于光線強(qiáng)弱的變化的反應(yīng),比對(duì)于顏色變化的反應(yīng)來(lái)得靈敏。因此對(duì)于人類而言,光線很大程度上表現(xiàn)了物體的立體感。 ? 兩個(gè)大小相同的白色球體。其中右邊的一個(gè)是沒(méi)有使用任何光照效果的,它看起來(lái)就像是一個(gè)二維的圓盤,沒(méi)有立體的感覺(jué)。左邊的一個(gè)是使用了簡(jiǎn)單的光照效果的,我們通過(guò)光照的層次,很容易的認(rèn)為它是一個(gè)三維的物體。 75 ? 一、建立光照模型 ? 在現(xiàn)實(shí)生活中,某些物體本身就會(huì)發(fā)光,例如太陽(yáng)、電燈等,而其它物體雖然不會(huì)發(fā)光,但可以反射來(lái)自其它物體的光。這些光通過(guò)各種方式傳播,最后進(jìn)入我們的眼睛 ——于是一幅畫面就在我們的眼中形成了。 ? 就目前的計(jì)算機(jī)而言,要準(zhǔn)確模擬各種光線的傳播,這是無(wú)法做到的事情。比如一個(gè)四面都是粗糙墻壁的房間,一盞電燈所發(fā)出的光線在很短的時(shí)間內(nèi)就會(huì)經(jīng)過(guò)非常多次的反射,最終幾乎布滿了房間的每一個(gè)角落,這一過(guò)程即使使用目前運(yùn)算速度最快的計(jì)算機(jī),也無(wú)法精確模擬。不過(guò),我們并不需要精確的模擬各種光線,只需要找到一種近似的計(jì)算方式,使它的最終結(jié)果讓我們的眼睛認(rèn)為它是真實(shí)的,這就可以了。 76 ? OpenGL在處理光照時(shí)采用這樣一種近似:把光照系統(tǒng)分為三部分,分別是光源、材質(zhì)和光照環(huán)境。 ? 光源 就是光的來(lái)源,可以是前面所說(shuō)的太陽(yáng)或者電燈等。 材質(zhì) 是指接受光照的各種物體的表面,由于物體如何反射光線只由物體表面決定( OpenGL中沒(méi)有考慮光的折射),材質(zhì)特點(diǎn)就決定了物體反射光線的特點(diǎn)。 光照環(huán)境 是指一些額外的參數(shù),它們將影響最終的光照畫面,比如一些光線經(jīng)過(guò)多次反射后,已經(jīng)無(wú)法分清它究竟是由哪個(gè)光源發(fā)出,這時(shí),指定一個(gè)“環(huán)境亮度”參數(shù),可以使最后形成的畫面更接近于真實(shí)情況。 ? 物理學(xué)中,光線如果射入理想的光滑平面,則反射后的光線是很規(guī)則的(這樣的反射稱為鏡面反射)。光線如果射入粗糙的、不光滑的平面,則反射后的光線是雜亂的(這樣的反射稱為漫反射)?,F(xiàn)實(shí)生活中的物體在反射光線時(shí),并不是絕對(duì)的鏡面反射或漫反射,但可以看成是這兩種反射的疊加。對(duì)于光源發(fā)出的光線,可以分別設(shè)置其經(jīng)過(guò)鏡面反射和漫反射后的光線強(qiáng)度。對(duì)于被光線照射的材質(zhì),也可以分別設(shè)置光線經(jīng)過(guò)鏡面反射和漫反射后的光線強(qiáng)度。這些因素綜合起來(lái),就形成了最終的光照效果。 77 ? 二、法線向量 ? 根據(jù)光的反射定律,由光的入射方向和入射點(diǎn)的法線就可以得到光的出射方向。因此,對(duì)于指定的物體,在指定了光源后,即可計(jì)算出光的反射方向,進(jìn)而計(jì)算出光照效果的畫面。在 OpenGL中, 法線的方向是用一個(gè)向量來(lái)表示 。 ? OpenGL并不會(huì)根據(jù)你所指定的多邊形各個(gè)頂點(diǎn)來(lái)計(jì)算出這些多邊形所構(gòu)成的物體的表面的每個(gè)點(diǎn)的法線,通常,為了實(shí)現(xiàn)光照效果,需要在代碼中為每一個(gè)頂點(diǎn)指定其法線向量。 ? 指定法線向量的方式與指定顏色的方式有雷同之處。在指定顏色時(shí),只需要指定每一個(gè)頂點(diǎn)的顏色, OpenGL就可以自行計(jì)算頂點(diǎn)之間的其它點(diǎn)的顏色。并且,顏色一旦被指定,除非再指定新的顏色,否則以后指定的所有頂點(diǎn)都將以這一向量作為自己的顏色。在指定法線向量時(shí),只需要指定每一個(gè)頂點(diǎn)的法線向量, OpenGL會(huì)自行計(jì)算頂點(diǎn)之間的其它點(diǎn)的法線向量。并且,法線向量一旦被指定,除非再指定新的法線向量,否則以后指定的所有頂點(diǎn)都將以這一向量作為自己的法線向量。 使用 glColor*函數(shù)可以指定顏色,而使用 glNormal*函數(shù)則可以指定法線向量。 ? 注意: 使用 glTranslate*函數(shù)或者 glRotate*函數(shù)可以改變物體的外觀,但法線向量并不會(huì)隨之改變。 然而,使用 glScale*函數(shù),對(duì)每一坐標(biāo)軸進(jìn)行不同程度的縮放,很有可能導(dǎo)致法線向量的不正確,雖然 OpenGL提供了一些措施來(lái)修正這一問(wèn)題,但由此也帶來(lái)了各種開(kāi)銷。因此, 在使用了法線向量的場(chǎng)合,應(yīng)盡量避免使用 glScale*函數(shù)。即使使用,也最好保證各坐標(biāo)軸進(jìn)行等比例縮放。 78 ? 三、控制光源 ? 在 OpenGL中,僅僅支持有限數(shù)量的光源。使用 GL_LIGHT0表示第 0號(hào)光源, GL_LIGHT1表示第 1號(hào)光源,依次類推,OpenGL至少會(huì)支持 8個(gè)光源,即 GL_LIGHT0到 GL_LIGHT7。使用 glEnable函數(shù)可以開(kāi)啟它們。例如, glEnable(GL_LIGHT0)。可以開(kāi)啟第 0號(hào)光源。使用 glDisable函數(shù)則可以關(guān)閉光源。一些OpenGL實(shí)現(xiàn)可能支持更多數(shù)量的光源,但總的來(lái)說(shuō), 開(kāi)啟過(guò)多的光源將會(huì)導(dǎo)致程序運(yùn)行速度的嚴(yán)重下降。 ? 每一個(gè)光源都可以設(shè)置其屬性,這一動(dòng)作是通過(guò) glLight*函數(shù)完成的。 glLight*函數(shù)具有三個(gè)參數(shù),第一個(gè)參數(shù)指明是設(shè)置哪一個(gè)光源的屬性,第二個(gè)參數(shù)指明是設(shè)置該光源的哪一個(gè)屬性,第三個(gè)參數(shù)則是指明把該屬性值設(shè)置成多少。 79 ? 光源的屬性 ? ( 1) GL_AMBIENT、 GL_DIFFUSE、 GL_SPECULAR屬性 。這三個(gè)屬性表示了光源所發(fā)出的光的反射特性(以及顏色)。每個(gè)屬性由四個(gè)值表示,分別代表了顏色的 R, G, B, A值。 GL_AMBIENT表示該光源所發(fā)出的光,經(jīng)過(guò)非常多次的反射后,最終遺留在整個(gè)光照環(huán)境中的強(qiáng)度(顏色)。 GL_DIFFUSE表示該光源所發(fā)出的光,照射到粗糙表面時(shí)經(jīng)過(guò)漫反射,所得到的光的強(qiáng)度(顏色)。GL_SPECULAR表示該光源所發(fā)出的光,照射到光滑表面時(shí)經(jīng)過(guò)鏡面反射,所得到的光的強(qiáng)度(顏色)。 ? ( 2) GL_POSITION屬性 。表示光源所在的位置。由四個(gè)值( X, Y, Z, W)表示。如果第四個(gè)值 W為零,則表示該光源位于無(wú)限遠(yuǎn)處 , 前三個(gè)值表示了它所在的方向 。這種光源稱為方向性光源,通常,太陽(yáng)可以近似的被認(rèn)為是方向性光源。如果第四個(gè)值 W不為零,則 X/W, Y/W, Z/W表示了光源的位置。這種光源稱為位置性光源。對(duì)于位置性光源,設(shè)置其位置與設(shè)置多邊形頂點(diǎn)的方式相似,各種矩陣變換函數(shù)例如: glTranslate*、 glRotate*等在這里也同樣有效。方向性光源在計(jì)算時(shí)比位置性光源快了不少,因此,在視覺(jué)效果允許的情況下, 應(yīng)該盡可能的使用方向性光源 。 80 ? ( 3) GL_SPOT_DIRECTION、 GL_SPOT_EXPONENT、GL_SPOT_CUTOFF屬性 。表示將光源作為聚光燈使用(這些屬性只對(duì)位置性光源有效)。很多光源都是向四面八方發(fā)射光線,但有時(shí)候一些光源則是只向某個(gè)方向發(fā)射,比如手電筒,只向一個(gè)較小的角度發(fā)射光線。GL_SPOT_DIRECTION屬性有三個(gè)值,表示一個(gè)向量,即光源發(fā)射的方向。GL_SPOT_EXPONENT屬性只有一個(gè)值,表示聚光的程度,為零時(shí)表示光照范圍內(nèi)向各方向發(fā)射的光線強(qiáng)度相同,為正數(shù)時(shí)表示光照向中央集中,正對(duì)發(fā)射方向的位置受到更多光照,其它位置受到較少光照。數(shù)值越大,聚光效果就越明顯。 GL_SPOT_CUTOFF屬性也只有一個(gè)值,表示一個(gè)角度,它是光源發(fā)射光線所覆蓋角度的一半,其取值范圍在 0到 90之間,也可以取 180這個(gè)特殊值。取值為 180時(shí)表示光源發(fā)射光線覆蓋 360度,即不使用聚光燈,向全周圍發(fā)射。 81 ? ( 4) GL_CONSTANT_ATTENUATION、GL_LINEAR_ATTENUATION、 GL_QUADRATIC_ATTENUATION屬性。這三個(gè)屬性表示了光源所發(fā)出的光線的直線傳播特性(這些屬性只對(duì)位置性光源有效)?,F(xiàn)實(shí)生活中,光線的強(qiáng)度隨著距離的增加而減弱,OpenGL把這個(gè)減弱的趨勢(shì)抽象成函數(shù): 衰減因子 = 1 / (k1 + k2 * d + k3 * k3 * d) 其中 d表示距離,光線的初始強(qiáng)度乘以衰減因子,就得到對(duì)應(yīng)距離的光線強(qiáng)度。 k1, k2, k3分別就是 GL_CONSTANT_ATTENUATION, GL_LIN
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1