2019年3月21日 星期四

06160150_蔡宗芸 W5

電腦圖學 2019-03-21 Week05

(1).主題 : 旋轉 Rotation
(2).示範 : glRotatef()
(3).滑鼠轉 . 自動轉

(一)與上週一樣
先到http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/下載3個並且解壓縮

把data和glut32.dll丟到windows裡面


(二)試用glRotatef(角度 , x軸 , y軸 , z軸 )



(三)讓茶壺自動轉

#include <GL/glut.h>
float angle=0;
void display()
{                                                          ////沒有使用glClear()去清理畫面,會有殘影
    glClear(GL_COLOR_BUFFER_BIT |GL_DEPTH_BUFFER_BIT);
    glPushMatrix();                             ////push備份保護Matrix
        glRotatef(angle,0,1,0);             ////對y軸,轉angle度
        glutSolidTeapot( 0.3 );            ////畫實心的茶壺
    glPopMatrix();                           ////Pop還原Matrix
    glutSwapBuffers();                   ////最後buffer做交易秀出
    angle+=3;                                ////每次執行道這行,才加一點點
}
int main(int argc,char**argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("06160150-W5");
    glutDisplayFunc(display);
    glutIdleFunc(display);    ////今天新教!!!Idle閒閒沒事,就重畫
    glutMainLoop();
}






(三)讓茶壺跟著滑鼠轉動

#include <GL/glut.h>
float angle=0;
void display()
{                                                              ////沒有使用glClear()去清理畫面,會有殘影
    glClear(GL_COLOR_BUFFER_BIT |GL_DEPTH_BUFFER_BIT);
    glPushMatrix();                                  ////push備份保護Matrix
        glRotatef(angle,0,1,0);                  ////對y軸,轉angle度
        glutSolidTeapot( 0.3 );                 ////畫實心的茶壺
    glPopMatrix();                                 ////Pop還原Matrix
    glutSwapBuffers();                         ////最後buffer做交易秀出
}
void motion(int x,int y)
{                                       ////當你mouse去drag做motion動作時
    angle=x;                      ////現在新加的!!
    display();                    ////現在新加的!!
}
int main(int argc,char**argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("06160150-W5");
    glutDisplayFunc(display);
    glutIdleFunc(display);                                 ////今天新教!!!Idle閒閒沒事,就重畫
    glutMotionFunc(motion);                          ////現在新加的!!
    glutMainLoop();
}



(四)讓茶壺跟著滑鼠轉動

#include <GL/glut.h>
float angle=0;
void display()
{                                                              ////沒有使用glClear()去清理畫面,會有殘影
    glClear(GL_COLOR_BUFFER_BIT |GL_DEPTH_BUFFER_BIT);
    glPushMatrix();                                  ////push備份保護Matrix
        glRotatef(angle,0,1,0);                  ////對y軸,轉angle度
        glutSolidTeapot( 0.3 );                 ////畫實心的茶壺
    glPopMatrix();                                 ////Pop還原Matrix
    glutSwapBuffers();                         ////最後buffer做交易秀出
}
void motion(int x,int y)
{                                       ////當你mouse去drag做motion動作時
    angle=x;                      ////現在新加的!!
    display();                    ////現在新加的!!
}
#include <stdio.h>
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("06160150-W5");
    glutDisplayFunc(display);
    glutIdleFunc(display);                                 ////今天新教!!!Idle閒閒沒事,就重畫
    glutMouseFunc(mouse);                         ////現在新加的!!
    glutMainLoop();
}








沒有留言:

張貼留言