
先測試滑鼠事件
程式碼:
#include <math.h>
#include <GL/glut.h>
#include <stdio.h>///printf()
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(void)
{
glutSolidTeapot(0.3);
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("04160391");
glutDisplayFunc(display);
glutMouseFunc(mouse);///test the mouse func
///glutMotionFunc(motion);
glutMainLoop();
}

利用滑鼠點按改變顏色
部分新增程式碼:
void mouse(int button,int state,int x,int y)
{///This is mouse function
printf("%d %d %d %d\n",button,state,x,y);
glColor3f(1,x/300.0,y/300.0);
glutPostOverlayRedisplay();///display()
}
void display(void)
{
glutSolidTeapot(0.3);
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("04160391");
glutDisplayFunc(display);
glutMouseFunc(mouse);///test the mouse func
///glutMotionFunc(motion);
glutMainLoop();
}

同時利用滑鼠拖曳改變顏色
部分新增程式碼:
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 motion(int x,int y)
{///Now motion
printf("%d %d\n",x,y);
glColor3f(1,x/500.0,y/500.0);
glutPostOverlayRedisplay();///display()
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowSize(500,500);
glutCreateWindow("04160391");
glutDisplayFunc(display);
glutMouseFunc(mouse);///test the mouse func
glutMotionFunc(motion);///Now drag
glutMainLoop();
}
畫出圓
程式碼:
#include <GL/glut.h>
#include <math.h>
#include <stdio.h>///printf()
void mouse(int button,int state,int x,int y)
{///This is mouse function
if(state==GLUT_DOWN) printf("glvertex2f(%.2f,%.2f);\n",(x-250)/250.0,-(y-250.0));
///改成這行程式可用滑鼠寫程式
}
void motion(int x,int y)
{///Now motion
printf("%d %d\n",x,y);
glColor3f(1,x/500.0,y/500.0);
glutPostOverlayRedisplay();///display()
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glBegin(GL_POLYGON);///POLYGON可以改成別的型態LINE等等
for(float angle=0;angle<3.14159*2;angle+=0.001)
{
glVertex2f(cos(angle),sin(angle));
}
glEnd();
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowSize(500,500);
glutCreateWindow("04160391");
glutDisplayFunc(display);
glutMouseFunc(mouse);///test the mouse func
glutMotionFunc(motion);///Now drag
glutMainLoop();
}


沒有留言:
張貼留言