
程式碼:
#include <GL/glut.h>
float myAngle=0;///宣告變數
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); ///清螢幕
glPushMatrix();
glRotatef(myAngle,0,0,1); ///旋轉
glutSolidTeapot(0.3); ///印出茶壺
glPopMatrix();
glutSwapBuffers();
}
void motion(int x,int y)
{
myAngle=x;///將角度設為x
display();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("GLUT 04 rotate");
glutMotionFunc(motion); ///滑鼠有動作時,執行此動作
glutDisplayFunc(display);
glutMainLoop();
}
但旋轉起來很麻煩...沒關係。我們可以設一個變數紀錄上一個位置

只需要在void display後面改成/加...
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; ///舊的x
display();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("GLUT 04 rotate");
glutMotionFunc(motion);
glutMouseFunc(mouse);
glutDisplayFunc(display);
glutMainLoop();
}
沒有留言:
張貼留言