Rotate
下載 [data][win32][glut32.dll]
解壓縮後將 [data][glut32.dll]加入 [windows]
打開 [Transformation] 檔案
右鍵選擇Al
就會出現下圖
依照右手安培定則👍
當x為1.0時 即為轉動軸
轉動為垂直上下旋轉
當Y為1.0時 即為轉動軸
轉動為左右水平旋轉
當Z為1.0時 即為轉動軸
按照以往的方式打開GLUT檔案
加入程式碼
執行後可以得到跟著滑鼠移動的圖形
之後開始做新茶壺😋
#include <GL/glut.h>
float myAngle=0;///宣告角度變數
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);///清畫面
glPushMatrix();
glRotatef(myAngle,0,0,1);///對z軸做旋轉
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
}
void motion(int x, int y)
{
myAngle=x;///我的角度,等等拿來用
display();///每次做動作就重新畫畫面
}
int main(int argc,char ** argv)
{
glutInit( &argc,argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week04");
glutMotionFunc(motion);///加motion函式
glutDisplayFunc(display);
glutMainLoop();
}
和以往不同的地方是可以跟著滑鼠轉動
但是他會從按住的地方開始移動
沒辦法固定住停止的位置後, 再次增加位置
所以更改一下程式碼
#include <GL/glut.h>
float myAngle=0;///宣告角度變數
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);///清畫面
glPushMatrix();
glRotatef(myAngle,0,0,1);///對z軸做旋轉
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
}
int oldX=0;///宣告變數
void mouse(int button,int state,int x,int y)
{
if(state==GLUT_DOWN) oldX=x;///按下後記住位置
}
void motion(int x, int y)
{
myAngle+=(x-oldX);///移動距離增加多少度
oldX=x;///最後新的位置變為舊位置
display();///每次做動作就重新畫畫面
}
int main(int argc,char ** argv)
{
glutInit( &argc,argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week04");
glutMotionFunc(motion);///加motion函式
glutMouseFunc(mouse);///記得增加mouse函式
glutDisplayFunc(display);
glutMainLoop();
}
所以更改後
就可以在移動後停止
停止後也能繼續從原本的位置開始移動












沒有留言:
張貼留言