2019年3月21日 星期四

林芷祺的筆記Week05

  WEEK05     2019/3/21

主題: 旋轉(Rotation)  glRotatef


開啟範例
1.重複上禮拜的動作,開啟http://www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10/

2.下載data,win32,glut32.dll (3個檔案)

 3.把window解壓縮

4.data的資料夾移至window

 5.glut32.dll也移至window

6.把Transformation.exe打開 (右上滑鼠右鍵切換圖形/ 鍵盤R回預設值)

註:  glRotatef(角度,X軸,Y軸,Z軸)(軸為正負方向:右手~)


GLUT專案:自動旋轉茶壺

7.重複上禮拜的動作,開啟glut專案(檔案位置記得存!!!!!!!!)

 8.搜尋freeglut window下載Download freeglut 3.0.0 for MinGW 

9.複製檔案位置 

 10.複製libfreeglut.a--->改成libglut32.a

11.把GLUT的main.cpp裡的程式全部刪掉,改成



#include <GL/glut.h>
float angle=0;///宣告
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///沒有clear()清除畫面會留殘影
    glPushMatrix();///備份矩陣
        glRotatef(angle, 0 ,1 ,0);///對Y軸轉angle角度
        glutSolidTeapot(0.3);
    glPopMatrix();///還原矩陣,不然會跑掉!!
    glutSwapBuffers();
    angle+=3;///每次執行加一點點
}
int main(int argc, char**argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("06160531_Week05!!");
    glutDisplayFunc(display);
    glutIdleFunc(display);/// Idle:重畫
    glutMainLoop();
}

12.執行程式



GLUT專案:滑鼠旋轉茶壺(1)
13.將程式改成

#include <GL/glut.h>
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///沒有clear()清除畫面會留殘影
    glPushMatrix();///備份矩陣
        glRotatef(angle, 0 ,1 ,0);///對Y軸轉angle角度
        glutSolidTeapot(0.3);
    glPopMatrix();///還原矩陣,不然會跑掉!!
    glutSwapBuffers();
    ///要刪掉!!不然會自動旋轉 angle+=3;///每次執行加一點點
}
void motion(int x,int y)///滑鼠控制

{

    angle=x;

    display();
}

int main(int argc, char**argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("06160531_Week05!!");
    glutDisplayFunc(display);
    glutIdleFunc(display);/// Idle:重畫
    glutMotionFunc(motion);///滑鼠控制
    glutMainLoop();
}

14.執行程式(用滑鼠拖曳)



GLUT專案:滑鼠旋轉茶壺(2)
15.改程式(新增滑鼠按下去、放開的程式)

#include <GL/glut.h>
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///沒有clear()清除畫面會留殘影
    glPushMatrix();///備份矩陣
        glRotatef(angle, 0 ,1 ,0);///對Y軸轉angle角度
        glutSolidTeapot(0.3);
    glPopMatrix();///還原矩陣,不然會跑掉!!
    glutSwapBuffers();
    ///要刪掉!!不然會自動旋轉 angle+=3;///每次執行加一點點
}
void motion(int x,int y)///滑鼠控制

{
     angle=x;///2.mouse motion移動
    display();
}
#include <stdio.h>
void mouse(int button, int state, int x, int y)///1.mouse按下去  3.mouse放開
{
    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("06160531_Week05!!");
    glutDisplayFunc(display);
    glutIdleFunc(display);/// Idle:重畫
    glutMotionFunc(motion);///滑鼠控制
    glutMouseFunc(mouse);///mouse
    glutMainLoop();
}


16.執行--->有四個數字
button:(滑鼠左鍵0、中鍵1、右鍵2、中鍵往前轉3、中鍵往後轉4)
state:(按下去0、放開1)
X和Y座標:(左上為0 ,0、右下為300,300)




沒有留言:

張貼留言