看板 GameDesign 關於我們 聯絡資訊
※ 引述《prjryu (橘)》之銘言: : 在寫程式的過程我不斷遇到對單一軸旋轉另兩軸跟著轉的問題 : 也就是 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 : 以上為網址,照跑出來的的確是我想要的結果,但我看不太懂。 : 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(); : } : ------------------------------------------------------ : 或是有什麼其他的解決方法也請多指教, : 希望可以指教的詳細一點,拜託大家了。 簡單來講.你要的就是一個簡單的trackball.也就是上述mo的實作. Trackball原本的功用就是依照目前滑鼠拖拉的方向算出轉軸, (以你的case就是你認為的世界座標系) 然後把旋轉乘入目前trackball的狀況(矩陣)來達到新的結果.再存回trackball 複雜一點的trackball實作就是一個簡易的3D編輯軟體, 可以對空間中的任一物件做三軸旋轉. google "opengl trackball"第三個link Implementing a Virtual Trackball http://www.cse.ohio-state.edu/~crawfis/Graphics/VirtualTrackball.html 中 "We need to apply the rotation as the last transformation" 的部份 是不是跟mo的寫法很類似? -- "May Balance be with U"(願平衡與你同在) 歡迎參觀 NDark的網站 http://vision.twbbs.org/~ndark/ NDark的MSN LIVE http://ndark.spaces.live.com/ *最新期待遊戲: Empire : Total War *最新專案 : 代客拼圖宣傳區 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.96.77.176
NDark:至於opengl幾何學的其他問題,請另外洽詢家教費用XD 05/16 11:43