freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于opengl的3d旋轉(zhuǎn)魔方的實現(xiàn)--終期報告加源碼-文庫吧資料

2024-11-20 15:13本頁面
  

【正文】 for(i=0。Static_Cube[ SZM[i] ] ) ) { ZM[k++] = j。j++) if( is_equal( amp。i++) { for( j=0。 for( i=0。 } //旋轉(zhuǎn)之后,查找當前旋轉(zhuǎn)面里面包含新的角點 void Update_Cube_index() { int i,j,k=0。 } } if( isFind == 0) return 0。 isFind = 1。 //消除累計誤差 pc1CubePoint[i].p[1] = pc2CubePoint[j].p[1]。amp。amp。 z2 = pc2CubePoint[j].p[2]。j++) 20 { x2 = pc2CubePoint[j].p[0]。 for(int j=0。 z1 = pc1CubePoint[i].p[2]。i++) { x1 = pc1CubePoint[i].p[0]。 for( int i=0。 //聲明旋轉(zhuǎn)函數(shù) //判斷兩個立方體是否重合,即判斷兩個立方體所包含的所有頂點坐標是否相同 int is_equal(stCube *pc1,stCube *pc2){ float x1,x2,y1,y2,z1,z2。 //x 軸方向中間一層 const BYTE SXP[9] = {0,5,6,15,14,9,18,23,24}。 //y 軸方向正向一層 const BYTE SXM[9] = {2,3,8,17,12,11,20,21,26}。 //y 軸方向負向一層 const BYTE SYZ[9] = {3,4,5,14,13,12,21,22,23}。 //z 軸方向中間一層 const BYTE SZM[9] = {18,19,20,21,22,23,24,25,26}。 //x 軸方向負向一層 //對靜態(tài)魔方各個立方體進行編號 const BYTE SZP[9] = {0,1,2,3,4,5,6,7,8}。 //x 軸方向正向一層 BYTE XZ[9] = {1,4,7,16,13,10,19,22,25}。 //y 軸方向中 間一層 19 BYTE YP[9] = {6,7,8,17,16,15,24,25,26}。 //z 軸方向負向一層 BYTE YM[9] = {0,1,2,11,10,9,18,19,20}。 //z 軸方向正向一層 BYTE ZZ[9] = {9,10,11,12,13,14,15,16,17}。 //指定那個軸旋轉(zhuǎn) int rotDirect=1。 //一個旋轉(zhuǎn)周期內(nèi)旋轉(zhuǎn)次數(shù) CYCLE_COUNT = 90/rotAngle。 //定義一個靜態(tài)的 3 階魔方 //旋轉(zhuǎn)控制 int rotAngle = 1。 stCube Cube[27]。 endif 第二個文件 /* * 這個 cpp 文件包含三階魔方變換的常規(guī)函數(shù) * 作者為張世清 學 號 U202020185 * 華中科技大學電子系集成 1001 班 * 當然成果還離不開組員徐兮、雷韋拉以及何兆華的支持 */ //加入自己編寫的魔方頭文件,其中包含一些變量定義與函數(shù)聲明 include //對立方體各頂點編號 18 static stPoint CubePoint[8]= { { , , }, //0 { , , }, //1 {, , }, //2 {, , }, //3 {, , }, //4 {, , }, //5 {, , }, //6 {, , }, //7 }。 extern int rotX,rotY,rotZ。 extern int rotAngle。 void drawString(const char* str)。 void selectFont(int size, int charset, const char* face)。 void enable_Y_roatate(int direction)。 void Rotate_X(int ii)。 void Rotate_Z(int ii)。 void Rotate_YZ()。 void Rotate_XP()。 void Rotate_XM()。 void Rotate_ZZ()。 void reset_model()。 typedef struct { stPoint CubePoint[8]。 typedef struct { GLfloat p[3]。 參考文獻 [1]孫鑫 VC++深入詳解 第三版 北京 電子工業(yè)出版社 2020年 126 [2]楊柏林,陳根浪,徐靜 OpenGL 編程精粹 第三版 北京 機械工 業(yè)出版社 2020年 1121 [3]周純杰,劉正林,何頂新,周凱波 標準 C 語言程序設(shè)計及應(yīng)用 第二版 武漢 華中科技大學出版社 2020年 1263 [4]Dave Shreiner, The Khronons OpenGLARB Working Group OpenGL編程指南 第七版 北京 機械工業(yè)出版社 2020年 21328 15 附上源碼 第一個文件 頭文件 ifndef _MO_FANG_H_ define _MO_FANG_H_ include // windows 的頭文件 include include gl/ // 包含 OpenGL 核心庫 include gl/ // 包含 OpenGL 實用庫 include gl/ // 包含 OpenGL 輔助庫 include // 包含數(shù)學函數(shù)庫 define PI2 define CYCLE_COUNT 90 define MAX_CHAR 128 //用于在窗口顯示文字而定義的常數(shù) define FRONT 0 define BACK 1 define LEFT 2 define RIGHT 3 define TOP 4 define BOTTOM 5 typedef struct { GLfloat vx,vy,vz。靜下心來,沉著的分析問題,問題總會迎刃而解的。而且,我也學到了很多人生的道理。好在我再次編寫出來了很好的控制算法,感覺效果很好 總的來說總的來說,本次軟件課程設(shè)計,對我來說收獲不小。一段時間過后,當我再次仔細閱讀這些算法時,我終于將它們完美的串接了起來,實現(xiàn)了2 階魔方。閱讀完老師的代碼,總感覺思維很混亂。隨后,我 掌握了 OpenGL 貼圖技術(shù),并充分利用 OpenGL 的特性實現(xiàn)了一個立方體貼六張不同的圖片。不僅有 提升 編程能力,而且也學習到了很多做人的道理。但是隨后編寫循環(huán)控制算法遇到了很大問題,剛開始都弄煩了,但是休息一段時間后,沉下心來仔細思考,我想到了非常好的控制算法,終于問題全部解決了。一開始寫 3X3 程序的時候,為了避免犯錯 誤,我是沒有加旋轉(zhuǎn)的,只是建了一個魔方的模型并將其繪制出。 ( 3)編程過程中還有一些小問題,不過只要是因為 C 語言編程的一些知識都忘記了,于是我又重新復習了一下 C 語言的有關(guān)知識,果然編起來得心應(yīng)手多了。因為轉(zhuǎn)動的延遲,所以轉(zhuǎn)動一個周期所需時間是不定的,但肯定不等于 1800ms。在多方調(diào)試后,我想到了一個很好的算法,就是再引入一個控制變量 cs,可是變量應(yīng)該選13 擇在哪里賦值呢?剛開始我毫不猶豫的就選擇在 TimerProc 函數(shù)里面賦值,可是一下子就出錯了。 ( 2) 魔方循環(huán)控制算法的設(shè)計中,我遇到了前所未有的問題。在一個旋轉(zhuǎn)周期中,要計算 180 次 cosa 和 sina 的值,因此誤差會被放大,則消除累計誤差成了必須。其實,這也很好解釋。沒有加入這個功能,程序運行結(jié)果如下: 剛開始時還比較正常 ,運行一段時間后,魔方錯位了。以下是我認為的比較重要的問題 ( 1) 在編寫判斷兩個立方體是否重合的函數(shù)時,開始我沒有消除累計誤差。 對魔方 進行編號 對魔方定位 魔方體旋轉(zhuǎn) 生成紋理 紋理綁定 12 在對 2X2 魔方理解的基礎(chǔ)上,我經(jīng)過自己的摸索終于在末期做出了自己的 3階魔方。循環(huán)調(diào)用就可以繪制出的魔方。先畫出一個子塊,經(jīng)過向相應(yīng)方向的平移,獲得完整的魔方體。 ( 5)添加窗口文字 void drawString(const char* str),實現(xiàn)添加英文字符。與 glTranslatef(x, y, z)類似, glRotatef(angle, x, y, z)也是對坐標系進行操作。表示相對于當前所在的屏幕位置沿著 X, Y 和 Z 軸移動 x, y 和 z個單位。 glEnable(GL_TEXTURE_2D),作用是 啟用紋理映射 ,此點很關(guān)鍵。 glBindTexture(GL_TEXTURE_2D, texture[i]),作用是選擇生成的紋理。 ( 3) OpenGL 貼圖 glGenTextures(1, amp。 glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST),作用是做 精細的透視修正 。 glClearColor(, , , ),作用是將背景設(shè)置為黑色。 glLoadIdentity() glLoadIdentity 該函數(shù)的功能是 將當前的用戶坐標系的原點移到了屏幕中心,就像一個復位操作 gluPerspective(,(GLfloat)width/(GLfloat)height,) gluPerspective 的作用是 設(shè)置透視投影矩陣 ,意味著越遠的東西看起來越小。 glMatrixMode 這個函數(shù)其實就是要指定操作的是哪種矩陣。 glViewport 是 OpenGL 中視口變化函數(shù) , 根據(jù)窗口的實時變化重繪窗口,它負責把視景體截取的圖像按照怎樣的高和寬顯示到屏幕上 。定義了數(shù)組 TextureImage[i]來接收紋理。定義了立方體記錄頂點位置的數(shù)組 CubePoint[i]及相應(yīng)靜態(tài)數(shù)組 stPoint CubePoint[i],用來確定魔方體的旋轉(zhuǎn),因為旋轉(zhuǎn)歸根結(jié)底是其頂點位置的旋轉(zhuǎn)。 ( 8)窗口文字的添加 為了添加自己的信息,我在程序窗口中加了文字 void drawString(const char* str),實現(xiàn)添加英文字符。 流程 如圖: ( 7) 背景音樂的添加 為了程序有更豐富的效果,我添加了歌曲最炫民族風,方法也很簡單。 然后定義兩個計時器 Time1 和 Time2,其中 Timer1 的消息由 WM_TIMER 接收并處理,以實現(xiàn)立方體的旋轉(zhuǎn)。 //使魔方繞 y 軸轉(zhuǎn)動 yrot 度 7 glRotatef(zrot,)。 glRotatef(xrot,)。 } } ( 5)魔方的旋轉(zhuǎn)以及鍵盤控制對魔方的平移 魔方層面的旋轉(zhuǎn)已經(jīng)在前面介紹,此處除了層面旋轉(zhuǎn)還有魔方的整體旋轉(zhuǎn)。Cube[j], amp。j27。i9。 k =0 。 最后一步編寫函數(shù) void Update_Cube_index(),由于魔方轉(zhuǎn)動情況總體上有九種情況,則該函數(shù)必須編寫九塊功能類似的代碼,現(xiàn)在只列出 X 軸負向一層刷新索引的算法。 //x 軸方向中間一層 const BYTE SXP[9] = {0,5,6,15,14,9,18,23,24}。 //y 軸方向正向一層 const BYTE SXM[9] = {2,3,8,17,12,11,20,21,26}。 //y 軸方向負向一層 const BYTE SYZ[9] = {3,4,5,14,13,12,21,22,23}。 //z 軸方向中間一層 const BYTE
點擊復制文檔內(nèi)容
醫(yī)療健康相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1