GLFW Input Handling
<pre>glfw.poll_events()</pre>
이미 들어와있는 이벤트들을 처리하고 바로 return 한다.
처리란? 각 이벤트들에 대해 사용자가 등록해놓은 callback 함수를 호출한다.
이벤트 종류와 Callback using
Event type | Callback using |
키보드 눌림 Key input |
glfw.set_key_callback() |
마우스 움직임 Mouse cursor position |
glfw.set_cursor_pos_callback() glfw.get_cursor_pos() : 현재의 마우스 커서 위치를 반환해줌 움직일때마다 사용하는 것이 아니라 필요할 때마다 받아서 사용할 수 있음. |
마우스 버튼 Mouse button |
glfw.set_mouse_button_callback() |
마우스 스크롤 Mouse scroll |
glfw.set_scroll_callback() |
※ 각 이벤트 별 callback 함수의 argumnets는 document를 확인해야 한다.
예제
키보드 눌림 이벤트 callback 함수
def key_callback(window, key, scancode, action, mods):
if key == glfw.KEY_A:
if action == glfw.PRESS:
print('press a')
elif action == glfw.RELEASE:
print('release a')
elif action == glfw.REPEAT:
print('repeat a')
elif key == glfw.KEY_SPACE and action == glfw.PRESS:
print('press space: (%d, %d)' % glfw.get_cursor_pos(window))
마우스 커서 움직임 이벤트 callback 함수
def cursor_callback(window, xpos, ypos):
print('mouse cursor moving: (%d, %d)' % (xpos, ypos))
마우스 버튼 움직임 이벤트 callback 함수
def button_callback(window, button, action, mod):
if button == glfw.MOUSE_BUTTON_LEFT:
if action == glfw.PRESS:
print('press left btn: (%d, %d)' % glfw.get_cursor_pos(window))
elif action == glfw.RELEASE:
print('release left btn: (%d, %d)' % glfw.get_cursor_pos(window))
마우스 스크롤 움직임 이벤트 callback 함수
def scroll_callback(window, xoffset, yoffset):
print('mouse wheel scroll: %d, %d' % (xoffset, yoffset))
callback 함수 적용
glfw.set_key_callback(window, key_callback)
glfw.set_cursor_pos_callback(window, cursor_callback)
glfw.set_mouse_button_callback(window, button_callback)
glfw.set_scroll_callback(window, scroll_callback)
참고
본 포스트는 한양대학교 이윤상 교수님의 수업을 정리한 내용입니다.
출처: 한양대학교 이윤상 교수님 컴퓨터그래픽스 강의 강의자료 - https://cgrhyu.github.io/courses/2022-spring-cg.html
GLFW document in C : http://www.glfw.org/documentation.html
GLFW의 python 적용 (from C)
- 함수 이름의 변화 : camelCase → words_width_undersocres
- prefix가 사라짐
- return 변화 : glfwGetMonitors와 같은 함수가 포인터나 object count 대신 list를 return
- 더 자세한 내용 : https://pypi.python.org/pypi/glfw
'Computer Science > Computer Graphics' 카테고리의 다른 글
Transformation in 3D (0) | 2021.03.16 |
---|---|
Transformation in 2D (0) | 2021.03.16 |
[OpenGL] Vertex의 기본 (0) | 2021.03.12 |
[OpenGL] OpenGL이란? (0) | 2021.03.10 |
[GLFW][실습] import GLFW 에러 해결 방법 (Failed to load GLFW3 shared library.) (0) | 2021.03.09 |
댓글