最新計算機(jī)圖形學(xué)CG11課件_第1頁
最新計算機(jī)圖形學(xué)CG11課件_第2頁
最新計算機(jī)圖形學(xué)CG11課件_第3頁
最新計算機(jī)圖形學(xué)CG11課件_第4頁
最新計算機(jī)圖形學(xué)CG11課件_第5頁
已閱讀5頁,還剩133頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

計算機(jī)圖形學(xué)CG11計算機(jī)圖形學(xué)CG11本章目標(biāo)掌握真實感圖形繪制的主要內(nèi)容光照、紋理、陰影等重點掌握光照方程、基本紋理映射及多邊形繪制學(xué)會使用OpenGL的相關(guān)函數(shù)2本章目標(biāo)掌握真實感圖形繪制的主要內(nèi)容2最新計算機(jī)圖形學(xué)CG11課件最新計算機(jī)圖形學(xué)CG11課件最新計算機(jī)圖形學(xué)CG11課件最新計算機(jī)圖形學(xué)CG11課件最新計算機(jī)圖形學(xué)CG11課件最新計算機(jī)圖形學(xué)CG11課件11.1簡單光照模型11.1.3鏡面反射光和馮(Phong)反射模型高光(highlight):光滑物體表面在點光源的照射下形成一塊特別亮的區(qū)域鏡面反射(SpecularReflection)物體表面對入射光的反射遵循反射定律(1)反射光與入射光位于表面法向兩側(cè)(2)理想反射面而言:入射角=反射角觀察者在反射方向上看到反射光最強(qiáng)911.1簡單光照模型11.1.3鏡面反射光和馮(Phon11.1簡單光照模型Phong模型(非理想反射面)計算公式:Ks是物體表面鏡面反射系數(shù),它與入射角和波長有關(guān);α是視線與反射方向的夾角;

n為鏡面高光系數(shù),用來模擬鏡面反射光在空間中的匯聚程度,它是一個反映物體表面光澤度的常數(shù);近似地描述了鏡面反射光的空間分布。1011.1簡單光照模型Phong模型(非理想反射面)計算11.1簡單光照模型簡化Phong模型SSHβL,N,R都是單位向量1111.1簡單光照模型簡化Phong模型SSHβL,N,R都11.1簡單光照模型鏡面參數(shù)n的影響效果n=15 n=5 n=1n

常規(guī)取值5-201211.1簡單光照模型鏡面參數(shù)n的影響效果n=15 11.1簡單光照模型局部光照方程結(jié)合環(huán)境光、漫反射光及鏡面反射光當(dāng)光源與視點無窮遠(yuǎn)時,對表面上任意一點而言,L和V固定不變,H只需計算一次Hβ1311.1簡單光照模型局部光照方程Hβ1311.1簡單光照模型11.1.4光的衰減光在傳播過程中,能量會衰減傳播過程光源到物體表面的傳播,使入射光強(qiáng)度變?nèi)跷矬w表面到人眼的傳播,使人接受到物體表面的反射光強(qiáng)度減弱光到物體表面的衰減考慮衰減的方程1411.1簡單光照模型11.1.4光的衰減1411.1簡單光照模型物體表面到人眼過程中的衰減深度暗示技術(shù)(DepthCueing)使據(jù)視點遠(yuǎn)的點比近的點暗一些亮度計算前參考面n=Nf;后參考面n=Nb(規(guī)范化視見體內(nèi))分別賦比例因子Sf和Sb(Sf>Sb)給點物體上的一點的深度N0,比例因子S01511.1簡單光照模型物體表面到人眼過程中的衰減1511.1簡單光照模型亮度計算光照方程計算出的I按比例S0與熔合亮度Idc混合若Sf=1,Sb=0,Idc=0時(1)當(dāng)物體位于前參考面前,I’=I(2)當(dāng)物體位于后參考面后,I’=0(3)N0在Nb和Nf間時,

I’=S0I,亮度部分衰減1611.1簡單光照模型亮度計算1611.1簡單光照模型13.1.5產(chǎn)生顏色前面的光照模型僅用于白光,只能產(chǎn)生灰度彩色模型計算選擇合適模型(如RGB、HSV等)為顏色的三個分量分別建立光照方程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簡單光照模型13.1.5產(chǎn)生顏色1711.1簡單光照模型彩色光照方程(模型)1811.1簡單光照模型彩色光照方程(模型)1811.1簡單光照模型11.1.6多個光源如果場景中有m個光源,那么物體上任一點的亮度應(yīng)該為m個光源的貢獻(xiàn)之和在RGB彩色模型中,λ分別為R、G和B。

注意:Iλ可能會超出系統(tǒng)允許的最大亮度值,處理方法(1)截去超出部分,設(shè)置為最大值(2)首先計算出所有亮度值,再進(jìn)行變換(如縮放變換)使其落在系統(tǒng)規(guī)定范圍之內(nèi)1911.1簡單光照模型11.1.6多個光源1911.1簡單光照模型11.1.7OpneGL光照函數(shù)(1)OpenGL光組成

在OpenGL簡單光照模型中的幾種光分為:環(huán)境光(AmbientLight)、漫射光(DiffuseLight)、鏡面光(SpecularLight)。(2)創(chuàng)建光源(LightSource)voidglLight{if}[v](GLenumlight,GLenumpname,TYPEparam)創(chuàng)建具有某種特性的光源。其中第一個參數(shù)light指定所創(chuàng)建的光源號,如GL_LIGHT0、GL_LIGHT1、...、GL_LIGHT7。第二個參數(shù)pname指定光源特性,這個參數(shù)的輔助信息見表11-1-7-1所示。最后一個參數(shù)設(shè)置相應(yīng)的光源特性值。

2011.1簡單光照模型11.1.7OpneGL光照函11.1簡單光照模型 函數(shù)glLight*()參數(shù)pname及param說明

2111.1簡單光照模型 函數(shù)glLight*()參數(shù)11.1簡單光照模型(3)啟動光照在OpenGL中,必須明確指出光照是否有效或無效。如果光照無效,則只是簡單地將當(dāng)前顏色映射到當(dāng)前頂點上去,不進(jìn)行法向、光源等復(fù)雜計算,那么顯示的圖形就沒有真實感要使光照有效,首先得啟動光照,即:

glEnable(GL_LIGHTING);若使光照無效,則調(diào)用gDisable(GL_LIGHTING)可關(guān)閉當(dāng)前光照。然后,必須使所定義的每個光源有效。glEnable(GL_LIGHT0);其它光源類似,只是光源號不同而已2211.1簡單光照模型(3)啟動光照2211.1簡單光照模型(4)例:簡單光照#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簡單光照模型(4)例:簡單光照voiddi11.1簡單光照模型voidmyReshape(intw,inth){glViewport(0,0,w,h);glMatrixMode(GL_PROJECTION);glLoadIdentity();if(w<=h) glOrtho(-1.5,1.5,-1.5*(GLfloat)h/(GLfloat)w, 1.5*(GLfloat)h/(GLfloat)w,-10.0,10.0);else glOrtho(-1.5*(GLfloat)w/(GLfloat)h, 1.5*(GLfloat)w/(GLfloat)h,-1.5,1.5,-10.0,10.0);glMatrixMode(GL_MODELVIEW);glLoadIdentity();}2411.1簡單光照模型voidmyReshape(in11.1簡單光照模型voidmain(void){ glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowSize(250,250); glutInitWindowPosition(300,300); glutCreateWindow("SimpleLighting"); myinit(); glutReshapeFunc(myReshape); glutDisplayFunc(display); glutMainLoop();}2511.1簡單光照模型voidmain(void)2511.1簡單光照模型(5)聚光定位光源可以定義成聚光燈形式,即將光的形狀限制在一個圓錐內(nèi)。一、定義聚光源位置。因為聚光源也是定向光源,所以他的位置同一般定向光一樣。如:

GLfloatlight_position[]={1.0,1.0,1.0,1.0};glLightfv(GL_LIGHT0,LIGHT_POSITION,light_position);2611.1簡單光照模型(5)聚光2611.1簡單光照模型二、定義聚光截止角參數(shù)GL_SPOT_CUTOFF給定光錐的軸與中心線的夾角,也可說成是光錐頂角的一半。缺省時,這個參數(shù)為180.0,即頂角為360度,光向所有的方向發(fā)射,因此聚光關(guān)閉。一般在聚光啟動情況下,聚光截止角限制在[0.0,90.0]之間,如下面一行代碼設(shè)置截止角為45度:

glLightf(GL_LIGHT0,GL_SPOT_CUTOFF,45.0);2711.1簡單光照模型二、定義聚光截止角2711.1簡單光照模型三、定義聚光方向聚光方向決定光錐的軸,它齊次坐標(biāo)定義,其缺省值為(0.0,0.0,-1.0),即指向Z負(fù)軸。聚光方向也要進(jìn)行幾何變換,其結(jié)果保存在視點坐標(biāo)中。定義如下:

GLfloatspot_direction[]={-1.0,-1.0,0.0,-1};glLightfv(GL_LIGHT0,GL_SPOT_DIRECTION,spot_direction);四、定義聚光指數(shù)參數(shù)GL_SPOT_EXPONENT控制光的集中程度,光錐中心的光強(qiáng)最大,越靠邊的光強(qiáng)越小,缺省時為0。如:

glLightf(GL_LIGHT0,GL_SPOT_EXPONENT,2.0);2811.1簡單光照模型三、定義聚光方向2811.1簡單光照模型(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)下頁2911.1簡單光照模型(6)例:多光源#include11.1簡單光照模型

//接上頁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簡單光照模型3011.1簡單光照模型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簡單光照模型voiddisplay(void11.1簡單光照模型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();}3211.1簡單光照模型voidmyReshape(GL第11章真實感圖形的繪制簡單光照模型多邊形繪制方法紋理映射陰影33第11章真實感圖形的繪制簡單光照模型3311.2多邊形繪制方法11.2.1均勻著色(FlatShading)方法任取多邊形上一點,利用光照明方程計算出它的顏色用這個顏色填充整個多邊形適合于如下情況光源在無窮遠(yuǎn)處,L·N相等視點在無窮遠(yuǎn)處,H·N相等多邊形是物體表面的精確表示特點優(yōu)點:每個多邊形只需計算一次光照明方程,速度快缺點:相鄰多邊形顏色過渡不光滑3411.2多邊形繪制方法11.2.1均勻著色(FlatS11.2多邊形繪制方法11.2.2光滑著色(SmoothShading)采用插值方法Gouraud(高洛德)方法用多邊形頂點的顏色進(jìn)行插值生成中間點的顏色Phone(馮)方法對頂點的法向量進(jìn)行插值計算出中間點的法向量3511.2多邊形繪制方法11.2.2光滑著色(Smooth11.2多邊形繪制方法11.2.3Gouraud著色方法(顏色插值方法)主要步驟1、計算多邊形的單位法向量2、計算多邊形頂點的單位法向量(共享頂點的多邊形法向量的平均值)3、利用光照明方程計算頂點顏色4、對多邊形頂點顏色進(jìn)行雙線性插值,獲得多邊形內(nèi)部各點的顏色3611.2多邊形繪制方法11.2.3Gouraud著色11.2多邊形繪制方法(1)計算多邊形頂點的單位法向量

近似取頂點v的法向量為共享該頂點的多邊形單位法向量的平均值3711.2多邊形繪制方法(1)計算多邊形頂點的單位法向量3711.2多邊形繪制方法(2)內(nèi)部點顏色計算:雙線性插值

已知P1(x1,y1)、P2(x2,y2)、P3(x3,y3),顏色分別為I1、I2和I3。A(xA,yA)和B(xB,yB)為交點,P(x,y)為AB上一點,計算P點的顏色3811.2多邊形繪制方法(2)內(nèi)部點顏色計算:雙線性插值3811.2多邊形繪制方法增量法優(yōu)化計算IA,IB,IP(1)掃描線y遞增為y+1,IA和IB的增量分別為ΔIA和ΔIB(2)當(dāng)x遞增一個單位(P點沿掃描線右移一個單位)時,IP的增量為ΔIP3911.2多邊形繪制方法增量法優(yōu)化計算IA,IB,IP3911.2多邊形繪制方法11.2.3Phong著色方法(法向插值著色方法)方法:通過對多邊形頂點法向量進(jìn)行插值,獲得多邊形內(nèi) 部各點的法向量,再利用光照方程計算各點的亮度主要步驟:1、計算多邊形單位法向量2、計算多邊形頂點單位法向量(以上兩步同Gouraud著色方法)3、對多邊形頂點法向量進(jìn)行雙線性插值,獲得內(nèi)部各點的法向量4、利用光照明方程計算多邊形內(nèi)部各點顏色4011.2多邊形繪制方法11.2.3Phong著色方法11.2多邊形繪制方法法向量雙線性插值4111.2多邊形繪制方法法向量雙線性插值4111.2多邊形繪制方法法向量雙線性插值計算優(yōu)化(1)掃描線y遞增為y+1,NA和NB的增量分別為ΔNA和ΔNB(2)當(dāng)x遞增一個單位(P點沿掃描線右移一個單位)時,NP的增量為ΔNP4211.2多邊形繪制方法法向量雙線性插值計算優(yōu)化42第11章真實感圖形的繪制簡單光照模型多邊形繪制方法紋理映射陰影43第11章真實感圖形的繪制簡單光照模型4311.3紋理映射背景光照模型只能生成光滑的物體表面自然界中的物體表面具有豐富的細(xì)節(jié),如木紋、桔子凹凸表面、沙礫路面豐富的表面細(xì)節(jié)難以用計算機(jī)圖形方法生成采用將圖片貼到物體表面上的方法繪制櫻桃木桔子凹凸面沙礫路面4411.3紋理映射背景櫻桃木桔子凹凸面沙礫路面4411.3紋理映射紋理(Texture)紋理是物體表面的細(xì)小結(jié)構(gòu),它可以是光滑表面的花紋、圖案,即顏色紋理(2D)紋理也可以是物體表面的三維結(jié)構(gòu)紋理還可以是粗糙的表面(如桔子表面的皺紋),稱為幾何紋理,是基于物體表面的微觀幾何形狀的表面紋理4511.3紋理映射紋理(Texture)4511.3紋理映射紋理(續(xù))紋理空間:紋理圖案所在空間,記為st坐標(biāo)系(一般是平面)紋素(texel):紋理最小單元,位置由紋理坐標(biāo)(s,t)標(biāo)識兩種來源數(shù)字圖像,用二維數(shù)組表示數(shù)學(xué)公式定義得紋理函數(shù)4611.3紋理映射紋理(續(xù))4611.3紋理映射紋理映射(TextureMapping)將一塊紋理圖案映射到物體表面上,產(chǎn)生物體表面的細(xì)節(jié)顏色計算方法用表面上點對應(yīng)的紋素值代替該點的漫反射系數(shù)紋理與物體表面的對應(yīng)關(guān)系紋理坐標(biāo):s,t變化范圍[0,1]PT4711.3紋理映射紋理映射(TextureMapping)11.3紋理映射實例:圓柱面映射圓柱面上的點對應(yīng)的紋理坐標(biāo)styxzrh4811.3紋理映射實例:圓柱面映射styxzrh4811.3紋理映射實例:球面映射

θ和ψ變化范圍分別[0,360]和[-90,90](1)(2)球面垂直向外映射到柱面上,再將柱面展開到矩形上4911.3紋理映射實例:球面映射4911.3紋理映射實例:圓環(huán)面映射R是環(huán)的主半徑,r是次半徑;θ和ψ變化范圍[0,360]Rr對應(yīng)的紋理坐標(biāo)5011.3紋理映射實例:圓環(huán)面映射Rr對應(yīng)的紋理坐標(biāo)5011.3紋理映射OpenGL函數(shù)紋理映射是一個相當(dāng)復(fù)雜的過程,最基本的執(zhí)行紋理映射所需的步驟。基本步驟如下:一、定義紋理;二、控制濾波;三、說明映射方式;四、激活紋理;五、繪制圖形,即給出頂點的紋理坐標(biāo)和幾何坐標(biāo)。

注意:紋理映射只能在RGBA方式下執(zhí)行,不能運用于顏色表方式。

5111.3紋理映射OpenGL函數(shù)5111.3紋理映射一、定義紋理二維紋理定義的函數(shù):voidglTexImage2D(GLenumtarget,GLintlevel,Glintcomponents,GLsizeiwidth,glsizeiheight,GLintborder,GLenumformat,GLenumtype,constGLvoid*pixels);target是常數(shù)GL_TEXTURE_2D; level表示多級分辨率的紋理圖像的級數(shù),若只有一種分辨率,則level設(shè)為0;components是一個從1到4的整數(shù),指出選擇了R、G、B、A中的哪些分量用于調(diào)整和混合,1表示選擇了R分量,2表示選擇了R和A兩個分量,3表示選擇了R、G、B三個分量,4表示選擇了R、G、B、A四個分量;

5211.3紋理映射一、定義紋理5211.3紋理映射width和height給出了紋理圖像的長度和寬度;border為紋理邊界寬度,它通常為0,width和height必須是2m+2b,這里m是整數(shù),長和寬可以有不同的值,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ù),這個數(shù)據(jù)描述了紋理圖像本身和它的邊界。5311.3紋理映射width和height給出了紋理圖像的長11.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紋理映射二、控制濾波;PnameparamGL_T11.3紋理映射三、設(shè)置紋理映射方式可以用紋理中的值來取代多邊形(曲面)原來的顏色,或用紋理圖像中的顏色與多邊形(曲面)原來的顏色進(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,以說明紋理值怎樣與原來表面顏色的處理方式;若參數(shù)pname是GL_TEXTURE_ENV_COLOR,則參數(shù)param是包含四個浮點數(shù)(分別是R、G、B、a分量)的數(shù)組,這些值只在采用GL_BLEND紋理函數(shù)時才有用。5511.3紋理映射三、設(shè)置紋理映射方式5511.3紋理映射四、激活紋理;

glEnable(GL_TEXTURE_2D);五、定義紋理坐標(biāo)在繪制紋理映射圖形時,不僅要給每個頂點定義幾何坐標(biāo),而且也要定義紋理坐標(biāo)。voidglTexCoord{1234}{sifd}[v](TYPEcoords);設(shè)置當(dāng)前紋理坐標(biāo),此后調(diào)用glVertex*()所產(chǎn)生的頂點都賦予當(dāng)前的紋理坐標(biāo)。5611.3紋理映射四、激活紋理;5611.3紋理映射例:簡單紋理映射#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紋理映射例:簡單紋理映射#include<GL/11.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紋理映射//紋理初始化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紋理映射//繪制圖形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紋理映射#definenH306011.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紋理映射voiddrawTorus(float11.3紋理映射voiddisplay(void){glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);glClearDepth(1);glPushMatrix();

glRotatef(60.0,1.0,0.0,0.0);// drawRect(); drawClinder(2,4);// drawTorus(1,2);glPopMatrix();glFlush();}voidmyReshape(GLsizeiw,GLsizeih){floata=3.5;glViewport(0,0,w,h);glMatrixMode(GL_PROJECTION);glLoadIdentity();if(w<=h)glOrtho(-a,a,-a*(float)h/(float)w,a*(float)h/(float)w,-a,a);elseglOrtho(-a*Lfloat)w/(float)h,a*(float)w/(float)h,-a,a,-a,a);glMatrixMode(GL_MODELVIEW);glLoadIdentity();}6211.3紋理映射voiddisplay(void)voi11.3紋理映射voidmain(void){ glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB|GLUT_DEPTH); glutInitWindowSize(250,250); glutInitWindowPosition(300,300); glutCreateWindow(“TextureMapping");myinit();glutReshapeFunc(myReshape); glutDisplayFunc(display);glutMainLoop();}6311.3紋理映射voidmain(void)63第11章真實感圖形的繪制簡單光照模型多邊形繪制方法紋理映射陰影64第11章真實感圖形的繪制簡單光照模型6411.4陰影陰影(Shadow)光源不能直接照射到的區(qū)域特點位于陰影區(qū)域中的物體表面被位于它和光源間的物體所遮擋對光源而言,不可見面即是位于陰影中的物體表面生成算法與消隱算法本質(zhì)上一致6511.4陰影陰影(Shadow)6511.4陰影具有陰影效果的光照模型光源對位于陰影中的點的亮度(顏色)沒有貢獻(xiàn)模型(1)多光源(2)顏色分量6611.4陰影具有陰影效果的光照模型6611.4陰影Z緩沖器陰影算法步驟(1)將圖形變換到以光源為原點的坐標(biāo)系,利用Z緩沖器消隱算法按光線方向?qū)D形消隱,把距光源最近的物體表面上點的深度值保存在Z緩沖器中(稱為陰影緩沖器)(2)利用Z緩沖器消隱算法按視線方向?qū)D形消隱,將得到的每個可見點變換到第i個光源的坐標(biāo)系中,若它在光源坐標(biāo)系中的深度值小于陰影緩沖器中相應(yīng)單元的值,則該可見點位于陰影中(Si=0),否則(Si

=1),再用光照模型計算顏色特點:算法簡單,計算量小,能處理復(fù)雜景物;缺點是每個光源需要1個Z緩沖器,需要的存儲空間大6711.4陰影Z緩沖器陰影算法67小結(jié)光照模型環(huán)境光、漫反射光和鏡面反射光光照模型方程多邊形繪制顏色插值和法向插值紋理映射基本概念及一般曲面映射關(guān)系陰影基于Z緩沖消隱的實現(xiàn)算法68小結(jié)光照模型68最新計算機(jī)圖形學(xué)CG11課件計算機(jī)圖形學(xué)CG11計算機(jī)圖形學(xué)CG11本章目標(biāo)掌握真實感圖形繪制的主要內(nèi)容光照、紋理、陰影等重點掌握光照方程、基本紋理映射及多邊形繪制學(xué)會使用OpenGL的相關(guān)函數(shù)71本章目標(biāo)掌握真實感圖形繪制的主要內(nèi)容2最新計算機(jī)圖形學(xué)CG11課件最新計算機(jī)圖形學(xué)CG11課件最新計算機(jī)圖形學(xué)CG11課件最新計算機(jī)圖形學(xué)CG11課件最新計算機(jī)圖形學(xué)CG11課件最新計算機(jī)圖形學(xué)CG11課件11.1簡單光照模型11.1.3鏡面反射光和馮(Phong)反射模型高光(highlight):光滑物體表面在點光源的照射下形成一塊特別亮的區(qū)域鏡面反射(SpecularReflection)物體表面對入射光的反射遵循反射定律(1)反射光與入射光位于表面法向兩側(cè)(2)理想反射面而言:入射角=反射角觀察者在反射方向上看到反射光最強(qiáng)7811.1簡單光照模型11.1.3鏡面反射光和馮(Phon11.1簡單光照模型Phong模型(非理想反射面)計算公式:Ks是物體表面鏡面反射系數(shù),它與入射角和波長有關(guān);α是視線與反射方向的夾角;

n為鏡面高光系數(shù),用來模擬鏡面反射光在空間中的匯聚程度,它是一個反映物體表面光澤度的常數(shù);近似地描述了鏡面反射光的空間分布。7911.1簡單光照模型Phong模型(非理想反射面)計算11.1簡單光照模型簡化Phong模型SSHβL,N,R都是單位向量8011.1簡單光照模型簡化Phong模型SSHβL,N,R都11.1簡單光照模型鏡面參數(shù)n的影響效果n=15 n=5 n=1n

常規(guī)取值5-208111.1簡單光照模型鏡面參數(shù)n的影響效果n=15 11.1簡單光照模型局部光照方程結(jié)合環(huán)境光、漫反射光及鏡面反射光當(dāng)光源與視點無窮遠(yuǎn)時,對表面上任意一點而言,L和V固定不變,H只需計算一次Hβ8211.1簡單光照模型局部光照方程Hβ1311.1簡單光照模型11.1.4光的衰減光在傳播過程中,能量會衰減傳播過程光源到物體表面的傳播,使入射光強(qiáng)度變?nèi)跷矬w表面到人眼的傳播,使人接受到物體表面的反射光強(qiáng)度減弱光到物體表面的衰減考慮衰減的方程8311.1簡單光照模型11.1.4光的衰減1411.1簡單光照模型物體表面到人眼過程中的衰減深度暗示技術(shù)(DepthCueing)使據(jù)視點遠(yuǎn)的點比近的點暗一些亮度計算前參考面n=Nf;后參考面n=Nb(規(guī)范化視見體內(nèi))分別賦比例因子Sf和Sb(Sf>Sb)給點物體上的一點的深度N0,比例因子S08411.1簡單光照模型物體表面到人眼過程中的衰減1511.1簡單光照模型亮度計算光照方程計算出的I按比例S0與熔合亮度Idc混合若Sf=1,Sb=0,Idc=0時(1)當(dāng)物體位于前參考面前,I’=I(2)當(dāng)物體位于后參考面后,I’=0(3)N0在Nb和Nf間時,

I’=S0I,亮度部分衰減8511.1簡單光照模型亮度計算1611.1簡單光照模型13.1.5產(chǎn)生顏色前面的光照模型僅用于白光,只能產(chǎn)生灰度彩色模型計算選擇合適模型(如RGB、HSV等)為顏色的三個分量分別建立光照方程RGB模型光源的顏色[IpR,IpG,IpB],環(huán)境光的顏色[IaR,IaG,IaB]表面反射系數(shù)(1)環(huán)境反射:[KaR,KaG,KaB](2)漫反射:[KdR,KdG,KdB](3)鏡面反射:[KsR,KsG,KsB]8611.1簡單光照模型13.1.5產(chǎn)生顏色1711.1簡單光照模型彩色光照方程(模型)8711.1簡單光照模型彩色光照方程(模型)1811.1簡單光照模型11.1.6多個光源如果場景中有m個光源,那么物體上任一點的亮度應(yīng)該為m個光源的貢獻(xiàn)之和在RGB彩色模型中,λ分別為R、G和B。

注意:Iλ可能會超出系統(tǒng)允許的最大亮度值,處理方法(1)截去超出部分,設(shè)置為最大值(2)首先計算出所有亮度值,再進(jìn)行變換(如縮放變換)使其落在系統(tǒng)規(guī)定范圍之內(nèi)8811.1簡單光照模型11.1.6多個光源1911.1簡單光照模型11.1.7OpneGL光照函數(shù)(1)OpenGL光組成

在OpenGL簡單光照模型中的幾種光分為:環(huán)境光(AmbientLight)、漫射光(DiffuseLight)、鏡面光(SpecularLight)。(2)創(chuàng)建光源(LightSource)voidglLight{if}[v](GLenumlight,GLenumpname,TYPEparam)創(chuàng)建具有某種特性的光源。其中第一個參數(shù)light指定所創(chuàng)建的光源號,如GL_LIGHT0、GL_LIGHT1、...、GL_LIGHT7。第二個參數(shù)pname指定光源特性,這個參數(shù)的輔助信息見表11-1-7-1所示。最后一個參數(shù)設(shè)置相應(yīng)的光源特性值。

8911.1簡單光照模型11.1.7OpneGL光照函11.1簡單光照模型 函數(shù)glLight*()參數(shù)pname及param說明

9011.1簡單光照模型 函數(shù)glLight*()參數(shù)11.1簡單光照模型(3)啟動光照在OpenGL中,必須明確指出光照是否有效或無效。如果光照無效,則只是簡單地將當(dāng)前顏色映射到當(dāng)前頂點上去,不進(jìn)行法向、光源等復(fù)雜計算,那么顯示的圖形就沒有真實感要使光照有效,首先得啟動光照,即:

glEnable(GL_LIGHTING);若使光照無效,則調(diào)用gDisable(GL_LIGHTING)可關(guān)閉當(dāng)前光照。然后,必須使所定義的每個光源有效。glEnable(GL_LIGHT0);其它光源類似,只是光源號不同而已9111.1簡單光照模型(3)啟動光照2211.1簡單光照模型(4)例:簡單光照#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();}9211.1簡單光照模型(4)例:簡單光照voiddi11.1簡單光照模型voidmyReshape(intw,inth){glViewport(0,0,w,h);glMatrixMode(GL_PROJECTION);glLoadIdentity();if(w<=h) glOrtho(-1.5,1.5,-1.5*(GLfloat)h/(GLfloat)w, 1.5*(GLfloat)h/(GLfloat)w,-10.0,10.0);else glOrtho(-1.5*(GLfloat)w/(GLfloat)h, 1.5*(GLfloat)w/(GLfloat)h,-1.5,1.5,-10.0,10.0);glMatrixMode(GL_MODELVIEW);glLoadIdentity();}9311.1簡單光照模型voidmyReshape(in11.1簡單光照模型voidmain(void){ glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowSize(250,250); glutInitWindowPosition(300,300); glutCreateWindow("SimpleLighting"); myinit(); glutReshapeFunc(myReshape); glutDisplayFunc(display); glutMainLoop();}9411.1簡單光照模型voidmain(void)2511.1簡單光照模型(5)聚光定位光源可以定義成聚光燈形式,即將光的形狀限制在一個圓錐內(nèi)。一、定義聚光源位置。因為聚光源也是定向光源,所以他的位置同一般定向光一樣。如:

GLfloatlight_position[]={1.0,1.0,1.0,1.0};glLightfv(GL_LIGHT0,LIGHT_POSITION,light_position);9511.1簡單光照模型(5)聚光2611.1簡單光照模型二、定義聚光截止角參數(shù)GL_SPOT_CUTOFF給定光錐的軸與中心線的夾角,也可說成是光錐頂角的一半。缺省時,這個參數(shù)為180.0,即頂角為360度,光向所有的方向發(fā)射,因此聚光關(guān)閉。一般在聚光啟動情況下,聚光截止角限制在[0.0,90.0]之間,如下面一行代碼設(shè)置截止角為45度:

glLightf(GL_LIGHT0,GL_SPOT_CUTOFF,45.0);9611.1簡單光照模型二、定義聚光截止角2711.1簡單光照模型三、定義聚光方向聚光方向決定光錐的軸,它齊次坐標(biāo)定義,其缺省值為(0.0,0.0,-1.0),即指向Z負(fù)軸。聚光方向也要進(jìn)行幾何變換,其結(jié)果保存在視點坐標(biāo)中。定義如下:

GLfloatspot_direction[]={-1.0,-1.0,0.0,-1};glLightfv(GL_LIGHT0,GL_SPOT_DIRECTION,spot_direction);四、定義聚光指數(shù)參數(shù)GL_SPOT_EXPONENT控制光的集中程度,光錐中心的光強(qiáng)最大,越靠邊的光強(qiáng)越小,缺省時為0。如:

glLightf(GL_LIGHT0,GL_SPOT_EXPONENT,2.0);9711.1簡單光照模型三、定義聚光方向2811.1簡單光照模型(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)下頁9811.1簡單光照模型(6)例:多光源#include11.1簡單光照模型

//接上頁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);}9911.1簡單光照模型3011.1簡單光照模型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();}10011.1簡單光照模型voiddisplay(void11.1簡單光照模型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();}10111.1簡單光照模型voidmyReshape(GL第11章真實感圖形的繪制簡單光照模型多邊形繪制方法紋理映射陰影102第11章真實感圖形的繪制簡單光照模型3311.2多邊形繪制方法11.2.1均勻著色(FlatShading)方法任取多邊形上一點,利用光照明方程計算出它的顏色用這個顏色填充整個多邊形適合于如下情況光源在無窮遠(yuǎn)處,L·N相等視點在無窮遠(yuǎn)處,H·N相等多邊形是物體表面的精確表示特點優(yōu)點:每個多邊形只需計算一次光照明方程,速度快缺點:相鄰多邊形顏色過渡不光滑10311.2多邊形繪制方法11.2.1均勻著色(FlatS11.2多邊形繪制方法11.2.2光滑著色(SmoothShading)采用插值方法Gouraud(高洛德)方法用多邊形頂點的顏色進(jìn)行插值生成中間點的顏色Phone(馮)方法對頂點的法向量進(jìn)行插值計算出中間點的法向量10411.2多邊形繪制方法11.2.2光滑著色(Smooth11.2多邊形繪制方法11.2.3Gouraud著色方法(顏色插值方法)主要步驟1、計算多邊形的單位法向量2、計算多邊形頂點的單位法向量(共享頂點的多邊形法向量的平均值)3、利用光照明方程計算頂點顏色4、對多邊形頂點顏色進(jìn)行雙線性插值,獲得多邊形內(nèi)部各點的顏色10511.2多邊形繪制方法11.2.3Gouraud著色11.2多邊形繪制方法(1)計算多邊形頂點的單位法向量

近似取頂點v的法向量為共享該頂點的多邊形單位法向量的平均值10611.2多邊形繪制方法(1)計算多邊形頂點的單位法向量3711.2多邊形繪制方法(2)內(nèi)部點顏色計算:雙線性插值

已知P1(x1,y1)、P2(x2,y2)、P3(x3,y3),顏色分別為I1、I2和I3。A(xA,yA)和B(xB,yB)為交點,P(x,y)為AB上一點,計算P點的顏色10711.2多邊形繪制方法(2)內(nèi)部點顏色計算:雙線性插值3811.2多邊形繪制方法增量法優(yōu)化計算IA,IB,IP(1)掃描線y遞增為y+1,IA和IB的增量分別為ΔIA和ΔIB(2)當(dāng)x遞增一個單位(P點沿掃描線右移一個單位)時,IP的增量為ΔIP10811.2

溫馨提示

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

最新文檔

評論

0/150

提交評論