-
[OpenGL] call back 함수 | 키보드, 마우스 입력 받기Programming Language/OpenGL 2017. 3. 21. 12:11반응형
Call Back 함수란 입력에 따라 해야 할 동작이 있을 때 사용된다. 사용자의 입력이 있을 때, 알려주어 해당 동작을 수행하기 위해서 사용된다.
예를 들어 마우스 왼쪽 버튼을 누를 때, 또는 ESC 키를 누를 때에 어떤 동작을 해야한다면, 사용자가 마우스를 누를 때, 또는 키보드를 눌렀을 때 알려주는 함수이다.
자세한 설명은 https://www.opengl.org/resources/libraries/glut/spec3/node45.html 에 있다.
종류는 다음과 같다.
- 7.1 glutDisplayFunc
- 7.2 glutOverlayDisplayFunc
- 7.3 glutReshapeFunc
- 7.4 glutKeyboardFunc
- 7.5 glutMouseFunc
- 7.6 glutMotionFunc, glutPassiveMotionFunc
- 7.7 glutVisibilityFunc
- 7.8 glutEntryFunc
- 7.9 glutSpecialFunc
- 7.10 glutSpaceballMotionFunc
- 7.11 glutSpaceballRotateFunc
- 7.12 glutSpaceballButtonFunc
- 7.13 glutButtonBoxFunc
- 7.14 glutDialsFunc
- 7.15 glutTabletMotionFunc
- 7.16 glutTabletButtonFunc
- 7.17 glutMenuStatusFunc
- 7.18 glutIdleFunc
- 7.19 glutTimerFunc
예를 들어 캐릭터를 키보드 방향키로 움직이게 하는 코드는 다음과 같다.
먼저, main 함수에서
glutSpecialFunc(spckeycallback);
를 선언해준 뒤,
spckeycallback을 다음과 같이 구현한다.
각각 숫자 101, 103, 100, 102는 상하좌우 방향키를 나타내는 character이다.
void spckeycallback(int key, int x, int y){
//키보드 콜백함수
//키보드 입력에 따라 카메라 위치를 변화시킴
if (key == 100){//left direction key
printf("←");
LookAt_viewerPos_x -= 5.0f;
LookAt_viewerDir_x -= 5.0f;
}
if (key == 102){//right direction key
printf("→");
LookAt_viewerPos_x += 5.0f;
LookAt_viewerDir_x += 5.0f;
}
if (key == 101){//forward
printf("↑");
LookAt_viewerPos_z -= 5.0f;
LookAt_viewerDir_z -= 5.0f;
}
if (key == 103){//backward
printf("↓");
LookAt_viewerPos_z += 5.0f;
LookAt_viewerDir_z += 5.0f;
}
}
또는, 단순히 GLUT에서 제공하는 special key를 나타내는 예약어를 사용하면 된다.
void spckeycallback(int key, int x, int y){
//키보드 콜백함수
//키보드 입력에 따라 카메라 위치를 변화시킴
if (key == GLUT_KEY_LEFT){//left direction key
printf("←");
LookAt_viewerPos_x -= 5.0f;
LookAt_viewerDir_x -= 5.0f;
}
if (key == GLUT_KEY_RIGHT){//right direction key
printf("→");
LookAt_viewerPos_x += 5.0f;
LookAt_viewerDir_x += 5.0f;
}
if (key == GLUT_KEY_UP){//forward
printf("↑");
LookAt_viewerPos_z -= 5.0f;
LookAt_viewerDir_z -= 5.0f;
}
if (key == GLUT_KEY_DOWN){//backward
printf("↓");
LookAt_viewerPos_z += 5.0f;
LookAt_viewerDir_z += 5.0f;
}
}
References
https://www.opengl.org/resources/libraries/glut/spec3/node45.html
https://www.opengl.org/discussion_boards/showthread.php/133533-what-is-call-back-function
반응형'Programming Language > OpenGL' 카테고리의 다른 글
[Visual Studio] OpenGL 프로젝트 생성하기 (0) 2017.04.10 [OpenGL] glFrustum (0) 2017.03.28 [OpenGL] gluUnProject (0) 2017.03.28 [Graphics] Z-buffer algorithm | rasterization (0) 2017.03.21 [OpenGL] glViewport (0) 2017.03.21