Computer Graphics Middle Exam

Computer Graphics Middle Exam

2023, Apr 19    

컴퓨터그래픽스

Ch.1 Introduction

  • Computer Graphics: 컴퓨터를 이용하여 영상을 제작하느 기술
  • 영상 관련 학문 분야
    • 영상처리: 입력, 출력이 모두 영상
    • 컴퓨터 비전: 입력이 영상이며 출력은 심볼
    • 컴퓨터 그래픽: 입력이 심볼이며 출력은 영상
    • AI: 입력, 출력이 모두 심볼
  • 이미징: 2차원 이미지 표현
  • 모델링: 3차원 오브젝트 표현
  • 렌더링: 3차원 모델들로부터 2차원 이미지 생성
  • 애니메이션: 시간의 흐름의 따라 변화를 시뮬레이

Ch.2 Graphics Systems and Models

  • 컴퓨터 그래픽스 시스템 구성요소
    • 입력 장치, 중앙처리 장치, 그래픽 처리 장치
    • 메모리, 프레임 버퍼, 출력 장치
  • 3차원 물체를 입력할 수 있는 방법: 3D Scanner

픽셀과 프레임 버퍼

  • 래스터 방식(Raster)
    • 그래픽스 시스템 안에서 픽셀의 배열(래스터)로 생성
    • 각 픽셀의 영상은 한 위치나 작은 영역에 대응
    • 픽셀은 프레임 버퍼라고 부르는 메모리의 한 부분에 집단으로 저장
  • 해상도
    • 프레임 버퍼의 픽셀 수가 우리들이 볼 수 있는 영상의 상세함을 결정
    • 8피트 깊이의 프레임 버퍼: 2의 8승개의 색 표시
    • 프레임 버퍼의 깊이(정밀도)가 얼마나 많은 색을 표현할 수 있는지를 결정
  • 레스터화(주사변화)
    • 응용프로그램에 의하여 픽셀에 관한 정보를 처리하여 프레임 버퍼에 저장시키는 것

CPU, GPU

  • CPU
    • 일반처리와 그래픽 처리를 둘다 수행
    • 래스터화, 스캔변환
  • GPUs
    • 특정 그래픽 기능을 수행하도록 맞춤처리
    • 높은 수준의 병렬

Ch.3 Windows Programming

윈도우 생성 과정

Ch.4 OpenGL

OpenGL 특징

  • 2D와 3D 그래픽스 API로 가장 널리 사용되는 산업계 표준으로 성장
  • 그래픽스 하드웨어에 대한 소프트웨어 인터페이스
    • 하드웨어에 독립적, 상위수준의 그래픽스 API이므로 객체 단위 프로그래밍 가능
  • 플랫폼에 독립적
  • 다양한 그래픽스 기능을 지원하여 응용 소프트웨어 개발 용이
    • 모델링, 변환, 색상, 명암, 그림자 등의 고급 그래픽스 처리 기능 제공
    • 가속 하드웨어를 사용해 처리하는 경우 많은 양의 그래픽 데이터 실시간 처리 가능

OpenGL 장점

  • 안정성
  • 신뢰성
  • 확장성
  • 편리성
  • 문서화

  • 저수준 API
    • 장면을 묘사하는것이 아니라 구체적 프러시져를 호출
    • 하드웨어와 거의 직접 연관(성능 최대 발휘)
    • 고수준 함수

OpenGL 설계원리

  • 범용성
    • 운영체제에 무관
  • 효울성
    • 그래픽 하드웨어의 가속 기능을 최대 발휘
    • 공통 부분을 찾아내어 성능 극대화
    • 공통 부분이 아닌것에는 활성,비활성 기능 모드 제공
  • 독립성
    • 기능간의 독립성 최대 보장
    • 기능끼리 서로 얽혀 발생하는 오류 방지
  • 완전성
    • 다소의 하드웨어가 확장 기능을 지원하면 표준기능으로 변경
    • 특정 하드웨어 기능에 대해서는 ARB 확장 형태로 명령어를 제공
    • 소프트웨어적으로라도 실행할 수 있도록 배려
  • 상호 작업성
    • 그래픽 명령은 A컴퓨터에서 내리되 실행은 B컴퓨터에서
    • 클라이언트-서버 모델 지원
    • 성능이 낮은 클라이언트 컴퓨터가 고성능 서버를 이용

파이프라인

  • GPU 설게원리
    • cpu파이프 라인과 유사
    • 분업에 의한 동시처리로 처리속도를 극대화
    • 파이프라인 서브 프로세스는 모두 하드웨어화

OpenGL 상태

  • OpenGL은 상태 머신
  • OpenGL 함수는 2가지 유형이 있음
    • primitive 생성
      • primitive가 표시되면 출력을 발생시킬 수 있음
      • 정점이 처리되는 방법과 primitive의 모양은 상태에 의해 제어됨
    • 상태 변경
      • 변환 함수
      • 어트리뷰트 함수
  • 지엘의 역할 = 상태변수 설정
  • 파이프라인은 상태변수를 참조해서 자동으로 실행됨

OpenGL 함수 형식

  • 벡터 타입

  • 지엘은 API
    • 명령어가 아니라 함수명이며, 그러나 혼용함
  • 지엘은 비 객체지향적
    • 처리속도를 향상
    • 함수 오버로딩이 불가능
    • 3차원 정점이라면 glVertex3f(), 2차원 정점이라면 glVertex2f()

OpenGL 라이브러리

  • 지엘 라이브러리
    • 렌더링 기능을 제공하는 함수 라이브러리
  • 지엘 유틸리티 라이브러리
    • 50여개의 함수. GL 라이브러리의 도우미
    • 다각형 분할, 투상, 2차원 곡면, 너브스 등 고급기능을 제공하는 함수
    • GL함수로 작성
  • 지엘 유틸리티 툴 킷
    • 사용자 입력을 받아들이거나 화면 윈도우를 제어하기 위한 함수
    • 윈도우 운영체제 기능과의 인터페이

Windows 프로그래밍의 기본

  • 그래픽 디바이스 인터페이스
    • 도형을 처리하는 프로그램
    • 선 그리기, 컬러 관리와 같은 그래픽 함수들을 구현하는 일을 담당하는 윈도우의 구성 요소
    • 모든 응용프로그램은 화면 표시 또는 인쇄 시 그래픽 디바이스 인터페이스에 처리를 의뢰하면 그래픽 디바이스 인터페이스(GDI)는 그 명령을 디스플레이 드라이버나 인쇄기 드라이버가 처리할 수 있는 형태로 변환하여 각각의 드라이버에 보냄으로써 화면 표시 또는 인쇄가 실행됨
  • 윈도우 시스템의 WIN32라이브러리
    • 2차원 그래픽스를 위한 함수들은 제공
    • 3차원X
  • OpenGL 프로그래밍 관점에서 볼 때 한가지 중요한 점
    • 윈도우 시스템도 하나의 래스터 그래픽스 시스템으로서의 성질을 가지고 있음
      • 프레임 버퍼가 정의 되어야 함
      • 내부적으로 윈도우의 기본 요소들을 어떻게 표현할 것인가가 설정되어야 함

윈도우 시스템과 OpenGL의 연결

  • 윈도우를 이용하여 3차원 그래픽스를 하기 위한 방법
    • 윈도우 시스템에서 제공하는 래스터 그래픽스 시스템을 기반으로 프로그래밍 해야함
    • 윈도우 프로그래밍 문맥에서 하나의 추상정래스터 시스템인 OpenGL을 윈도우 시스템의 그래픽스 시스템에 연결
    • OpenGL에서 제공하는 3차원 라이브러리르 통해 3차원 그래픽스를 프로그래밍함
    • 실제적으로 하드웨어를 제어하는 윈도우 시스템에 의해 결과 화면 출

Window Procedure

bSetupPixelFormat()

  • 두 그래픽스 시스템을 연결하기 위한 중요한 사항
    • OpenGL에서 사용하기 위하여 GDI에서 제공하는 화소 형식을 적절히 지정해야 함
  • OpenGL에서 사용해야할 프레임 버퍼에 대한 정보
  • 프레임 버퍼는 하드웨어 성능에 의해 제한됨
  • 연결 방법
    • OpenGL에서 희망하는 프레임 버퍼의 성능을 화소 형식을 통해 기술함
      • bSetupPixelFormat()
    • GDI에 화소 정보를 넘겨주지만 실질적으로 하드웨어 성능이 따르지 못하면 윈도우는 최대한 OpenGL이 요구하는 성능에 만족 시켜주는 화소형식을 결정함
    • 윈도우 시스템의 그래픽스에 관련된 모든 정보를 저장하는 디바이스 문맥에 저장 후 위의 정보를 사용함

그리느냐 마느냐

  • 윈도우 GDI(Graphics Device Interface)
    • 그래픽의 출력 담당
    • 프린터에 프린트하는 기능도 담당
  • 그려야 하는 범위 : 윈도우의 클라이언트 영역
  • 그리기 위한 중요한 개념
    • 유효화
      • 윈도우 클라이언트 영억을 훼손하면 윈도우는 WM_PAINT 메시지를 응용 프로그램으로 보냄
      • 프로그램은 윈도우에게 그 메시지를 받아서 처리했다는 것을 알려야함
      • 윈도우에게 알리는 과정을 사각형을 ‘유효화 한다’ 라고 함
    • 그려야 할 사각형의 정의
      • 그릴 필요가 있는 영역인 무효 사각형만 신경쓰면됨
      • WM_PAINT 자료구조에 포함되어 있음
  • WM_PAINT
    • BeginPaint() … EndPaint()
      • 장점: 자동으로 유효화(Validating) 수행
      • 단점: 무효사각형을 나타내는 rcPaint 속성을 가지고 있으며 윈도우의클리핑 영역 외부에는 어떤 것도 그릴 수 없음
      • 그리고 싶다면 rcPaint를 다시 정의 해야함
    • GetDC() … ReleaseDC()
      • 장점: 클리핑 사각형은 전체 클라이언트 영역이 됨. 따라서 클라이언트 영역을 그리기 위해서 매번 무효 사각형을 다시 정의할 필요가 없음
      • 단점: 무효 사각형을 유효화 하기 위해 직접 ValidateRect()를 호출. 그렇지 않으면 윈도우는 언제까지나 응용 프로그램에 WM_PAINT 메시지를 보낼 것임.(윈도우는 유효화가 이루어지지 않으면 계속 WM_PAINT 메시지를 보냄)

InvalidateRect()

  • BOOL InvalidateRect(

    HWND hWnd, //무효화할 윈도우 핸들

    CONST RECT *lpRect, //무효화할 사각형 영역 포인터

    BOOL bErase); // BeginPaint()를 위해 플래그 지움

    무효 사각형(Invalid Rectangle): 다시 그릴 필요가 있는 유일한 영역

    InvalidateRect()함수는 클라이언트 영역의 임의의 부분만 그림

Window Procedure

ReSize() & DrawScene()