2020年3月24日 星期二

week04

這次要來研究如何旋轉一個茶壺

程式碼:
#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();
}


沒有留言:

張貼留言