這週會新增鍵盤的相關程式
新增一個OpenGL專案,將main.cpp的程式碼全刪掉,換成以下的:
#include <GL/glut.h>
#include <stdio.h>
void display()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1,1,0);
glutSolidTeapot(0.3);
glutSwapBuffers();
}
void keyboard(unsigned char key,int x,int y)
{
printf("button %c at %d,%d\n",key,x,y);
}
int main(int argc, char**argv)
{
glutInit( &argc, argv);
glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week03_1");
glutDisplayFunc( display );
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}
本週的重點是keyboard:
紅: 事件宣告,跟之前的glutDisplayFunc(display); 及glutMotionFunc(mouse);很相似。
綠: 此座標是以視窗最左上角為基準。藍: <stdio.h>可以每個變數現在的數值顯示在視窗裡面。很適合拿來偵錯。
順便一提,按下按鍵的符號請用%c顯示,如果是%d則會顯示他的ASCII碼。(A=65,B=66,C=67,a=97,b=98,c=99...)
如果想要同使使用鍵盤,滑鼠等功能,就需要宣告多項函式。
void keyboard(unsigned char key,int x,int y)
{
}
void mouse(int button, int state, int x, int y)
{
}
void motion(int x, int y)
{
}
#include <GL/glut.h>
#include <stdio.h>
float shapesize=0.3;
void display()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1,1,0);
glutSolidTeapot(shapesize);
glutSwapBuffers();
}
void keyboard(unsigned char key,int x,int y)
{
printf("button %c at %d,%d\n",key,x,y);
}
void mouse(int button, int state, int x, int y)
{
if(button==3&&state==0)shapesize+=0.1;
else if(button==4&&state==0)shapesize-=0.1;
display();
printf("button %d %d at %d,%d\n",button,state,x,y);
}
void motion(int x, int y)
{
}
int main(int argc, char**argv)
{
glutInit( &argc, argv);
glutInitDisplayMode( GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week06_1");
glutDisplayFunc( display );
glutKeyboardFunc(keyboard);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutMainLoop();
return 0;
}


沒有留言:
張貼留言