1.安裝freeglut 拉到桌面 ,改lib 內檔名為libglut32.a
2.打開Codeblocks 新增專案 week03_mouse
3.10行程式貼上
4.加上mouse 的程式
5.執行程式就會出現茶壺,點滑鼠就會有Hello World

2..將 printf("Hello World\n");
更改成 printf("%d %d %d %d\n",button,state,x,y);
執行 就會有滑鼠位子和座標
程式碼:
#include <GL/glut.h>
#include <stdio.h>
void display()
{
glutSolidTeapot(0.3);
glutSwapBuffers();
}
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_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week03 mouse");
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMainLoop();
}
3.把void mouse (int button,int state,int x,int y){}裡面新增if(state==GLUT_DOWN){
printf("glVertex2f(%d-150)/150.0,-(%d-150)/150.0\n",x,y);
}就會有座標了
程式碼:
#include <GL/glut.h>
#include <stdio.h>
void display()
{
glutSolidTeapot(0.3);
glutSwapBuffers();
}
void mouse (int button,int state,int x,int y)
{
if(state==GLUT_DOWN){
printf("glVertex2f(%d-150)/150.0,-(%d-150)/150.0\n",x,y);
}
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week03 mouse");
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMainLoop();
}
4.滑鼠點哪 茶壺跟著移動
程式碼:
#include <GL/glut.h>
#include <stdio.h>
float teapotX=0,teapotY=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glTranslatef(teapotX,teapotY,0);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
}
void mouse (int button,int state,int x,int y)
{
teapotX = (x-150)/150.0;
teapotY = -(y-150)/150.0;
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week03 mouse glTranslatef");
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMainLoop();
}
5.茶壺可以轉動
新增角度 和 motions程式碼
程式碼:
#include <GL/glut.h>
#include <stdio.h>
float teapotX=0,teapotY=0;
float angle = 0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
///glTranslatef(teapotX,teapotY,0);
glRotatef(angle,0,0,1);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
}
void mouse (int button,int state,int x,int y)
{
teapotX = (x-150)/150.0;
teapotY = -(y-150)/150.0;
}
void motion(int x,int y)
{
angle = x;
display();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week03 mouse glTranslatef");
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutMainLoop();
}
6.可以轉動移位置程式碼:
#include <GL/glut.h>
#include <stdio.h>
float teapotX=0,teapotY=0;
float angle = 0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glTranslatef(teapotX,teapotY,0);
glRotatef(angle,0,0,1);
glutSolidTeapot(0.3);
glPopMatrix();
glutSwapBuffers();
}
int method=1;
int oldX=0,oldY=0;
void mouse (int button,int state,int x,int y)
{
///teapotX = (x-150)/150.0;
///teapotY = -(y-150)/150.0;
oldX=x;
oldY=y;
}
void motion(int x,int y)
{
if(method==1){
angle+=x-oldX;
}else if(method==2){
teapotX+=(x-oldX)/150.0;
teapotY-=(y-oldY)/150.0;
}
oldX=x;
oldY=y;
display();
}
void keyboard(unsigned char key,int x,int y)
{
if(key=='e')method=1;
if(key=='w')method=2;
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week03 mouse glTranslatef");
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutKeyboardFunc(keyboard);
glutMainLoop();
}





沒有留言:
張貼留言