版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、加載3D世界 飄動的旗幟Page 2加載3D世界n 1定義區(qū)段,載入文件n 2平移并旋轉(zhuǎn)鏡頭n 3 繪制 OpenGL 場景Page 31定義區(qū)段,載入文件typedef struct tagSECTOR/ 創(chuàng)建Sector區(qū)段結(jié)構(gòu)int numtriangles;/Sector中的三角形個數(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頂點結(jié)構(gòu)float x, y, z;/ 3D 坐標float u, v; / 紋理坐標 VERTEX; / 命名為VERTEXPage 41定義區(qū)段,載入文件void SetupWorld()/ 設(shè)置我們的世界FILE *filein;/ 工作文件filein = fopen(worldfile, rt);/ 打開文件 .(讀入數(shù)據(jù)資料).fclose(filein);/ 關(guān)閉文件return; / 返回void readstr(FILE *f,char *string)/ 讀入一個字符串do/ 循環(huán)開始fgets(string, 255, f);/ 讀入一行 w
3、hile (string0 = /) | (string0 = n);/ 考察是否有必要進行處理return;/ 返回Page 51定義區(qū)段,載入文件讀入?yún)^(qū)段數(shù)據(jù)int numtriangles;/ 區(qū)段中的三角形數(shù)量char oneline255;/ 存儲數(shù)據(jù)的字符串.readstr(filein,oneline);/ 讀入一行數(shù)據(jù)sscanf(oneline, NUMPOLLIES %dn, &numtriangles);/ 讀入三角形數(shù)量Page 61定義區(qū)段,載入文件/ 先前的定義: SECTOR sector1;char oneline255;/ 存儲數(shù)據(jù)的字符串int nu
4、mtriangles;/ 區(qū)段的三角形數(shù)量float x, y, z, u, v; / 3D 和 紋理坐標sector1.triangle = new TRIANGLEnumtriangles;/ 為numtriangles個三角形分配內(nèi)存并設(shè)定指針sector1.numtriangles = numtriangles;/ 定義區(qū)段1中的三角形數(shù)量/ 遍歷區(qū)段中的每個三角形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 場景nint DrawGLScene(GLvoid)/ 繪制 OpenGL 場景nnglClear(GL_COLOR_BUFFER_BIT |
6、GL_DEPTH_BUFFER_BIT);/ 清除 場景 和 深度緩沖nglLoadIdentity();/ 重置當前矩陣nGLfloat x_m, y_m, z_m, u_m, v_m;/ 頂點的臨時 X, Y, Z, U 和 V 的數(shù)值nGLfloat xtrans = -xpos; / 用于游戲者沿X軸平移時的大小nGLfloat ztrans = -zpos; / 用于游戲者沿Z軸平移時的大小nGLfloat ytrans = -walkbias-0.25f;/ 用于頭部的上下擺動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ù)游戲者正面所對方向所作的旋轉(zhuǎn)nglTranslatef(xtrans, ytrans, ztrans); / 以游戲者為中心的平移場景nglBindTexture(GL_TEXTURE_2D, texturefilter);/ 根據(jù) filter 選擇的紋理nnumtriangles = sector1.numtriangles;/ 取得Sector1的三角形數(shù)量Page 103 繪制 OpenG
8、L 場景n/ 逐個處理三角形nfor (int loop_m = 0; loop_m numtriangles; loop_m+) / 遍歷所有的三角形nnglBegin(GL_TRIANGLES);/ 開始繪制三角形nglNormal3f( 0.0f, 0.0f, 1.0f);/ 指向前面的法線nx_m = sector1.triangleloop_m.vertex0.x;/ 第一點的 X 分量ny_m = sector1.triangleloop_m.vertex0.y;/ 第一點的 Y 分量nz_m = sector1.triangleloop_m.vertex0.z;/ 第一點的 Z
9、分量nu_m = sector1.triangleloop_m.vertex0.u;/ 第一點的 U 紋理坐標nv_m = sector1.triangleloop_m.vertex0.v;/ 第一點的 V 紋理坐標nglTexCoord2f(u_m,v_m); glVertex3f(x_m,y_m,z_m);/ 設(shè)置紋理坐標和頂點nx_m = sector1.triangleloop_m.vertex1.x;/ 第二點的 X 分量ny_m = sector1.triangleloop_m.vertex1.y;/ 第二點的 Y 分量nz_m = sector1.triangleloop_m.v
10、ertex1.z;/ 第二點的 Z 分量nu_m = sector1.triangleloop_m.vertex1.u;/ 第二點的 U 紋理坐標nv_m = sector1.triangleloop_m.vertex1.v;/ 第二點的 V 紋理坐標nglTexCoord2f(u_m,v_m); glVertex3f(x_m,y_m,z_m);/ 設(shè)置紋理坐標和頂點nx_m = sector1.triangleloop_m.vertex2.x;/ 第三點的 X 分量ny_m = sector1.triangleloop_m.vertex2.y;/ 第三點的 Y 分量nz_m = sector
11、1.triangleloop_m.vertex2.z;/ 第三點的 Z 分量nu_m = sector1.triangleloop_m.vertex2.u;/ 第二點的 U 紋理坐標nv_m = sector1.triangleloop_m.vertex2.v;/ 第二點的 V 紋理坐標nglTexCoord2f(u_m,v_m); glVertex3f(x_m,y_m,z_m);/ 設(shè)置紋理坐標和頂點nglEnd();/ 三角形繪制結(jié)束nnreturn TRUE;/ 返回nPage 11飄動的旗幟n #include / 引入數(shù)學(xué)函數(shù)庫中的Sinn float points 45 45 3;
12、/ Points網(wǎng)格頂點數(shù)組n int wiggle_count = 0; / 指定旗形波浪的運動速度n GLfloat hold;/ 臨時變量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場景n nint x, y;/ 循環(huán)變量nfloat float_x, float_y, float_xb, float_yb;/ 用來將旗形的波浪分割成很小的四邊形n glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_B
14、IT);/ 清除屏幕和深度緩沖nglLoadIdentity();/ 重置當前的模型觀察矩陣nglTranslatef(0.0f,0.0f,-12.0f);/ 移入屏幕12個單位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);/ 四邊形繪制開始nf
15、or( x = 0; x 44; x+ ) / 沿 X 平面 0-44 循環(huán)(45點)nnfor( y = 0; y 44; y+ )/ 沿 Y 平面 0-44 循環(huán)(45點)nn float_x = float(x)/44.0f;/ 生成X浮點值n float_y = float(y)/44.0f;/ 生成Y浮點值nfloat_xb = float(x+1)/44.0f;/ X浮點值+0.0227fnfloat_yb = float(y+1)/44.0f;/ Y浮點值+0.0227fPage 15分格映射n glTexCoord2f( float_x, float_y);/ 第一個紋理坐標
16、(左下角)nglVertex3f( pointsxy0, pointsxy1, pointsxy2 );nglTexCoord2f( float_x, float_yb );/ 第二個紋理坐標 (左上角)nglVertex3f( pointsxy+10, pointsxy+11, pointsxy+12 );nglTexCoord2f( float_xb, float_yb );/ 第三個紋理坐標 (右上角)nglVertex3f( pointsx+1y+10, pointsx+1y+11, pointsx+1y+12 );nglTexCoord2f( float_xb, float_y );/ 第四個紋理坐標 (右下角)nglVertex3f( pointsx+1y0, pointsx+1y1, pointsx+1y2 );nnnglEnd();/ 四邊形繪制結(jié)束Page 16延遲n if( wiggle_count = 2 ) / 用來降低波浪速度(每隔2幀一次)nfor( y = 0; y 45; y+ )/ 沿Y平面循環(huán)nnhold=po
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 新能源項目投資專項協(xié)議
- 電子商務(wù)平臺商家銷售保證免責協(xié)議
- 網(wǎng)絡(luò)設(shè)備銷售合作協(xié)議
- 景區(qū)門票預(yù)訂系統(tǒng)開發(fā)合同
- 美容護膚咨詢服務(wù)合同協(xié)議
- 產(chǎn)業(yè)園區(qū)開發(fā)與運營合作協(xié)議
- 專業(yè)理發(fā)師培訓(xùn)協(xié)議
- 2025年度湖南省園林綠化苗木生產(chǎn)基地合作合同3篇
- 2025年快遞公司快遞服務(wù)合同模板3篇
- 2025年度智能住宅樓房買賣合同范本3篇
- 遼寧省2024年高中生物學(xué)業(yè)水平等級性考試試題
- 2024年河南省商丘市第十一中學(xué)中考數(shù)學(xué)第一次模擬試卷
- DZ∕T 0285-2015 礦山帷幕注漿規(guī)范(正式版)
- 2024年全國初中數(shù)學(xué)競賽試題含答案
- JBT 4730.10承壓設(shè)備無損檢測-第10部分:衍射時差法超聲檢測
- 蝦皮shopee新手賣家考試題庫及答案
- 對乙酰氨基酚泡騰顆粒的藥代動力學(xué)研究
- 沖壓車間主管年終總結(jié)
- 2024年中建五局招聘筆試參考題庫附帶答案詳解
- 商業(yè)計劃書農(nóng)場
- 海南省2023年中考英語科試題及答案
評論
0/150
提交評論