今天要交的是滑鼠移動,以上星期的茶壺作為基礎來做變化
1. 製作出上星期的茶壺
程式碼:
#include <GL/glut.h>
void display()
{
glutSolidTeapot(0.3); //做茶壺
glutSwapBuffers();
}
int main(int argc,char*argv[])
{
glutInit( &argc,argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); //出現3D繪圖(顏色/ 雙記憶體)
glutCreateWindow("04160152 CCE 1 "); //製作一個視窗,後方字串為名稱
glutDisplayFunc(display); //呼叫display函式
///glutMouseFunc(mouse); //滑鼠事件
///glutMotionFunc(motion);
glutMainLoop(); //迴圈
}
2.開始製作滑鼠事件
///按下滑鼠時state為"0",彈起來為"1",x&y為滑鼠的座標
程式碼:
#include <math.h>
#include <stdio.h> ///printf()
#include <GL/glut.h>
void mouse(int button, int state , int x, int y)
{
/// This is mouse function
printf("%d %d %d %d\n", button, state ,x ,y);
}
void display()
{
glutSolidTeapot(0.3);
glutSwapBuffers();
}
int main(int argc,char*argv[])
{
glutInit( &argc,argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("04160152 CCE 1 ");
glutDisplayFunc(display);
glutMouseFunc(mouse); ///測試 mouse func
///glutMotionFunc(motion);
glutMainLoop();
}
3.滑鼠按下時改變顏色
程式碼:
#include <math.h>
#include <stdio.h> ///printf()
#include <GL/glut.h>
void mouse(int button, int state , int x, int y)
{
/// This is mouse function
printf("%d %d %d %d\n", button, state ,x ,y);
///按下滑鼠時state為0,放開為1,x&y為滑鼠的座標
glColor3f(1 ,x/300.0 ,y/300.0);
///召喚顏色,(紅 , 綠 , 藍)
glutPostRedisplay();
}
void display()
{
glutSolidTeapot(0.3);
glutSwapBuffers();
}
int main(int argc,char*argv[])
{
glutInit( &argc,argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("04160152 CCE 1 ");
glutDisplayFunc(display);
glutMouseFunc(mouse); ///測試mouse func
///glutMotionFunc(motion);
glutMainLoop();
}
4. 當拖曳滑鼠時,茶壺的顏色跟著改變
程式碼:
#include <math.h>
#include <stdio.h> ///printf()
#include <GL/glut.h>
void mouse(int button, int state , int x, int y)
{
/// This is mouse function
printf("%d %d %d %d\n", button, state ,x ,y);
///按下滑鼠時state為0,放開為1,x&y為滑鼠的座標
}
void motion(int x,int y)
{ ///Now motion
printf("%d %d\n", x, y);
glColor3f(1 ,x/500.0 ,y/500.0 );
///召喚顏色, 500 for window size
glutPostRedisplay();
}
void display()
{
glutSolidTeapot(0.3);
glutSwapBuffers();
}
int main(int argc,char*argv[])
{
glutInit( &argc,argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowSize(500, 500); ///視窗大小
glutCreateWindow("04160152 CCE 1");
glutDisplayFunc(display);
glutMouseFunc(mouse); ///測試mouse func
glutMotionFunc(motion); ///Now Drag
glutMainLoop();
}
沒有留言:
張貼留言