Reporting Date: October. 21, 2024
프로그램에서 사용자 입력을 처리하고, 이를 바탕으로
장치 간 상호작용을 다루는 시스템의 흐름에 대해 다루고자 한다.
목차01 메인 함수
02 이벤트 처리 흐름
03 이벤트 기반 콜백 함수
04 입력 장치
05 논리적 입력 장치
06 장치 간 상호작용
07 입력 모드
01 메인 함수
프로그램이 실행될 때 가장 먼저 실행되는 함수.
윈도우에서 실행되는 모든 프로그램은 메인 함수를 가지고 있으며,
이 메인 함수는 프로그램의 진입점(entry point) 역할을 한다.
메인 함수는 프로그램이 종료될 때까지 다음과 같은 3가지 반복 기능을 수행한다.
1 . 입력 처리
(Input Handling)
프로그램이 마우스 클릭, 키보드 입력, 네트워크 데이터 등에
사용자나 외부 입력을 기다리며 이벤트 큐에서 입력을 확인하고 처리하는 단계.
사용자의 행동이나 시스템에서 발생한 이벤트를 받아
필요한 경우 프로그램의 상태를 업데이트한다.
2 . 논리 및 연산 처리
(Logic and Computation)
입력이 처리된 후 프로그램은 필요한 연산 및 로직을 수행한다.
게임 프로그램이라면 캐릭터의 움직임을 계산하고,
GUI 프로그램이라면 화면에 나타날 요소들의 위치를 결정하는 등의 작업을 포함한다.
3 . 화면 갱신
(Render or Display Update)
마지막으로, 처리된 결과를 화면에 표시하기 위해
디스플레이를 업데이트한다.
그래픽 요소가 화면에 그려지거나 데이터가
업데이트되어 사용자에게 반영되는 과정이다.
이는 화면이 실시간으로 변경되는 동적인
프로그램(게임, 애니메이션 등)에서 특히 중요한 단계이다.
이 과정은 프로그램이 종료될 때까지 빠르게 반복되며,
프로그램의 지속적인 동작을 가능하게 한다.
02 이벤트 처리 흐름
시스템에서 프로그램이 사용자
또는 시스템으로부터의 이벤트를 처리하기 위해
운영체제는 응용 프로그램 간 소통을 돕고, 이벤트 관리를 수행한다.
운영체제는 이러한 큐나 스택과 같은 자료구조를
응용 프로그램에 할당하며, 하드웨어 자원을 활용하여 이를 관리한다.
1 . 이벤트 수집 및 저장
사용자가 발생시키는 이벤트는 메세지의 형태로 변환되며,
운영체제의 도움을 받아 프로그램의 메시지 큐에 저장된다.
(message queue)
큐에 이벤트가 쌓이면 이 정보를
순차적으로 처리할 수 있도록 준비한다.
2 . 메시지 fetch
프로그램이 메시지 큐에서
이벤트 메시지를 꺼내기 위해 fetch 작업을 수행한다.
이를 통해 이벤트 메시지가 큐에서 제거되고, 다음 단계로 전달된다.
3 . 인터프리트 및 디스패치
(interpreter & dispatch)
메시지를 꺼낸 후, 인터프리터가 메시지를 해석하고
디스패치 과정에서 해당 메시지를 적절한 콜백 함수로 전달한다.
4 . 콜백 함수 처리
(callback function)
전달받은 콜백 함수는 이벤트를 적절히 처리하여,
사용자 요구나 시스템 요구를 응용 프로그램에 반영한다.
03 이벤트 기반 콜백 함수
(Event-driven Callback Functions)
이벤트가 발생하면 이를 처리하는 다양한 콜백 함수가 동작하여
프로그램이 원활하게 화면을 갱신하거나 사용자 입력을 반영할 수 있다.
Windows와 같은 GUI 애플리케이션은 이벤트 기반으로 동작하며,
프로그램은 주어진 명령어 순서대로 실행되지 않고, 사용자가 발생시키는
이벤트에 따라 특정 콜백 함수가 호출된다.
이 방식은 비동기적으로 작동하며, 이벤트가
발생할 때마다 다른 결과를 처리할 수 있다.
1 . 디스플레이 이벤트
(Display Event)
필수 이벤트로, 윈도우 창에
어떤 것을 그리거나 갱신할 때 발생한다.
화면에 폴리곤, 사각형, 텍스트 등을 렌더링할 때 이 이벤트가 트리거된다.
콜백 함수는 glutDisplayFunc()에 등록하여 호출된다.
2 . 리셰이프 이벤트
(Reshape Event)
윈도우 창의 크기가 조정될 때 발생하는 이벤트.
창 크기에 맞춰 화면 내용의 비율을 재조정해야 할 경우에 유용하다.
이 이벤트는 glutReshapeFunc()에 콜백 함수를 연결하여 설정할 수 있다.
3 . 아이들 이벤트
(Idle Event)
윈도우 창이 활동이 없는
대기 상태에 있을 때 발생하는 이벤트.
보통 애니메이션이 계속해서 재생되도록 하거나 화면을 주기적으로
업데이트할 때 활용되며, glutIdleFunc()로 콜백 함수를 설정한다.
이는 화면에 폴리곤, 사각형과 같은 도형을 띄우고,
크기 조정이나 비활성 상태 처리와 같은 다양한 이벤트를 관리할 수 있다.
04 입력 장치
(Input Device)
사용자가 컴퓨터나 전자기기와 상호작용할 수 있도록 하는 장치로,
사용자의 명령이나 데이터를 컴퓨터에 전달하는 역할을 한다.
이를 통해 사용자는 프로그램을 제어하거나 데이터를 입력할 수 있다.
1 . 상대 입력 장치
상대적인 움직임을 측정하는 장치.
주로 현재 위치에서 얼마나 이동했는지를 기준으로 좌표가 변경된다.
자유도와 값의 범위가 다르며, 사용자 입력의 방향과
속도에 따라 다양한 값을 전달할 수 있다.
① 마우스 (Mouse)
이동한 방향과 거리에 따라 상대적인 좌표 정보를 제공하며,
2D 공간에서의 이동이 주로 활용된다.
② 조이스틱 (Joystick)
주로 2D 또는 3D의 상대적인 움직임과 각도
변화를 통해 게임이나 인터페이스 조작에 사용된다.
③ 트랙볼 (Trackball)
마우스와 유사하게 회전시키는 방향과
거리만큼 상대적인 좌표값이 변한다.
④ 스페이스 볼 (Spaceball)
3D 공간에서 6 자유도를 지원하며,
각도, 위치, 회전 등의 상대적인 입력을 제공한다.
CAD와 같은 3D 설계 도구에서 활용된다.
2 . 절대 입력 장치
절대 위치를 기준으로 입력 정보를 전달하는 장치로,
정확한 위치를 절대 좌표로 전달한다.
① 태블릿 (Tablet)
펜의 위치를 절대 좌표로 인식해
사용자가 원하는 정확한 위치를 전달하며,
예술 작업이나 그래픽 디자인에서 주로 사용된다.
② 3D 스캐너 (3D Scanner)
객체의 전체적인 물리적 형상을 빠르고 정밀하게 캡처하며,
객체의 좌표 데이터를 디지털로 수집하고 이를 기반으로
3D 모델을 생성하는 장치이다.
이를 통해 물체의 물리적인 특성이나 구조를 디지털화하여,
CAD 소프트웨어나 3D 프린팅 등에 활용할 수 있다.
③ 레이저 스캐너 (Laser Scanner)
레이저를 사용하여 객체 표면을 정확하게 측정하며,
건축, 고고학, 산업 설계 등에서 널리 활용된다.
이 장치들은 3D 모델링, 그래픽 디자인, 시뮬레이션 작업 등에서
정밀한 제어를 가능하게 하며, 입체감을 제공하고
정확한 데이터를 전달하는 데 중요한 역할을 한다.
05 논리적 입력 장치
프로그램에서 발생하는 입력 데이터를
논리적으로 처리하고, 특정 유형의 입력에 매핑할 때 사용된다.
이는 입력 장치의 물리적 특성을 추상화하여,
다양한 입력을 프로그램이 통합적으로 다룰 수 있게 하는 역할을 한다.
예를 들어 printf 함수에서는 다양한 형식을 출력할 수 있는데,
이를 위해 논리적으로 6가지 기본 형식 중 하나로 매핑된다.
① 문자형 (%c)
단일 문자 입력을 처리하여 출력한다.
② 문자열형 (%s)
문자열을 입력받아 그대로 출력한다.
③ 정수형 (%d, %i)
정수 값을 입력받아 출력한다.
④ 부동 소수점형 (%f)
실수 값을 입력받아 소수점 형식으로 출력한다.
⑤ 지수형 (%e, %E)
실수를 지수 형태로 표현하여 출력한다.
⑥ 16진수/8진수형 (%x, %o)
정수 값을 각각 16진수나 8진수 형태로 출력한다.
이러한 논리적 매핑은 사용자가 다양한 입력 방식을
프로그램 내에서 일관된 형식으로 처리할 수 있도록 돕는다.
06 장치 간의 상호작용
(Device Interaction)
다른 장치들이 정보를 주고받으며 협력하여 특정 작업을
수행하거나 시스템의 기능을 완수하는 과정이다.
이 상호작용은 장치들이 이벤트나 데이터를 전달하고,
이를 바탕으로 다른 장치가 응답하거나 적절한 동작을
수행하는 방식으로 이루어진다.
1 . 이벤트
장치 간의 상호작용은 보통 이벤트를 통해 시작된다.
예를 들어, 마우스 클릭, 센서 감지, 버튼 누름 등이
이벤트가 되어 트리거를 발생시킨다.
트리거가 발생하면 다른 장치나 시스템이
그 이벤트에 응답하거나 필요한 작업을 시작한다.
2 . 데이터 전송 및 처리
한 장치에서 발생한 이벤트나 데이터는
인터페이스(예: USB, Bluetooth, Wi-Fi)를 통해 다른 장치로 전달된다.
이때 데이터는 디지털 또는 아날로그 신호로 변환되어 전송된다.
3 . 상태 변경
입력 장치에서 발생한 이벤트가 출력 장치(예: 화면)에
나타나는 변화를 유도하는 과정을 의미한다.
이때 입력 장치의 이벤트가 트리거 역할을 하여,
출력 장치의 상태를 변경하게 된다.
예를 들어, 버튼을 클릭하면 화면에 새로운 정보가 나타나거나,
애플리케이션의 상태가 업데이트되는 방식이다.
이러한 상태 변경은 시스템의 사용자 인터페이스(UI)나
응용 프로그램에서 중요한 역할을 하며,
사용자의 상호작용에 따라 실시간으로 반응할 수 있게 만든다.
1 . 트리거
(Trigger)
특정 이벤트나 조건이 발생했을 때
어떤 동작을 실행하도록 하는 신호.
예를 들어, 마우스 클릭이 발생하면
화면에 특정 이미지를 출력하는 것이 트리거이다.
2 . 메저
(Measure)
주어진 입력에 대해 특정한
양이나 값을 측정하는 것을 의미한다.
예를 들어, 조이스틱의 움직임을 측정하여
해당 위치에 따라 캐릭터를 이동시키는 것이 메저이다.
07 입력 모드
(Input Mode)
사용자나 시스템이 입력 장치를 통해
데이터를 입력할 수 있는 상태나 방식.
사용자가 시스템과 상호작용할 때 제공되는 다양한 방식 중 하나로,
사용자가 어떻게 데이터를 제공할지, 또는 시스템이
어떤 형태의 데이터를 받아들일지를 정의한다.
1 . 뤼퀘스트 모드
(Request Mode)
이 모드는 입력 장치에서 데이터를 요청할 때 사용된다.
주로 사용자로부터 입력을 받을 때 사용하는 방식으로,
입력 장치가 요청하는 정보를 기준으로 출력 장치가 작동한다.
2 . 샘플 모드
(Sample Mode)
입력 장치가 정기적으로 데이터를
샘플링하여 출력 장치에 전송하는 방식.
게임에서 마우스 위치를 지속적으로 샘플링하여
캐릭터를 이동시키는 경우가 이에 해당한다.
3 . 이벤트 모드
(Event Mode)
특정 이벤트가 발생했을 때만 데이터를 전송하는 방식.
버튼 클릭이 발생하면
그 시점의 데이터를 전송하는 것이 이에 해당한다.
이 모드는 비동기적인 상호작용을 가능하게 한다.
이는 입력 장치와 출력 장치 간의 효율적이고
유연한 상호작용을 가능하게 하여 사용자 경험을 향상시킨다.
교제: OpenGL로 배우는 3차원 컴퓨터 그래픽스(p.160)
'2024 - 2학기 > OpenGL' 카테고리의 다른 글
4.3 오픈지엘 API (2) | 2025.02.05 |
---|---|
4.2 오픈지엘 API (0) | 2025.02.05 |
4.1 오픈지엘 API (2) | 2025.02.04 |
3.2 그래픽 컬러 처리 (6) | 2025.02.04 |
3.1 그래픽 컬러 처리 (0) | 2025.02.02 |