Fascination
article thumbnail

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을 적용시켜야 함

 

reshape event

 

 

# 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)

  > 정규화

Coordinate Conversion

 

 

# 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
profile

Fascination

@euna-319

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!