版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第11章
真實(shí)感圖形的繪制1本章目標(biāo)掌握真實(shí)感圖形繪制的主要內(nèi)容光照、紋理、陰影等重點(diǎn)掌握光照方程、基本紋理映射及多邊形繪制學(xué)會(huì)使用OpenGL的相關(guān)函數(shù)2第11章真實(shí)感圖形的繪制簡(jiǎn)單光照模型多邊形繪制方法紋理映射陰影311.1簡(jiǎn)單光照模型11.1.1環(huán)境光(Ambientlight)在物體和周圍環(huán)境之間多次反射后,最終達(dá)到平衡時(shí)的一種光,又稱為背景光光強(qiáng)(度):空間上分布均勻,即任何位置和方向光強(qiáng)度一樣,亮度值記為Ia反射系數(shù):與物體表面性質(zhì)有關(guān),決定物體表面呈現(xiàn)的亮度,記為Ka光照模型方程
Ie=
KaIa
Ie為物體表面呈現(xiàn)的亮度
Ka
=0.4Ka
=0.8511.1簡(jiǎn)單光照模型11.1.2漫反射(DiffuseReflection)點(diǎn)光源:向周圍所有方向發(fā)射等強(qiáng)度的光漫反射光是由物體表面的粗糙不平引起的,它均勻地向各個(gè)方向傳播,與視點(diǎn)無(wú)關(guān)漫反射光在空間均勻分布,反射光強(qiáng)I與入射光的入射角θ的余弦成正比,即:
其中,Kd是漫反射系數(shù)(0~1之間的常數(shù)),與物體表面性質(zhì)有關(guān);Ip是入射光(光源)的光強(qiáng);θ是入射光的入射角,即入射光與物體表面法向量之間的夾角611.1簡(jiǎn)單光照模型向量表示的計(jì)算設(shè)物體表面在照射點(diǎn)P處的單位法向量為N,P到點(diǎn)光源的單位向量為L(zhǎng),則上式可表達(dá)為如下的向量形式:如果有多個(gè)光源,則可以把各個(gè)光源的漫反射光照效果進(jìn)行疊加:711.1簡(jiǎn)單光照模型11.1.3鏡面反射光和馮(Phong)反射模型高光(highlight):光滑物體表面在點(diǎn)光源的照射下形成一塊特別亮的區(qū)域鏡面反射(SpecularReflection)物體表面對(duì)入射光的反射遵循反射定律(1)反射光與入射光位于表面法向兩側(cè)(2)理想反射面而言:入射角=反射角觀察者在反射方向上看到反射光最強(qiáng)911.1簡(jiǎn)單光照模型Phong模型(非理想反射面)計(jì)算公式:Ks是物體表面鏡面反射系數(shù),它與入射角和波長(zhǎng)有關(guān);α是視線與反射方向的夾角;
n為鏡面高光系數(shù),用來(lái)模擬鏡面反射光在空間中的匯聚程度,它是一個(gè)反映物體表面光澤度的常數(shù);近似地描述了鏡面反射光的空間分布。1011.1簡(jiǎn)單光照模型簡(jiǎn)化Phong模型SSHβL,N,R都是單位向量1111.1簡(jiǎn)單光照模型局部光照方程結(jié)合環(huán)境光、漫反射光及鏡面反射光當(dāng)光源與視點(diǎn)無(wú)窮遠(yuǎn)時(shí),對(duì)表面上任意一點(diǎn)而言,L和V固定不變,H只需計(jì)算一次Hβ1311.1簡(jiǎn)單光照模型11.1.4光的衰減光在傳播過(guò)程中,能量會(huì)衰減傳播過(guò)程光源到物體表面的傳播,使入射光強(qiáng)度變?nèi)跷矬w表面到人眼的傳播,使人接受到物體表面的反射光強(qiáng)度減弱光到物體表面的衰減考慮衰減的方程1411.1簡(jiǎn)單光照模型物體表面到人眼過(guò)程中的衰減深度暗示技術(shù)(DepthCueing)使據(jù)視點(diǎn)遠(yuǎn)的點(diǎn)比近的點(diǎn)暗一些亮度計(jì)算前參考面n=Nf;后參考面n=Nb(規(guī)范化視見體內(nèi))分別賦比例因子Sf和Sb(Sf>Sb)給點(diǎn)物體上的一點(diǎn)的深度N0,比例因子S01511.1簡(jiǎn)單光照模型13.1.5產(chǎn)生顏色前面的光照模型僅用于白光,只能產(chǎn)生灰度彩色模型計(jì)算選擇合適模型(如RGB、HSV等)為顏色的三個(gè)分量分別建立光照方程RGB模型光源的顏色[IpR,IpG,IpB],環(huán)境光的顏色[IaR,IaG,IaB]表面反射系數(shù)(1)環(huán)境反射:[KaR,KaG,KaB](2)漫反射:[KdR,KdG,KdB](3)鏡面反射:[KsR,KsG,KsB]1711.1簡(jiǎn)單光照模型彩色光照方程(模型)1811.1簡(jiǎn)單光照模型11.1.6多個(gè)光源如果場(chǎng)景中有m個(gè)光源,那么物體上任一點(diǎn)的亮度應(yīng)該為m個(gè)光源的貢獻(xiàn)之和在RGB彩色模型中,λ分別為R、G和B。
注意:Iλ可能會(huì)超出系統(tǒng)允許的最大亮度值,處理方法(1)截去超出部分,設(shè)置為最大值(2)首先計(jì)算出所有亮度值,再進(jìn)行變換(如縮放變換)使其落在系統(tǒng)規(guī)定范圍之內(nèi)1911.1簡(jiǎn)單光照模型 函數(shù)glLight*()參數(shù)pname及param說(shuō)明
2111.1簡(jiǎn)單光照模型(3)啟動(dòng)光照在OpenGL中,必須明確指出光照是否有效或無(wú)效。如果光照無(wú)效,則只是簡(jiǎn)單地將當(dāng)前顏色映射到當(dāng)前頂點(diǎn)上去,不進(jìn)行法向、光源等復(fù)雜計(jì)算,那么顯示的圖形就沒有真實(shí)感要使光照有效,首先得啟動(dòng)光照,即:
glEnable(GL_LIGHTING);若使光照無(wú)效,則調(diào)用gDisable(GL_LIGHTING)可關(guān)閉當(dāng)前光照。然后,必須使所定義的每個(gè)光源有效。glEnable(GL_LIGHT0);其它光源類似,只是光源號(hào)不同而已2211.1簡(jiǎn)單光照模型(4)例:簡(jiǎn)單光照#include<gl/glut.h>#include<GL/glaux.h>#pragmacomment(lib,"glaux.lib")
voidmyinit(void){GLfloatlight_position[]={1.0,1.0,1.0,0.1};GLfloatlight_color[]={1.0,0.0,0.0,1.0};glLightfv(GL_LIGHT0,GL_POSITION,light_position);glLightfv(GL_LIGHT0,GL_AMBIENT,light_color);glLightfv(GL_LIGHT0,GL_DIFFUSE,light_color);glLightfv(GL_LIGHT0,GL_SPECULAR,light_color);glEnable(GL_LIGHTING);glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);}
voiddisplay(void){glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT);auxSolidSphere(1.0);//繪制球體glFlush();}2311.1簡(jiǎn)單光照模型voidmain(void){ glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowSize(250,250); glutInitWindowPosition(300,300); glutCreateWindow("SimpleLighting"); myinit(); glutReshapeFunc(myReshape); glutDisplayFunc(display); glutMainLoop();}2511.1簡(jiǎn)單光照模型(5)聚光定位光源可以定義成聚光燈形式,即將光的形狀限制在一個(gè)圓錐內(nèi)。一、定義聚光源位置。因?yàn)榫酃庠匆彩嵌ㄏ蚬庠矗运奈恢猛话愣ㄏ蚬庖粯印H纾?/p>
GLfloatlight_position[]={1.0,1.0,1.0,1.0};glLightfv(GL_LIGHT0,LIGHT_POSITION,light_position);2611.1簡(jiǎn)單光照模型(6)例:多光源#include<GL/glut.h>#include<GL/glaux.h>#pragmacomment(lib,"glaux.lib")/*初始化光源、材質(zhì)等*/voidmyinit(void){GLfloatmat_ambient[]={0.2,0.2,0.2,1.0};GLfloatmat_diffuse[]={0.8,0.8,0.8,1.0};GLfloatmat_specular[]={1.0,1.0,1.0,1.0};GLfloatmat_shininess[]={50.0};GLfloatlight0_diffuse[]={0.0,0.0,1.0,1.0};GLfloatlight0_position[]={1.0,1.0,1.0,0.0};GLfloatlight1_ambient[]={0.2,0.2,0.2,1.0};GLfloatlight1_diffuse[]={1.0,0.0,0.0,1.0};GLfloatlight1_specular[]={1.0,0.6,0.6,1.0};GLfloatlight1_position[]={-3.0,-3.0,3.0,1.0};GLfloatspot_direction[]={1.0,1.0,-1.0};glMaterialfv(GL_FRONT,GL_AMBIENT,mat_ambient);glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse);glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess);//轉(zhuǎn)下頁(yè)2911.1簡(jiǎn)單光照模型
//接上頁(yè)glLightfv(GL_LIGHT0,GL_DIFFUSE,light0_diffuse);glLightfv(GL_LIGHT0,GL_POSITION,light0_position);glLightfv(GL_LIGHT1,GL_AMBIENT,light1_ambient);glLightfv(GL_LIGHT1,GL_DIFFUSE,light1_diffuse);glLightfv(GL_LIGHT1,GL_SPECULAR,light1_specular);glLightfv(GL_LIGHT1,GL_POSITION,light1_position);glLightf(GL_LIGHT1,GL_SPOT_CUTOFF,30.0);glLightfv(GL_LIGHT1,GL_SPOT_DIRECTION,spot_direction);glEnable(GL_LIGHTING);glEnable(GL_LIGHT0);glEnable(GL_LIGHT1);glDepthFunc(GL_LESS);glEnable(GL_DEPTH_TEST);}3011.1簡(jiǎn)單光照模型voiddisplay(void){glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glPushMatrix();glTranslated(-3.0,-3.0,3.0);//光源1位置
glDisable(GL_LIGHTING);glColor3f(1.0,0.0,0.0);auxWireCube(0.1);//繪制光源1glEnable(GL_LIGHTING); glPopMatrix();auxSolidSphere(2.0); glFlush();}3111.1簡(jiǎn)單光照模型voidmyReshape(GLsizeiw,GLsizeih){glViewport(0,0,w,h);glMatrixMode(GL_PROJECTION);glLoadIdentity();if(w<=h) glOrtho(-5.5,5.5,-5.5*(GLfloat)h/(GLfloat)w, 5.5*(GLfloat)h/(GLfloat)w,-10.0,10.0);else glOrtho(-5.5*(GLfloat)w/(GLfloat)h,5.5*(GLfloat)w/(GLfloat)h,-5.5,5.5,-10.0,10.0);glMatrixMode(GL_MODELVIEW);glLoadIdentity();}voidmain(void){glutInitDisplayMode(GLUT_SINGLE GLUT_RGBA);glutInitWindowSize(250,250);glutInitWindowPosition(300,300);glutCreateWindow("Multi_lights");myinit();glutReshapeFunc(myReshape);glutDisplayFunc(display);glutMainLoop();}32第11章真實(shí)感圖形的繪制簡(jiǎn)單光照模型多邊形繪制方法紋理映射陰影3311.2多邊形繪制方法11.2.1均勻著色(FlatShading)方法任取多邊形上一點(diǎn),利用光照明方程計(jì)算出它的顏色用這個(gè)顏色填充整個(gè)多邊形適合于如下情況光源在無(wú)窮遠(yuǎn)處,L·N相等視點(diǎn)在無(wú)窮遠(yuǎn)處,H·N相等多邊形是物體表面的精確表示特點(diǎn)優(yōu)點(diǎn):每個(gè)多邊形只需計(jì)算一次光照明方程,速度快缺點(diǎn):相鄰多邊形顏色過(guò)渡不光滑3411.2多邊形繪制方法11.2.2光滑著色(SmoothShading)采用插值方法Gouraud(高洛德)方法用多邊形頂點(diǎn)的顏色進(jìn)行插值生成中間點(diǎn)的顏色Phone(馮)方法對(duì)頂點(diǎn)的法向量進(jìn)行插值計(jì)算出中間點(diǎn)的法向量3511.2多邊形繪制方法11.2.3Gouraud著色方法(顏色插值方法)主要步驟1、計(jì)算多邊形的單位法向量2、計(jì)算多邊形頂點(diǎn)的單位法向量(共享頂點(diǎn)的多邊形法向量的平均值)3、利用光照明方程計(jì)算頂點(diǎn)顏色4、對(duì)多邊形頂點(diǎn)顏色進(jìn)行雙線性插值,獲得多邊形內(nèi)部各點(diǎn)的顏色3611.2多邊形繪制方法(1)計(jì)算多邊形頂點(diǎn)的單位法向量
近似取頂點(diǎn)v的法向量為共享該頂點(diǎn)的多邊形單位法向量的平均值3711.2多邊形繪制方法(2)內(nèi)部點(diǎn)顏色計(jì)算:雙線性插值
已知P1(x1,y1)、P2(x2,y2)、P3(x3,y3),顏色分別為I1、I2和I3。A(xA,yA)和B(xB,yB)為交點(diǎn),P(x,y)為AB上一點(diǎn),計(jì)算P點(diǎn)的顏色3811.2多邊形繪制方法增量法優(yōu)化計(jì)算IA,IB,IP(1)掃描線y遞增為y+1,IA和IB的增量分別為ΔIA和ΔIB(2)當(dāng)x遞增一個(gè)單位(P點(diǎn)沿掃描線右移一個(gè)單位)時(shí),IP的增量為ΔIP3911.2多邊形繪制方法11.2.3Phong著色方法(法向插值著色方法)方法:通過(guò)對(duì)多邊形頂點(diǎn)法向量進(jìn)行插值,獲得多邊形內(nèi) 部各點(diǎn)的法向量,再利用光照方程計(jì)算各點(diǎn)的亮度主要步驟:1、計(jì)算多邊形單位法向量2、計(jì)算多邊形頂點(diǎn)單位法向量(以上兩步同Gouraud著色方法)3、對(duì)多邊形頂點(diǎn)法向量進(jìn)行雙線性插值,獲得內(nèi)部各點(diǎn)的法向量4、利用光照明方程計(jì)算多邊形內(nèi)部各點(diǎn)顏色4011.2多邊形繪制方法法向量雙線性插值4111.2多邊形繪制方法法向量雙線性插值計(jì)算優(yōu)化(1)掃描線y遞增為y+1,NA和NB的增量分別為ΔNA和ΔNB(2)當(dāng)x遞增一個(gè)單位(P點(diǎn)沿掃描線右移一個(gè)單位)時(shí),NP的增量為ΔNP42第11章真實(shí)感圖形的繪制簡(jiǎn)單光照模型多邊形繪制方法紋理映射陰影4311.3紋理映射背景光照模型只能生成光滑的物體表面自然界中的物體表面具有豐富的細(xì)節(jié),如木紋、桔子凹凸表面、沙礫路面豐富的表面細(xì)節(jié)難以用計(jì)算機(jī)圖形方法生成采用將圖片貼到物體表面上的方法繪制櫻桃木桔子凹凸面沙礫路面4411.3紋理映射紋理(Texture)紋理是物體表面的細(xì)小結(jié)構(gòu),它可以是光滑表面的花紋、圖案,即顏色紋理(2D)紋理也可以是物體表面的三維結(jié)構(gòu)紋理還可以是粗糙的表面(如桔子表面的皺紋),稱為幾何紋理,是基于物體表面的微觀幾何形狀的表面紋理4511.3紋理映射紋理(續(xù))紋理空間:紋理圖案所在空間,記為st坐標(biāo)系(一般是平面)紋素(texel):紋理最小單元,位置由紋理坐標(biāo)(s,t)標(biāo)識(shí)兩種來(lái)源數(shù)字圖像,用二維數(shù)組表示數(shù)學(xué)公式定義得紋理函數(shù)4611.3紋理映射紋理映射(TextureMapping)將一塊紋理圖案映射到物體表面上,產(chǎn)生物體表面的細(xì)節(jié)顏色計(jì)算方法用表面上點(diǎn)對(duì)應(yīng)的紋素值代替該點(diǎn)的漫反射系數(shù)紋理與物體表面的對(duì)應(yīng)關(guān)系紋理坐標(biāo):s,t變化范圍[0,1]PT4711.3紋理映射實(shí)例:圓柱面映射圓柱面上的點(diǎn)對(duì)應(yīng)的紋理坐標(biāo)styxzrh4811.3紋理映射實(shí)例:球面映射
θ和ψ變化范圍分別[0,360]和[-90,90](1)(2)球面垂直向外映射到柱面上,再將柱面展開到矩形上4911.3紋理映射實(shí)例:圓環(huán)面映射R是環(huán)的主半徑,r是次半徑;θ和ψ變化范圍[0,360]Rr對(duì)應(yīng)的紋理坐標(biāo)5011.3紋理映射OpenGL函數(shù)紋理映射是一個(gè)相當(dāng)復(fù)雜的過(guò)程,最基本的執(zhí)行紋理映射所需的步驟?;静襟E如下:一、定義紋理;二、控制濾波;三、說(shuō)明映射方式;四、激活紋理;五、繪制圖形,即給出頂點(diǎn)的紋理坐標(biāo)和幾何坐標(biāo)。
注意:紋理映射只能在RGBA方式下執(zhí)行,不能運(yùn)用于顏色表方式。
5111.3紋理映射一、定義紋理二維紋理定義的函數(shù):voidglTexImage2D(GLenumtarget,GLintlevel,Glintcomponents,GLsizeiwidth,glsizeiheight,GLintborder,GLenumformat,GLenumtype,constGLvoid*pixels);target是常數(shù)GL_TEXTURE_2D; level表示多級(jí)分辨率的紋理圖像的級(jí)數(shù),若只有一種分辨率,則level設(shè)為0;components是一個(gè)從1到4的整數(shù),指出選擇了R、G、B、A中的哪些分量用于調(diào)整和混合,1表示選擇了R分量,2表示選擇了R和A兩個(gè)分量,3表示選擇了R、G、B三個(gè)分量,4表示選擇了R、G、B、A四個(gè)分量;
5211.3紋理映射width和height給出了紋理圖像的長(zhǎng)度和寬度;border為紋理邊界寬度,它通常為0,width和height必須是2m+2b,這里m是整數(shù),長(zhǎng)和寬可以有不同的值,b是border的值。紋理映射的最大尺寸依賴于OpenGL,但它至少必須是使用64x64(若帶邊界為66x66),若width和height設(shè)置為0,則紋理映射有效地關(guān)閉;參數(shù)format和type描述了紋理映射的格式和數(shù)據(jù)類型,參數(shù)format可以是GL_RGB、GL_RGBA、GL_RED、GL_GREEN、GL_BLUE、GL_ALPHA、GL_LUMINANCE或GL_LUMINANCE_ALPHA;參數(shù)type是GL_BYPE、GL_UNSIGNED_BYTE、GL_SHORT、GL_UNSIGNED_SHORT、GL_INT、GL_UNSIGNED_INT、GL_FLOAT或GL_BITMAP;參數(shù)pixels包含了紋理圖像數(shù)據(jù),這個(gè)數(shù)據(jù)描述了紋理圖像本身和它的邊界。5311.3紋理映射二、控制濾波;voidglTexParameter{if}[v](GLenumtarget,GLenumpname, TYPEparam);參數(shù)target可以是GL_TEXTURE_1D或GL_TEXTURE_2DPname和paramPnameparamGL_TEXTURE_WRAP_SGL_CLAM或GL_REPEATGL_TEXTURE_WRAP_TGL_CLAM或GL_REPEATGL_TEXTURE_MAG_FILTERGL_NEAREST或GL_LINEARGL_TEXTURE_MIN_FILTERGL_NEAREST或GL_LINEAR…..5411.3紋理映射三、設(shè)置紋理映射方式可以用紋理中的值來(lái)取代多邊形(曲面)原來(lái)的顏色,或用紋理圖像中的顏色與多邊形(曲面)原來(lái)的顏色進(jìn)行混合。voidglTexEnv{if}[v](GLenumtarget,GLenumpname, TYPEparam);參數(shù)target必須是GL_TEXTURE_ENV;若參數(shù)pname是GL_TEXTURE_ENV_MODE,則參數(shù)param可以是GL_DECAL、GL_MODULATE或GL_BLEND,以說(shuō)明紋理值怎樣與原來(lái)表面顏色的處理方式;若參數(shù)pname是GL_TEXTURE_ENV_COLOR,則參數(shù)param是包含四個(gè)浮點(diǎn)數(shù)(分別是R、G、B、a分量)的數(shù)組,這些值只在采用GL_BLEND紋理函數(shù)時(shí)才有用。5511.3紋理映射四、激活紋理;
glEnable(GL_TEXTURE_2D);五、定義紋理坐標(biāo)在繪制紋理映射圖形時(shí),不僅要給每個(gè)頂點(diǎn)定義幾何坐標(biāo),而且也要定義紋理坐標(biāo)。voidglTexCoord{1234}{sifd}[v](TYPEcoords);設(shè)置當(dāng)前紋理坐標(biāo),此后調(diào)用glVertex*()所產(chǎn)生的頂點(diǎn)都賦予當(dāng)前的紋理坐標(biāo)。5611.3紋理映射例:簡(jiǎn)單紋理映射#include<GL/glut.h>#include<math.h>#definenRows128#definenCols128GLubyteImage[3*nRows*nCols];//生成黑白棋盤格圖像數(shù)據(jù)voidmakeCheckerboard(void){longcount=0;for(inti=0;i<nRows;i++)for(intj=0;j<nCols;j++){GLubytec=(((i/8)+(j/8))%2)*255; Image[count++]=c;Image[count++]=c; Image[count++]=c;}}5711.3紋理映射//紋理初始化voidmyinit(void){glClearColor(0.0,0.0,0.0,0.0);makeCheckerboard();glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_DECAL);glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP);//GL_REPEATglTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP);//GL_CLAMPglTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,nRows,nCols,0,GL_RGB,GL_UNSIGNED_BYTE,Image);glEnable(GL_DEPTH_TEST);glDepthFunc(GL_LESS);glEnable(GL_TEXTURE_2D);}5811.3紋理映射//繪制圖形voiddrawRect()//正方形{ glBegin(GL_POLYGON); glTexCoord2f(1,0); glVertex3f(-2,2,0); glTexCoord2f(1,1); glVertex3f(2,2,0); glTexCoord2f(0,1); glVertex3f(2,-2,0); glTexCoord2f(0,0); glVertex3f(-2,-2,0); glEnd();}5911.3紋理映射#definenH30#definenC30voiddrawClinder(floatr,floath)//繪制圓柱面{floatdh=(float)h/nH;floatdc=2*3.14/nC;floatx[nC+1],z[nC+1],y1,y2;floats[nC+1],t1,t2;for(intj=0;j<=nC;j++){x[j]=r*sin(j*dc);z[j]=r*cos(j*dc);s[j]=j*dc/3.14/2;}for(inti=0;i<=nH;i++){if(i!=0){y1=y2;t1=t2;}y2=i*dh-0.5*h; t2=(y1+0.5*h)/h;if(i==0)continue;for(j=0;j<nC;j++){glBegin(GL_POLYGON); glTexCoord2f(s[j],t1);glVertex3f(x[j],y1,z[j]); glTexCoord2f(s[j+1],t1);glVertex3f(x[j+1],y1,z[j+1]); glTexCoord2f(s[j+1],t2);glVertex3f(x[j+1],y2,z[j+1]); glTexCoord2f(s[j],t2);glVertex3f(x[j],y2,z[j]);glEnd();}}}6011.3紋理映射voiddrawTorus(floatr,floatR)//繪制圓環(huán){floatdh=6.28/nH;floatdc=6.28/nC;floats;for(inti=0;i<nC;i++){for(intj=0;j<nH;j++){glBegin(GL_POLYGON); s=i*dc/6.28;floatsx=r*cos(j*dh); floatsx1=r*cos(j*dh+dh); glTexCoord2f(s,j*dh/6.28);glVertex3f((R+sx)*sin(i*dc),r*sin(j*dh),(R+sx)*cos(i*dc)); glTexCoord2f(s,(j+1)*dh/6.28);glVertex3f((R+sx1)*sin(i*dc),r*sin(j*dh+dh),(R+sx1)*cos(i*dc)); s=(i+1)*dh/3.14/2;glTexCoord2f(s,(j*dh+dh)/6.28); glVertex3f((R+sx1)*sin((i+1)*dc),r*sin(j*dh+dh),(R+sx1)*cos((i+1)*dc)); glTexCoord2f(s,(j*dh)/6.28); glVertex3f((R+sx)*sin((i+1)*dc),r*sin(j*dh),(R+sx)*cos((i+1)*dc)); glEnd();} }}6111.3紋理映射voiddisplay(void){glClear(GL_COLOR_BUFFER_BIT|GL_DEP
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 湖北省2023-2024學(xué)年普通高中學(xué)業(yè)水平合格性考試仿真模擬卷英語(yǔ)試卷
- 中國(guó)車座墊行業(yè)市場(chǎng)調(diào)查研究及投資前景預(yù)測(cè)報(bào)告
- 四年級(jí)數(shù)學(xué)(四則混合運(yùn)算)計(jì)算題專項(xiàng)練習(xí)與答案
- 桁架式電動(dòng)升降雷達(dá)塔 7米高透波玻璃鋼避雷針 玻璃纖維照明燈桿
- 餐飲知識(shí)類培訓(xùn)課件圖片
- 年產(chǎn)80萬(wàn)套制動(dòng)鼓輪轂提質(zhì)升級(jí)項(xiàng)目可行性研究報(bào)告模板-立項(xiàng)備案
- 樹立正確職業(yè)心態(tài)
- 車床數(shù)控知識(shí)培訓(xùn)課件
- 生成式人工智能的教育應(yīng)用與展望-以ChatGPT 系統(tǒng)為例
- 臨床類風(fēng)濕關(guān)節(jié)炎疾病概述、臨床表現(xiàn)、治療原則、要護(hù)理問題、相關(guān)因素、護(hù)理重點(diǎn)及健康指導(dǎo)
- 代縣雁門光伏升壓站~寧遠(yuǎn)220kV線路工程環(huán)評(píng)報(bào)告
- 承諾函(支付寶)
- 危險(xiǎn)化學(xué)品目錄2023
- FZ/T 81024-2022機(jī)織披風(fēng)
- GB/T 24123-2009電容器用金屬化薄膜
- 艾滋病梅毒乙肝實(shí)驗(yàn)室檢測(cè)
- 國(guó)鐵橋梁人行道支架制作及安裝施工要點(diǎn)課件
- 領(lǐng)導(dǎo)科學(xué)全套精講課件
- 粵教版地理七年級(jí)下冊(cè)全冊(cè)課件
- 小學(xué)科學(xué)蘇教版六年級(jí)上冊(cè)全冊(cè)精華知識(shí)點(diǎn)(2022新版)
- 萎縮性胃炎共識(shí)解讀
評(píng)論
0/150
提交評(píng)論