1. Mouse函式
#include <GL/glut.h>
#include <stdio.h>///為了printf()
void display()
{
glutSolidTeapot( 0.3 );
glutSwapBuffers();
}
void mouse(int button,int state,int x, int y)///mouse的函式
{///鍵:0左、1中、2右、0下、1上、 x:0~300、y:0~300
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("Week03");
glutDisplayFunc(display);
glutMouseFunc(mouse);///mouse的函式
glutMainLoop();
}
2.移動 glTranslatef(x,y,z)
#include <GL/glut.h>
#include <stdio.h>
float teapotX=0, teapotY=0;///用變數-1~+1表示座標
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)
{ /// x:0...150...300
///減150 -150 0 150
///除150.0 -1 0 +1
///變成 -1 0 +1
teapotX=(x-150)/150.0;///換算座標
teapotY=-(y-150)/150.0;///換算座標,小心y要加負號
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("Week03");
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMainLoop();
}
3.用Mouse來寫程式(描點畫圖)
#include <GL/glut.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_POLYGON);
glVertex2f((227-150)/150.0,-(132-150)/150.0);
glVertex2f((151-150)/150.0,-(115-150)/150.0);
glVertex2f((85-150)/150.0,-(141-150)/150.0);
glVertex2f((118-150)/150.0,-(188-150)/150.0);
glVertex2f((180-150)/150.0,-(186-150)/150.0);
glEnd();
glutSwapBuffers();
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("Week03");
glutDisplayFunc(display);
glutMainLoop();
}
#include <GL/glut.h>
#include <math.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_POLYGON);
for(float angle=0; angle<=3.14159*2; angle+=0.01)
{
glVertex2f(cos(angle),sin(angle));
}
glEnd();
glutSwapBuffers();
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("Week03");
glutDisplayFunc(display);
glutMainLoop();
}




沒有留言:
張貼留言