WEEK05 2019/3/21
主題: 旋轉(Rotation) glRotatef
開啟範例
開啟範例
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;///宣告
t 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;
t 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;
t 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)
沒有留言:
張貼留言