點圖標出座標
1. 打開之前的GLUT檔案
2. 加入mouse函式
#include <GL/glut.h>
#include <stdio.h>///因為
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutSolidTeapot(0.3);
glutSwapBuffers();
}
void mouse(int button, int state, int x, int y)
{ ///左、右、中建 下、上 座標X、Y
printf("button:%d state:%d x:%d y:%d\n", button,state,x,y);
///印出值並觀察
}
int main(int argc, char ** argv)
{
glutInit( &argc, argv );
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("08160173張淳雅O.O");
glutDisplayFunc(display);
glutMouseFunc(mouse);///註冊mouse函式
glutMainLoop();
}
試著畫圖!!!
1. 加入motion函式,記錄滑鼠移動的座標
#include <GL/glut.h>
#include <stdio.h>///因為要printf()
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutSolidTeapot(0.3);
glutSwapBuffers();
}
void mouse(int button, int state, int x, int y)
{
printf("button:%d state:%d x:%d y:%d\n", button,state,x,y);
}
void motion(int x, int y)///mouse motion 在拖動它
{
printf("glVertex2f( %f, %f);\n", (x-150)/150.0, -(y-150)/150.0);
} ///減一半再除一半 減一半再除一半,加負號
int main(int argc, char ** argv)
{
glutInit( &argc, argv );
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("08160173張淳雅O.O");
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMotionFunc(motion);///mouse motion
glutMainLoop();
}
2. 畫出線
#include <GL/glut.h>
int N=0, vx[3000], vy[3000];
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_LINE_LOOP);
for (int i=0; i<N; i++)
{
glVertex2f((vx[i]-150)/150.0, -(vy[i]-150)/150.0);
} ///減一半再除一半 減一半再除一半,加負號
glEnd();
glutSwapBuffers();
}
void motion(int x, int y)
{
vx[N]=x; vy[N]=y;///把vx,vy的值存起來
N++;
display();///邊動mouse motion, 邊畫display()
}
int main(int argc, char ** argv)
{
glutInit( &argc, argv );
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("08160173張淳雅O.O");
glutDisplayFunc(display);
glutMotionFunc(motion);
glutMainLoop();
}



沒有留言:
張貼留言