版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
計(jì)算機(jī)圖形學(xué)第二次作業(yè)姓名:學(xué)號(hào):學(xué)院:任課教師:設(shè)計(jì)要求試設(shè)計(jì)一個(gè)室內(nèi)三維環(huán)境,并利用OPENGL展示它得三維效果。要求:包含基本得實(shí)體元素:球,多面體,椎體,柱體,曲面等;有全局光照與紋理功能程序具有交互功能二.交互說明鍵盤得4個(gè)按鍵:上鍵:視角上移下鍵:視角下移左鍵:視角左移右鍵:視角右移效果展示程序代碼#include<stdlib、h>#include<stdio、h>#include"glew、h"#include"glut、h"#include<windows、h>#pragmament(lib,"glew32、lib")#definecheckImageWidth64#definecheckImageHeight64staticGLubytecheckImage[checkImageHeight][checkImageWidth][4];staticGLuinttexName;staticGLfloatxrot=0;staticGLfloatyrot=0;//函數(shù)功能:繪制地面紋理圖案voidmakeCheckImage(void){ inti,j,c; for(i=0;i<checkImageHeight;i++){ for(j=0;j<checkImageWidth;j++){ c=((((i&0x16)==0)^((j&0x16))==0))*255; checkImage[i][j][0]=(GLubyte)c; checkImage[i][j][1]=(GLubyte)c; checkImage[i][j][2]=(GLubyte)c; checkImage[i][j][3]=(GLubyte)255; } }}//函數(shù)功能:初始化voidSetupRC(void){ glEnable(GL_LIGHTING); //啟用燈源 glEnable(GL_LIGHT0); //啟用0號(hào)燈 glShadeModel(GL_SMOOTH);//設(shè)置光滑著色模式 glEnable(GL_DEPTH_TEST); //啟用深度測試 glEnable(GL_NORMALIZE); //啟用法向量 glClearColor(1、0f,1、0f,1、0f,0、0f);//為色彩緩沖區(qū)指定用于清除得值 //設(shè)置表面材料得屬性 GLfloatmat_ambient[]={0、6f,0、6f,0、6f,1、0f}; GLfloatmat_diffuse[]={0、5f,0、5f,0、5f,1、0f}; GLfloatmat_specular[]={1、0f,1、0f,1、0f,1、0f,}; GLfloatmat_shininess[]={40、0f}; glMaterialfv(GL_FRONT,GL_AMBIENT,mat_ambient); //指定環(huán)境泛光得強(qiáng)度glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse); //漫反射得強(qiáng)度 glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular); //鏡面反射得強(qiáng)度 glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess); //鏡面反射光得會(huì)聚強(qiáng)度 //紋理 makeCheckImage; //繪制地面紋理圖案 glPixelStorei(GL_UNPACK_ALIGNMENT,1); //控制像素存儲(chǔ)模式 glGenTextures(1,&texName); //用來生成紋理得數(shù)量為1 glBindTexture(GL_TEXTURE_2D,texName); //綁定紋理 //紋理濾波,圖象從紋理圖象空間映射到幀緩沖圖象空間 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST); glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,checkImageWidth, checkImageHeight,0,GL_RGBA,GL_UNSIGNED_BYTE,checkImage);}//函數(shù)功能:繪制墻壁voidDrawWall(void){ glPushMatrix;//矩陣堆棧壓入 glTranslated(1、2,0、01,1、2);//將變換矩陣與當(dāng)前矩陣相乘,使原點(diǎn)移動(dòng)到(參數(shù)值坐標(biāo)) glScaled(2、4,0、02,2、4);//將比例矩陣與當(dāng)前矩陣相乘,將當(dāng)前圖形沿x,y,z軸分別放大為原來得(參數(shù)值)倍 glutSolidCube(1、0);//size=1、0得實(shí)心立方體 glPopMatrix;//矩陣堆棧彈出}//函數(shù)功能:繪制立方柱體voidDrawPillar(void){ glPushMatrix; glTranslated(0,0、15,0); glScaled(0、02,0、3,0、02); glutSolidCube(1、0); glPopMatrix;}//函數(shù)功能:繪制桌子voidDrawTable(void){ glPushMatrix; glTranslated(0、05,0、3,0、05); glScaled(0、6,0、02,0、6); glutSolidCube(1、0); //繪制桌面 glPopMatrix; glPushMatrix; glTranslated(0、275,0,0、275); DrawPillar; //繪制桌腿 glTranslated(0,0,0、45); DrawPillar; //繪制桌腿 glTranslated(0、45,0,0、45); DrawPillar; //繪制桌腿 glTranslated(0,0,0、45); DrawPillar; //繪制桌腿 glPopMatrix;}//函數(shù)功能:繪圖voidRenderScene(void){ GLfloatlight_position[]={2、0f,6、0f,3、0f,0、0f}; glLightfv(GL_LIGHT0,GL_POSITION,light_position);//指定0號(hào)光源得位置 glMatrixMode(GL_PROJECTION);//對(duì)投影矩陣應(yīng)用隨后得矩陣操作 glLoadIdentity; //將當(dāng)前得用戶坐標(biāo)系得原點(diǎn)移到了屏幕中心GLfloath=1、0; //窗口得一半高度 glOrtho(h*64/48、0,h*64/48、0,h,h,0、1,100、0);//將當(dāng)前得可視空間設(shè)置為正投影空間:左,右,下,上,近,遠(yuǎn)。 glMatrixMode(GL_MODELVIEW); //對(duì)模型視景矩陣堆棧應(yīng)用隨后得矩陣操作glLoadIdentity; gluLookAt(2,1、6,2,0,0、2,0,0,1,0); //設(shè)置觀察坐標(biāo)系//開始繪制 glRotatef(xrot,1、0f,0、0f,0、0f); //旋轉(zhuǎn)軸經(jīng)過原點(diǎn),方向?yàn)?1,0,0),旋轉(zhuǎn)角度為xrot,方向滿足右手定則 glRotatef(yrot,0、0f,1、0f,0、0f);//旋轉(zhuǎn)軸經(jīng)過原點(diǎn),方向?yàn)?0,1,0),旋轉(zhuǎn)角度為yrotglClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glPushMatrix; glRotated(90、0,0、0,0、0,1、0); DrawWall; //繪制一面墻壁glPopMatrix; glPushMatrix; glRotated(90、0,1、0,0、0,0、0); DrawWall; //繪制另一面墻壁 glPopMatrix; glPushMatrix; glTranslated(0、4,0,0、4); DrawTable; //繪制桌子 glPopMatrix; glPushMatrix; glTranslated(0、2,0、1,0、85); glScaled(0、8,0、8,1、0); glutSolidCube(0、2); //繪制箱子 glPopMatrix; glPushMatrix; glTranslated(0、6,0、38,0、6); glRotated(100,0,1,0); glutSolidTeapot(0、1); //繪制茶壺 glPopMatrix; glPushMatrix; glTranslated(0、3,0、33,0、5); glRotated(180,0,180,180); glutSolidTorus(0、02f,0、05,25,50);//繪制手鐲【絲狀花環(huán)】 glPopMatrix; glPushMatrix; glTranslated(0、45,0、42,0、3); glutSolidSphere(0、1,15,50); //繪制球體 glPopMatrix; glPushMatrix; glTranslated(1、0,0、35,0、3); glScaled(0、03,0、7,0、03); glutSolidCube(1、0); //繪制燈柱 glPopMatrix; glPushMatrix; glTranslated(1、0,0、7,0、3); glRotated(190,180,200,270); glutSolidCone(0、15,0、25f,30,25); //繪制圓錐型燈罩 glPopMatrix; //繪制紋理 glEnable(GL_TEXTURE_2D); //開啟紋理 glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_DECAL);//映射方式 glBegin(GL_QUADS); //繪制地面 //繪制四邊形并給出當(dāng)前頂點(diǎn)所對(duì)應(yīng)得紋理坐標(biāo) glTexCoord2f(0、0,0、0);glVertex3f(0、0,0、0,0、0); glTexCoord2f(0、0,1、0);glVertex3f(0、0,0、0,2、4); glTexCoord2f(1、0,1、0);glVertex3f(2、4,0、0,2、4); glTexCoord2f(1、0,0、0);glVertex3f(2、4,0、0,0、0); glEnd; glDisable(GL_TEXTURE_2D); //關(guān)閉紋理 glFlush; //繪圖結(jié)果顯示到屏幕上}//函數(shù)功能:處理按鍵交互信息voidSpecialKeys(intkey,intx,inty){ switch(key){ caseGLUT_KEY_UP: //上鍵 xrot+=1、0; break; caseGLUT_KEY_DOWN: //下鍵 xrot=1、0; break; caseGLUT_KEY_LEFT: //左鍵 yrot+=1、0; break; caseGLUT_KEY_RIGHT: //右鍵 yrot=1、0; break; default: break; } glutPostRedisplay; //標(biāo)記當(dāng)前窗口需要重新繪制 glFlush; //繪圖結(jié)果顯示到屏幕上}//函數(shù)功能:改變窗口大小voidChangeSize(intw,inth){ GLfloatlightPos[]={50、f,50、0f,100、0f,1、0f}; GLfloatnRange=1、9f; if(h==0) h=1; glViewport(0,0,w,h); //重新設(shè)置屏幕上得窗口大小 glMatrixMode(GL_PROJECTION);//后繼操作都在投影變換范圍內(nèi) glLoadIdentity; //設(shè)置當(dāng)前矩陣為單位矩陣 //正交投影 if(w<=h) glOrtho(nRange,nRange,nRange*h/
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度教育科技合伙人退伙合同模板
- 二零二五年度房地產(chǎn)項(xiàng)目資金代管代收代付服務(wù)合同
- 2025年度離婚夫妻共同子女法律權(quán)益保護(hù)協(xié)議
- 施工總體籌劃
- 施工日志填寫樣本施工過程中的質(zhì)量問題與整改記錄
- 打造高效、智能的辦公環(huán)境-基于工業(yè)互聯(lián)網(wǎng)平臺(tái)的實(shí)踐研究
- 深度探討學(xué)術(shù)研究匯報(bào)的要點(diǎn)與制作技巧
- 業(yè)績達(dá)標(biāo)股票期權(quán)合同范本
- 產(chǎn)品分銷合作合同書
- 萬科地產(chǎn)集團(tuán):合同管理新篇章
- 廣西南寧市2024-2025學(xué)年八年級(jí)上學(xué)期期末義務(wù)教育質(zhì)量檢測綜合道德與法治試卷(含答案)
- 梅大高速塌方災(zāi)害調(diào)查評(píng)估報(bào)告及安全警示學(xué)習(xí)教育
- 2025年供應(yīng)鏈管理培訓(xùn)課件
- 2025中智集團(tuán)招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- 《保利公司簡介》課件
- 中藥硬膏熱貼敷治療
- 《攜程旅行營銷環(huán)境及營銷策略研究》10000字(論文)
- 2024年高頻脈沖電源項(xiàng)目可行性研究報(bào)告
- 餐飲行業(yè)優(yōu)化食品供應(yīng)鏈管理計(jì)劃
- cnc加工崗前培訓(xùn)
- 復(fù)工復(fù)產(chǎn)六個(gè)一方案模板
評(píng)論
0/150
提交評(píng)論