→ NDark:至於opengl幾何學的其他問題,請另外洽詢家教費用XD 05/16 11:43
※ 引述《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