[程式] glut轉動問題
在寫程式的過程我不斷遇到對單一軸旋轉另兩軸跟著轉的問題
也就是 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)
推
05/16 08:52, , 1F
05/16 08:52, 1F
→
05/16 08:54, , 2F
05/16 08:54, 2F
→
05/16 08:55, , 3F
05/16 08:55, 3F
→
05/16 08:56, , 4F
05/16 08:56, 4F
→
05/16 08:57, , 5F
05/16 08:57, 5F
→
05/16 08:58, , 6F
05/16 08:58, 6F
→
05/16 08:59, , 7F
05/16 08:59, 7F
→
05/16 08:59, , 8F
05/16 08:59, 8F
討論串 (同標題文章)
GameDesign 近期熱門文章
PTT遊戲區 即時熱門文章
14
20