GameDesign 板


LINE

在寫程式的過程我不斷遇到對單一軸旋轉另兩軸跟著轉的問題 也就是 glRotatef( angle, x,y,z ); 這個函數 轉glRotatef( 90, 1,0,0 ); 後,y軸和z軸 也一起對x軸轉了九十度 所以之後y z的轉動就不是原本坐標軸的y和z了。 上次發問後有個人推薦我去看一篇為平衡環鎖的文章 http://www.programmer-club.com.tw/ShowSameTitleN/opengl/2000.html 以上為網址,照跑出來的的確是我想要的結果,但我看不太懂。 -------------------網頁上的程式碼-------------------------- #include <stdio.h> #include <stdlib.h> #include <string.h> #include <GL/glut.h> float mo[16]; void init_mo(); void update_mo( float angle, float x, float y, float z ); void display(); void keyboard( unsigned char key, int x, int y ); void main( int argc, char **argv ) { glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH ); glutInitWindowSize( 512, 512 ); glutCreateWindow( "gimbal_lock" ); glutDisplayFunc( display ); glutKeyboardFunc( keyboard ); init_mo(); glutMainLoop(); } void display() { GLint viewport[4]; glGetIntegerv( GL_VIEWPORT, viewport ); glEnable( GL_DEPTH_TEST ); glEnable( GL_LIGHTING ); glEnable( GL_LIGHT0 ); glClearColor( .1, .2, .3, 1 ); glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective( 45, double(viewport[2])/viewport[3], 0.1, 10 ); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt( 0,0,3, 0,0,0, 0,1,0 ); glMultMatrixf(mo); glutSolidTeapot(.7); glutSwapBuffers(); } 這是為什麼目的存在的? 怎麼用? void init_mo() { memset( mo, 0, sizeof(mo) ); mo[0]=mo[5]=mo[10]=mo[15]=1; glutPostRedisplay(); } 這個函數的作用? 為什麼這樣寫? void update_mo( float angle, float x, float y, float z ) { glPushMatrix(); glLoadIdentity(); glRotatef( angle, x,y,z ); glMultMatrixf(mo); //這行是做什麼? glGetFloatv( GL_MODELVIEW_MATRIX, mo ); //這行是做什麼? glPopMatrix(); glutPostRedisplay(); } 我知道push pop用來存取狀態 但到底狀態是什麼型態東西? push pop實際的的使用方式我也還是不懂,希望善心人士講解。 void keyboard( unsigned char key, int x, int y ) { switch( key ) { case 27: init_mo(); break; case '1': update_mo( -5, 1,0,0 ); break; case '2': update_mo( 5, 1,0,0 ); break; case '3': update_mo( -5, 0,1,0 ); break; case '4': update_mo( 5, 0,1,0 ); break; case '5': update_mo( -5, 0,0,1 ); break; case '6': update_mo( 5, 0,0,1 ); break; } } ------------------------------------------------------ 或是有什麼其他的解決方法也請多指教, 希望可以指教的詳細一點,拜託大家了。 -- 郵差又來送羊奶了 --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.160.90.37 ※ 編輯: prjryu 來自: 118.160.90.37 (05/16 05:08)
1F:推 Bencrie:init_mo是把mo這個矩陣初始化成Identity 05/16 08:52
2F:→ Bencrie:update_mo只是利用OpenGL算旋轉矩陣並且存到mo 05/16 08:54
3F:→ Bencrie:glMultMatrix() 把目標矩陣跟現在的矩陣相乘 05/16 08:55
4F:→ Bencrie:glGetFloatv是從OpenGL狀態機拿出某些float資料,程式中 05/16 08:56
5F:→ Bencrie:是取Modelview矩陣。 05/16 08:57
6F:→ Bencrie:push跟pop是堆疊的操作,在OpenGL裡有所謂的矩陣堆疊, 05/16 08:58
7F:→ Bencrie:也就是說所有的存取單位是一個矩陣。如果你不知道堆疊是 05/16 08:59
8F:→ Bencrie:什麼,請翻閱你的資料結構課本。 05/16 08:59







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:e-shopping站內搜尋

TOP