作者NDark (K1下次要买摇滚区)
看板GameDesign
标题Re: [程式] glut转动问题
时间Sat May 16 11:42:14 2009
※ 引述《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
1F:→ NDark:至於opengl几何学的其他问题,请另外洽询家教费用XD 05/16 11:43