본문 바로가기
Computer Science/Computer Graphics

[GLFW] Input handling

by Gofo 2021. 3. 13.

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

 

CGR LAB

Computer Graphics - 2022 Spring Instructor: Yoonsang Lee Teaching Assistant: Chaejun Sohn Undergraduate Mentor: Bokyoung Jang Time / Location: Mon 09:00-11:00 / Online (originally 207 IT.BT Building) - Lab Wed 09:00-11:00 / 508 IT.BT Building - Lecture Cou

cgrhyu.github.io

 

GLFW document in C : http://www.glfw.org/documentation.html

 

Documentation

GLFW API documentation.

www.glfw.org

 

GLFW의 python 적용 (from C)

  • 함수 이름의 변화 : camelCase → words_width_undersocres
  • prefix가 사라짐
  • return 변화 : glfwGetMonitors와 같은 함수가 포인터나 object count 대신 list를 return
  • 더 자세한 내용 : https://pypi.python.org/pypi/glfw
 

glfw

A ctypes-based wrapper for GLFW3.

pypi.org

 

 

 

댓글