*鍵盤、滑鼠
1.複習上禮拜教的點線面顏色
2.互評HW2 上傳5張自己覺得很好的作業
3.
#include <GL/glut.h>///GLUT外掛
#include <stdio.h>
static void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);///清畫面
glutSolidTeapot(0.3);///畫茶壺
glutSwapBuffers();
}
int main(int argc, char *argv[])///主要函式
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("05160080");
glutDisplayFunc(display);
/// glutMouseFunc(mouse);///mouse滑鼠事件
/// glutMouseFunc(motion);///mouse滑鼠的motion事件
glutMainLoop();
return EXIT_SUCCESS;
}
4.講解mouse事件
void mouse(int button,int state,int x,int y)
{
printf("%d %d %d %d\n",button, state, x,y);
///button左中右鍵 state按下去/彈起來 xy mouse滑鼠位置
}
int main裡加glutMouseFunc(mouse);///mouse滑鼠事件
5.用滑鼠去按茶壺的位置
void mouse(int button,int state,int x,int y)
{
if(state==GLUT_DOWN)
printf(" glVertex2f(%f, %f);\n",(x-150)/150.0,(150-y)/150.0);
///button左中右鍵 state按下去/彈起來 xy mouse滑鼠位置
}
之後複製printf出來的glVertex2f
glVertex2f(0.200000, -0.253333);
glVertex2f(0.246667, -0.193333);
glVertex2f(0.273333, -0.133333);
glVertex2f(0.353333, -0.113333);
glVertex2f(0.380000, -0.046667);
glVertex2f(0.393333, 0.060000);
glVertex2f(0.480000, 0.126667);
glVertex2f(0.520000, 0.140000);
glVertex2f(0.420000, 0.140000);
glVertex2f(0.360000, 0.066667);
glVertex2f(0.340000, 0.020000);
glVertex2f(0.280000, -0.020000);
glVertex2f(0.220000, 0.133333);
glVertex2f(0.120000, 0.140000);
glVertex2f(0.046667, 0.146667);
glVertex2f(0.026667, 0.206667);
glVertex2f(0.053333, 0.246667);
glVertex2f(-0.066667, 0.246667);
glVertex2f(-0.040000, 0.200000);
glVertex2f(-0.180000, 0.153333);
glVertex2f(-0.233333, 0.126667);
glVertex2f(-0.246667, 0.100000);
把glutSolidTeapot(0.3);///畫茶壺 刪掉
前後加上下面程式
glBegin(GL_LINES);
glEnd();
6.讓茶壺跟著滑鼠移動
宣告兩個變數float teapotX=0,teapotY=0;
static void display(void)
{
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)
{
}
void motion(int x,int y)
{
teapotX=((x-150)/150.0);
teapotY=((150-y)/150.0);
glutPostRedisplay();
}
int main(int argc, char *argv[])///主要函式
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("05160080");
glutDisplayFunc(display);
glutMouseFunc(mouse);///mouse滑鼠事件
glutMotionFunc(motion);///mouse滑鼠的motion事件
glutMainLoop();
return EXIT_SUCCESS;
}
沒有留言:
張貼留言