Computer Graphics 3-2. OpenGL Event Handling
숙명여자대학교 컴퓨터 그래픽스 수업 - 유석종 교수님
# Display Event
- 최초 실행 시 윈도우 화면 생성 시에 호출됨
- 숨겨진 윈도우가 앞으로 나와 활성화 될 때
- glutPostRedisplay()에 호출됨으로써, 이벤트 레코드가 이벤트 큐 안에 들어감
- 디스플레이 콜백 함수 사용법
> main에서 호출
glutDisplayFunc(Mydisplay)
# Reshape Event
- Reshape event 발생 시
> 윈도우가 처음 생성될 때
> 윈도우가 움직일 때
> 윈도우의 사이즈가 변할 때: 윈도우 사이즈에 대한 데이터가 변환됨
- Reshape callback 함수
> 포인터 전달에 유의
glutReshapeFunc((*func)(width, height))
glutReshapeFunc(MyReshape)
> 새로운 높이와 너비의 비율을 곱함으로써 view vloume을 적용시켜야 함
# Keyboard Event
def myKey(key, x, y): # x, y: 예약된 변수
if key==b'r': # b: button / r: 키가 r
self.color = 'r'
elif key==b'g':
self.color = 'g'
glutPostRedisplay() # 디스플레이 함수가 불림
- main()안에 키보드 callback 등록 방법
glutKeyboardFunc(myKey)
# Mouse Event
glutMouseFunc(MyMouseClick) # mouse button click event, 버튼이 클릭되었을 때 event 전달
glutMotionFunc(MyMouseMove) # mouse Motion event , 새로운 좌표 전달
glutMotionFunc() # ex) Free drawing
glutMotionFunc() # 버튼이 눌리지 않을 동안
def MyMouseClick(button, state, x, y):
if button==GLUT_LEFT_BUTTON and state == GLUT_DOWN
# GLUT_LEFT_BUTTON: 상수화 정의 / GLUT_DOWN or GLUT_UP: 버튼을 눌렀는가 혹은 눌렀다가 뗐는가?
topLeftx = x
topLefty = y # 눌린 곳의 좌표
def MyMouseMove(x,y)
BottomRightx = x
BottomRighty = y
glutPostRedisplay() # 클릭하며 그린 선의(점들의) 좌표를 계속 화면에 보냄
# Coordinate Conversion
- coordinate conversion: GLUT → GL → View Volume (범위 지정)
- Mouse position (GLUT coord): (x, y)
- Screen position (CL coord): (x, 300-x)
- View volume position(0.0~1.0): (0.0~1.0): (x/300.0, (300-y)/300.0)
> 정규화
# Menu Callback
# Timer Callback
'Study > Computer Graphics' 카테고리의 다른 글
[CG] 5. Projection (0) | 2021.10.19 |
---|---|
[CG] 4. Geometry Transformation (0) | 2021.10.13 |
[CG] 3-1. Graphic Library (0) | 2021.10.06 |
[CG] 2-2. Color Models (0) | 2021.10.04 |
[CG] 2-1. Graphics System (0) | 2021.09.20 |