




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、加載3D世界 飄動(dòng)的旗幟Page 2加載3D世界n 1定義區(qū)段,載入文件n 2平移并旋轉(zhuǎn)鏡頭n 3 繪制 OpenGL 場(chǎng)景Page 31定義區(qū)段,載入文件typedef struct tagSECTOR/ 創(chuàng)建Sector區(qū)段結(jié)構(gòu)int numtriangles;/Sector中的三角形個(gè)數(shù)TRIANGLE* triangle; / 指向三角數(shù)組的指針 SECTOR;/ 命名為SECTORtypedef struct tagTRIANGLE/ 創(chuàng)建Triangle三角形結(jié)構(gòu)VERTEX vertex3;/ VERTEX矢量數(shù)組,大小為3 TRIANGLEtypedef struct tagV
2、ERTEX/ 創(chuàng)建Vertex頂點(diǎn)結(jié)構(gòu)float x, y, z;/ 3D 坐標(biāo)float u, v; / 紋理坐標(biāo) VERTEX; / 命名為VERTEXPage 41定義區(qū)段,載入文件void SetupWorld()/ 設(shè)置我們的世界FILE *filein;/ 工作文件filein = fopen(worldfile, rt);/ 打開(kāi)文件 .(讀入數(shù)據(jù)資料).fclose(filein);/ 關(guān)閉文件return; / 返回void readstr(FILE *f,char *string)/ 讀入一個(gè)字符串do/ 循環(huán)開(kāi)始fgets(string, 255, f);/ 讀入一行 w
3、hile (string0 = /) | (string0 = n);/ 考察是否有必要進(jìn)行處理return;/ 返回Page 51定義區(qū)段,載入文件讀入?yún)^(qū)段數(shù)據(jù)int numtriangles;/ 區(qū)段中的三角形數(shù)量char oneline255;/ 存儲(chǔ)數(shù)據(jù)的字符串.readstr(filein,oneline);/ 讀入一行數(shù)據(jù)sscanf(oneline, NUMPOLLIES %dn, &numtriangles);/ 讀入三角形數(shù)量Page 61定義區(qū)段,載入文件/ 先前的定義: SECTOR sector1;char oneline255;/ 存儲(chǔ)數(shù)據(jù)的字符串int nu
4、mtriangles;/ 區(qū)段的三角形數(shù)量float x, y, z, u, v; / 3D 和 紋理坐標(biāo)sector1.triangle = new TRIANGLEnumtriangles;/ 為numtriangles個(gè)三角形分配內(nèi)存并設(shè)定指針sector1.numtriangles = numtriangles;/ 定義區(qū)段1中的三角形數(shù)量/ 遍歷區(qū)段中的每個(gè)三角形for (int triloop = 0; triloop numtriangles; triloop+)/ 遍歷所有的三角形for (int vertloop = 0; vertloop = 359.0f)/ 如果walk
5、biasangle大于359度walkbiasangle = 0.0f;/ 將 walkbiasangle 設(shè)為0else/ 否則 walkbiasangle+= 10;/ 如果 walkbiasangle 359 ,則增加 10walkbias = (float)sin(walkbiasangle * piover180)/20.0f;/ 使游戲者產(chǎn)生跳躍感if (keysVK_DOWN)/ 向下方向鍵按下了么? Page 93 繪制 OpenGL 場(chǎng)景nint DrawGLScene(GLvoid)/ 繪制 OpenGL 場(chǎng)景nnglClear(GL_COLOR_BUFFER_BIT |
6、GL_DEPTH_BUFFER_BIT);/ 清除 場(chǎng)景 和 深度緩沖nglLoadIdentity();/ 重置當(dāng)前矩陣nGLfloat x_m, y_m, z_m, u_m, v_m;/ 頂點(diǎn)的臨時(shí) X, Y, Z, U 和 V 的數(shù)值nGLfloat xtrans = -xpos; / 用于游戲者沿X軸平移時(shí)的大小nGLfloat ztrans = -zpos; / 用于游戲者沿Z軸平移時(shí)的大小nGLfloat ytrans = -walkbias-0.25f;/ 用于頭部的上下擺動(dòng)nGLfloat sceneroty = 360.0f - yrot;/ 位于游戲者方向的360度角nin
7、t numtriangles;/ 保有三角形數(shù)量的整數(shù)nglRotatef(lookupdown,1.0f,0,0);/ 上下旋轉(zhuǎn)nglRotatef(sceneroty,0,1.0f,0);/ 根據(jù)游戲者正面所對(duì)方向所作的旋轉(zhuǎn)nglTranslatef(xtrans, ytrans, ztrans); / 以游戲者為中心的平移場(chǎng)景nglBindTexture(GL_TEXTURE_2D, texturefilter);/ 根據(jù) filter 選擇的紋理nnumtriangles = sector1.numtriangles;/ 取得Sector1的三角形數(shù)量Page 103 繪制 OpenG
8、L 場(chǎng)景n/ 逐個(gè)處理三角形nfor (int loop_m = 0; loop_m numtriangles; loop_m+) / 遍歷所有的三角形nnglBegin(GL_TRIANGLES);/ 開(kāi)始繪制三角形nglNormal3f( 0.0f, 0.0f, 1.0f);/ 指向前面的法線nx_m = sector1.triangleloop_m.vertex0.x;/ 第一點(diǎn)的 X 分量ny_m = sector1.triangleloop_m.vertex0.y;/ 第一點(diǎn)的 Y 分量nz_m = sector1.triangleloop_m.vertex0.z;/ 第一點(diǎn)的 Z
9、分量nu_m = sector1.triangleloop_m.vertex0.u;/ 第一點(diǎn)的 U 紋理坐標(biāo)nv_m = sector1.triangleloop_m.vertex0.v;/ 第一點(diǎn)的 V 紋理坐標(biāo)nglTexCoord2f(u_m,v_m); glVertex3f(x_m,y_m,z_m);/ 設(shè)置紋理坐標(biāo)和頂點(diǎn)nx_m = sector1.triangleloop_m.vertex1.x;/ 第二點(diǎn)的 X 分量ny_m = sector1.triangleloop_m.vertex1.y;/ 第二點(diǎn)的 Y 分量nz_m = sector1.triangleloop_m.v
10、ertex1.z;/ 第二點(diǎn)的 Z 分量nu_m = sector1.triangleloop_m.vertex1.u;/ 第二點(diǎn)的 U 紋理坐標(biāo)nv_m = sector1.triangleloop_m.vertex1.v;/ 第二點(diǎn)的 V 紋理坐標(biāo)nglTexCoord2f(u_m,v_m); glVertex3f(x_m,y_m,z_m);/ 設(shè)置紋理坐標(biāo)和頂點(diǎn)nx_m = sector1.triangleloop_m.vertex2.x;/ 第三點(diǎn)的 X 分量ny_m = sector1.triangleloop_m.vertex2.y;/ 第三點(diǎn)的 Y 分量nz_m = sector
11、1.triangleloop_m.vertex2.z;/ 第三點(diǎn)的 Z 分量nu_m = sector1.triangleloop_m.vertex2.u;/ 第二點(diǎn)的 U 紋理坐標(biāo)nv_m = sector1.triangleloop_m.vertex2.v;/ 第二點(diǎn)的 V 紋理坐標(biāo)nglTexCoord2f(u_m,v_m); glVertex3f(x_m,y_m,z_m);/ 設(shè)置紋理坐標(biāo)和頂點(diǎn)nglEnd();/ 三角形繪制結(jié)束nnreturn TRUE;/ 返回nPage 11飄動(dòng)的旗幟n #include / 引入數(shù)學(xué)函數(shù)庫(kù)中的Sinn float points 45 45 3;
12、/ Points網(wǎng)格頂點(diǎn)數(shù)組n int wiggle_count = 0; / 指定旗形波浪的運(yùn)動(dòng)速度n GLfloat hold;/ 臨時(shí)變量n if (TextureImage0=LoadBMP(Data/Tim.bmp)/ 載入位圖n glPolygonMode( GL_BACK, GL_FILL );n / 后表面完全填充nglPolygonMode( GL_FRONT, GL_LINE ); / 前表面使用線條繪制Page 12n / 沿X平面循環(huán)nfor(int x=0; x45; x+)nn/ 沿Y平面循環(huán)nfor(int y=0; y45; y+)nn/ 向表面添加波浪效果np
13、ointsxy0=float(x/5.0f)-4.5f);npointsxy1=float(y/5.0f)-4.5f);npointsxy2=float(sin(x/5.0f)*40.0f)/360.0f)*3.141592654*2.0f);nnPage 13分格映射n int DrawGLScene(GLvoid)/繪制我們的GL場(chǎng)景n nint x, y;/ 循環(huán)變量nfloat float_x, float_y, float_xb, float_yb;/ 用來(lái)將旗形的波浪分割成很小的四邊形n glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_B
14、IT);/ 清除屏幕和深度緩沖nglLoadIdentity();/ 重置當(dāng)前的模型觀察矩陣nglTranslatef(0.0f,0.0f,-12.0f);/ 移入屏幕12個(gè)單位nglRotatef(xrot,1.0f,0.0f,0.0f);/ 繞 X 軸旋轉(zhuǎn)nglRotatef(yrot,0.0f,1.0f,0.0f);/ 繞 Y 軸旋轉(zhuǎn)nglRotatef(zrot,0.0f,0.0f,1.0f);/ 繞 Z 軸旋轉(zhuǎn)nglBindTexture(GL_TEXTURE_2D, texture0);/ 選擇紋理Page 14分格映射n glBegin(GL_QUADS);/ 四邊形繪制開(kāi)始nf
15、or( x = 0; x 44; x+ ) / 沿 X 平面 0-44 循環(huán)(45點(diǎn))nnfor( y = 0; y 44; y+ )/ 沿 Y 平面 0-44 循環(huán)(45點(diǎn))nn float_x = float(x)/44.0f;/ 生成X浮點(diǎn)值n float_y = float(y)/44.0f;/ 生成Y浮點(diǎn)值nfloat_xb = float(x+1)/44.0f;/ X浮點(diǎn)值+0.0227fnfloat_yb = float(y+1)/44.0f;/ Y浮點(diǎn)值+0.0227fPage 15分格映射n glTexCoord2f( float_x, float_y);/ 第一個(gè)紋理坐標(biāo)
16、(左下角)nglVertex3f( pointsxy0, pointsxy1, pointsxy2 );nglTexCoord2f( float_x, float_yb );/ 第二個(gè)紋理坐標(biāo) (左上角)nglVertex3f( pointsxy+10, pointsxy+11, pointsxy+12 );nglTexCoord2f( float_xb, float_yb );/ 第三個(gè)紋理坐標(biāo) (右上角)nglVertex3f( pointsx+1y+10, pointsx+1y+11, pointsx+1y+12 );nglTexCoord2f( float_xb, float_y );/ 第四個(gè)紋理坐標(biāo) (右下角)nglVertex3f( pointsx+1y0, pointsx+1y1, pointsx+1y2 );nnnglEnd();/ 四邊形繪制結(jié)束Page 16延遲n if( wiggle_count = 2 ) / 用來(lái)降低波浪速度(每隔2幀一次)nfor( y = 0; y 45; y+ )/ 沿Y平面循環(huán)nnhold=po
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 合伙創(chuàng)業(yè)司機(jī)協(xié)議書(shū)
- 合作利潤(rùn)分紅協(xié)議書(shū)
- 合伙經(jīng)營(yíng)藥店協(xié)議書(shū)
- 合作項(xiàng)目合同協(xié)議書(shū)
- 單位組織外出協(xié)議書(shū)
- 南京醫(yī)療糾紛協(xié)議書(shū)
- 單位購(gòu)買服裝協(xié)議書(shū)
- 商行承包合同協(xié)議書(shū)
- 加強(qiáng)合作交流協(xié)議書(shū)
- 醫(yī)院康復(fù)救助協(xié)議書(shū)
- 醫(yī)院無(wú)線網(wǎng)絡(luò)方案
- 水庫(kù)安全運(yùn)行管理防汛知識(shí)培訓(xùn)
- 基于高光譜成像的青稞品種鑒別和特征品質(zhì)無(wú)損檢測(cè)技術(shù)研究
- 2024年山東省政府采購(gòu)評(píng)審專家考試真題100個(gè)題及答案
- 2025年合肥市公安局第一批招考聘用警務(wù)輔助人員591人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 醫(yī)院培訓(xùn)課件:《醫(yī)務(wù)人員職業(yè)暴露及安全防護(hù)》
- 煤質(zhì)化驗(yàn)工職業(yè)技能競(jìng)賽理論考試題及答案
- DB52T 1512-2020 水利水電工程隧洞施工超前地質(zhì)預(yù)報(bào)技術(shù)規(guī)程
- 15J403-1-樓梯欄桿欄板(一)
- 部編版四年級(jí)語(yǔ)文下冊(cè)1-8單元詞語(yǔ)、課文默寫(xiě)練習(xí)卷
- 《數(shù)學(xué)課程標(biāo)準(zhǔn)》義務(wù)教育2022年修訂版(原版)
評(píng)論
0/150
提交評(píng)論