every/study

컴퓨터 그래픽스 개념정리(3)

@s0hy20n_o 2024. 11. 24. 23:48

윈도우 생성 과정

 

메인 이벤트 루프

 

 

MSDN - WinMain()

모든 Windows 프로그램에는 WinMain 또는 wWinMain이라는 진입점 함수가 포함되어 있음

  • hInstance: 프로그램의 인스턴스 핸들

      운영체제는 이 값을 사용하여 실행파일 또는 exe가 메모리에 로드될 때 이를 식별

  • hPrevInstance: 앞에 실행된 현재 프로그램의 인스턴스 핸들

16비트 Windows에서 사용되었지만 지금은 항상 0

  • lpCmdLine: pCmdLine은 명령쥴 인수를 유니코드 문자열로 포함함
  • nCmdShow: 기본 애플리케이션 창을 최소화할지, 최대화할지, 또는 정상적으로 표시할지를 나타내는 플래그

CreateWindow()

확장 창 스타일을 사용하여 겹치는, 팝업 또는 자식 창을 만듦

아닌 경우 이 함수는 CreateWindow 함수와 동일

 

The Window Procedure

  • LRESULT: 기본 값으로 32비트 정수값을 나타내며, 미리 지정된 형식
  • CALLBACK: 이벤트가 발생했을 때 윈도우(운영체제)에 의해 호출되는 것

MessageBox()

시스템 아이콘 / 단추 집합 및 상태 / 오류 정보와 같은 간단한 애플리케이션 관련 메시지가 포함된 모달 대화 상자를 표시

 메시지 상자는 사용자가 클릭한 단추를 나타내는 정수 값을 반환

 

Vertual Key Codes

  ex) VK_LBUTTON과 같은 형식(VK_ ~~)으로 표현

 

 

 

OpenGL의 특징

  • 그래픽스 하드웨어에 대한 소프트웨어 인터페이스

  하드웨어에 독립적, 상위수준의 그래픽스 API이므로 객체 단위 프로그래밍 가능

  • 플랫폼에 독립적

  PC, 워크스테이션 및 Mac OS, Window, Unix 등 다양한 운영체제 지원

  WebGL은 대부분 웹 브라우저 지원

  • 다양한 그래픽스 기능을 지원하여 응용 소프트웨어 개발 용이

  모델링, 변환, 색상, 명암, 그림자, 텍스쳐 매핑, 블렌딩 등의 고급 그래픽스 처리 기능 제공

  가속 하드웨어를 사용해 처리하는 경우 많은 양의 그래픽 데이터를 실시간 처리 가능

  • OpenGL 가속 하드웨어는 셰이딩 언어(GLSL)를 하드웨어적으로 가속하는 기능 제공

 

OpenGL의 장점

  • 안정성: 지난 10년동안 다양한 플랫폼에서 지원되어 그 사양이 충분히 검증되며 발전
  • 신뢰성 및 이식성: OpenGL 응용프로그램은 운영체제나 윈도우 시스템에 상관없이 동일한 출력 결과 생성
  • 확장성: 가전기기로부터 PC, 슈퍼컴퓨터에 이르기까지 다양한 종류의 시스템에서 동일하게 작동
  • 편리성: 직관적인 인터페이스와 논리적인 명령어들로 구성
  • 문서화: 문서화 작업이 잘 이루어져 있으며 많은 책들이 출판

 

그래픽 API

응용프로그램 인터페이스

  • 라이브러리

 

 

OpenGL

  • 저수준 API
  • 장면을 묘사하는 것이 아닌 구체적 프로시저를 호출
  • cf. DirectX from Microsoft: 호환성 결여
  • 하드웨어와 거의 직접 연관 (하드웨어 성능을 최대한 발휘)
  • Inventor, VRML, Java3D 등 고수준 API의 기반
  • 드라이버 소프트웨어에 비해 상대적으로 고수준 함수

 

OpenGL 설계원리

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

 

파이프라인

  • GPU설계 원리
  • CPU 파이프라인과 유사
  • 분업에 의한 동시처리로 처리속도 극대화 ex) 컨베이어 시스템
  • 파이프라인 서브 프로세스는 모두 하드웨어화

OpenGL 상태(State)

  • OpenGL은 상태 머신 
  • OpenGL 함수의 2가지 유형
  • Primitive 생성

 프리미티브가 표시되면 출력을 발생시킬 수 있음

 정점이 처리되는 방법과 프리미티브의 모양은 상태에 의해 제어됨

  • 상태 변경(State changing)

 변환 함수(Transformation function)

 어트리뷰트 함수(Attribute function)

 대부분의 상태 변수는 애플리케이션에 의해 정의되어 셰이더로 전송됨

  • GL의 역할 = 상태변수 설정
  • 파이프라인은 상태변수를 참조해서 자동으로 실행됨

 

OpenGL 함수 형식

  • 벡터 타입

glVertex3fv(p)

  • v: 벡터
  • p: 배열명
  • GL = API

 명령어가 아니라 함수명(but 혼용함)

  • GL은 비 객체지향적
  • 처리속도 향상
  • 함수 오버로딩이 불가능
  • 3차원 정점-> glVertex3f(), 2차원 정점-> glVertex2f()