2019年3月21日 星期四

06160494。電腦圖學-Rotation

(0)預備工作:
檔案網址:http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/
  1. 下載:WIN32DATAGLUT32.DLL
    壓縮在同一個資料夾(WINDOWS要包含DATAGLUT32.DLL)


需要FREEGLUT-MINGW.ZIP檔案。可以在FREEGLUT WINDOW的網站中找到。
Download
freeglut 3.0.0 for MinGW壓縮檔案,在LIB裡面複製LIBFREEGLUT,貼上改成LIBGLUT32。
開啟CODEBLOCK。FILE(左上角)->NEW->PROJECT->GLUT PROJECT->(命名檔案)->下一步->路徑改成FREEGLUT資料夾的路徑。.

(1)主題:旋轉~ROTATION~

xyz代表著三軸。在參數裡面代表著,以(x)軸為固定,進行的轉動。


(2)實作:
  1. ///glrotatef()
#include<GL/glut.h>
float angle=0;///等等自動轉動用的變數
void display(){
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glPushMatrix();///保護MATRIX
        glRotated(angle,0,1,0);
        glutSolidTeapot(0.3);
    glPopMatrix();///POP還原MATRIX
    glutSwapBuffers();
    angle+=3;///更改角度
}
int main(int argc,char **argv){
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("WEEK5 ROTATE");
    glutDisplayFunc(display);
    glutIdleFunc(display);///今天新教的,用處!閒置時更新
    glutMainLoop();
    ///GL基礎 GLUT特別的
}







(3)
  1. 滑鼠轉,自動轉
    1. 滑鼠
      1. A:
                                       void motion(int x , int y){
                                             //當滑鼠去DRAG MOTION動作時
                                               angle=x;
                                                 display();
                                                 }
                                                 MAIN(){ glutMotionFunc(motion);}
              1. 自動
                1. 1
            (4)
            完整版本!
            (滑鼠)
            #include<GL/glut.h>
            #include<stdio.h>
            float angle=0;///等等自動轉動用的變數
            void display(){
                glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
                glPushMatrix();///保護MATRIX
                    glRotated(angle,0,1,0);
                    glutSolidTeapot(0.3);
                glPopMatrix();///POP還原MATRIX
                glutSwapBuffers();
                //angle+=3;///更改角度
            }
            void motion(int x , int y){
                //當滑鼠去DRAG MOTION動作時
                angle=x;
                display();

            }
            void mouse(int button,int state,int x,int y){
                printf("%d %d %d %d\n",button,state,x,y);///讀滑鼠點下去與彈起來的值

            }
            int main(int argc,char **argv){
                glutInit(&argc,argv);
                glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
                glutCreateWindow("WEEK5 ROTATE");

                glutDisplayFunc(display);
                glutIdleFunc(display);///今天新教的,用處!閒置時更新
                glutMotionFunc(motion);

                glutMouseFunc(mouse);

                glutMainLoop();
                ///GL基礎 GLUT特別的
            }


            (自動)

            沒有留言:

            張貼留言