Download presentation
Presentation is loading. Please wait.
1
학습목표 5장. 오픈지엘 기본틀 논리적 입력장치를 설정하는 이유와 종류를 이해한다. 세 가지 입력모드의 차이점을 이해한다.
GLUT 콜백함수의 종류와 사용법을 이해한다. GL의 화면 좌표계와 GLUT의 화면 좌표계 사이의 차이점을 이해한다. 더블 버퍼링의 필요성에 대해 이해한다. 정점 배열, 디스플레이 리스트의 필요성과 사용법을 이해한다.
2
Section 01 그래픽 입력장치-물리적 입력장치
마우스, 조이스틱, 트랙볼, 스페이스 볼 상대입력과 절대입력 타블렛, 스타일러스 펜 크로스 헤어 커서 디지타이징 터치 패널 광학 패널, 전기 패널 [그림 5-1-4] 마우스 조이스틱 트랙볼 스페이스볼 [그림 5-6] 타블렛 Ⅱ [그림 5-7] 광학 [그림 5-8] 전기
3
3D 스캐너 버튼 박스와 다이얼 물리적 입력장치 물체 표면의 X, Y, Z 좌표 인식 레이저 촬상소자(CCD)
버튼 박스: 매크로 기능 다이얼: 물체에 대한 기하변환 아날로그 방식 [그림 5-9] 3차원 스캔 작업 [그림 5-10] 레이저스캐너 [그림 5-11] 버튼 [그림 5-12] 다이얼
4
Section 01 그래픽 입력장치 -논리적 입력장치
입력을 논리적으로 취급 scanf("%d", &x); 키보드? 버튼박스? 물리적 입력장치가 바뀌어도 프로그램은 동일 좌표 입력기(Locator) 절대좌표 또는 상대좌표. 마우스, 키보드의 화살표 키, 트랙 볼 연속좌표 입력기(Stroke) 일련의 연속 좌표. 마우스, 태블릿 커서. 문자열 입력기(String) 문자열. 키보드. 스칼라 입력기(Valuator) 회전각, 크기조절 비율 등 스칼라 값. 키보드, 마우스, 다이얼 메뉴선택 입력기(Choice) 메뉴, 서브메뉴, 메뉴옵션 선택. 마우스, 키보드, 터치 패널, 음성 물체선택 입력기(Pick) 물체를 선택. 마우스나 터치 패널
5
메저와 트리거 Ex. 메저 프로세스 Section 02 입력 모드 - 입력 모드
메저(Measure): 응용프로그램에게 전달되는 입력값 트리거(Trigger): 전달하라는 신호 Ex. DIR <ENTER> 마우스 좌표와 클릭 선택된 메뉴 아이디와 클릭 메저 프로세스 운영체제 초기화 시에 실행 항상 시스템 버퍼에 메저 값이 저장되어 있음.
6
프로그램이 실행 중 메저를 요구 리퀘스트 모드 트리거가 일어날 때까지 대기상태
Request_Locator(Device_ID, &Measure); Device_ID 필드에 의해 물리적 입력장비 제어 [그림 5-15] 리퀘스트 모드
7
직접모드 샘플 모드 사용자 트리거가 불필요 sample_Locator(Device_ID, &Measure);
이미 필요한 메저가 준비된 상태 물체선택 -> 회전 메뉴 선택 cf. 회전 메뉴 선택 -> 물체선택: 리퀘스트 모드 [그림 5-16] 샘플 모드
8
이벤트 모드 이벤트 레코드: 이벤트 타입, 장치 아이디, 메저 응용 프로그램은 주기적으로 이벤트 큐를 검사 이벤트 모드
사용자가 입력 선택. cf. 리퀘스트/샘플 모드: 프로그램이 주도권 이벤트 레코드: 이벤트 타입, 장치 아이디, 메저 응용 프로그램은 주기적으로 이벤트 큐를 검사 드라이버에게 이벤트 리퀘스트. 드라이버가 큐 프런트 레코드를 전달 큐가 비어있으면 응용 프로그램은 다른 일을 수행 [그림 5-17] 이벤트 모드
9
실습 코드 5-2 검은 바탕에 흰 사각형I
10
Section 03 지엘 프로그램 예-지엘의 콜백
[표 5-1] 타입별 콜백함수 [그림 5-19] 콜백 테이블
11
아이들 콜백 지엘의 콜백 큐에 이벤트가 없을 때 실행 정의되어 있지 않으면 운영체제는 다른 일을 수행
드라이버를 통해 주기적으로 이벤트 검사 [표 5-1] 타입별 콜백함수
12
프로그램 기본 구조 #include <glut.h> #include <gl.h>
#include <glu.h> void MyDisplay( ){}; //콜백함수 정의 void MyKeyboard(char key, int x, int y){}; //콜백함수 정의 void MyMouse(int button, int state, int x, int y ){}; //콜백함수 정의 int main( ){ Initialize and Open Window; //윈도우 초기화 및 생성 Initialize OpenGL State; //GL상태변수 설정 Register input Callback Functions; //콜백함수 등록 { glutDisplayFunc(MyDisplay); glutKeyboardFunc(MyKeyboard); glutMouseFunc(MyMouse); } Enter Event Processing Loop; //이벤트 루프로 진입
13
Section 04 윈도우와 뷰포트-윈도우와 뷰포트
윈도우를 분할 그리기가 뷰포트 내부로 제한됨 뷰포트Viewport : 윈도우 내부에 설정한 작은 창 왜곡 뷰포트 미 설정시 기본값으로 윈도우 = 뷰포트 윈도우 크기조절에 따라 뷰포트 내부 그림도 자동으로 크기조절 별도 뷰포트 설정에 의해 왜곡 방지 [그림 5-24] 뷰 포트 [그림 5-25] 왜곡
14
실습 코드 5-4 검은 바탕에 흰 사각형II 윈도우 = 뷰포트 왜곡현상
15
GLUT 윈도우 제어 [그림 5-26] GLUT 윈도우 제어명령
16
GL의 뷰포트 설정 [그림 5-27] 지엘의 뷰포트 설정
17
Thank you
Similar presentations