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