Click here to load reader

Week03 DirectX9 프로그래밍의 기초cfs8. PDF file 2015. 1. 22. · Di tX9DirectX9 프로그래밍의기초 DirectX 그래픽의역사 HAL과COM에대한개요 DirectX9에서의그리기

  • View
    3

  • Download
    0

Embed Size (px)

Text of Week03 DirectX9 프로그래밍의 기초cfs8. PDF file 2015. 1. 22. · Di tX9DirectX9...

  • DirectX9 프로그래밍의 기초

  • 목 차

    Di tX9 프로그래밍의 기초DirectX9 프로그래밍의 기초

    DirectX 그래픽의 역사 HAL과 COM에 대한 개요HAL과 COM에 대한 개요

    DirectX9에서의 그리기

    Win32API 프로그래밍의 개요 Direct3D 초기화 정점/인덱스 버퍼를 이용한 그리기 D3DX 기하 물체D3DX 기하 물체 메쉬의 이용

    애니메이션및 게임 실습 2

  • DirectX 그래픽의 역사

    DirectX 2.0

    1995. DirectX

    Windows 드라이버 제공Windows 드라이버 제공 DirectX API + Reality Lab(RenderMorphics) + 3D-DDI(Michael Abrash)

    1996. Direct3D

    3D 가속 하드웨어의 향상된 그래픽 능력 사용 각 하드웨어에 대한 공통 인터페이스 지원 장치 독립적이고 추상화된 접근 가능장치 독립적이고 추상화된 접근 가능

    애니메이션및 게임 실습 3

  • DirectX 그래픽의 역사

    DirectX 6/7

    즉시 모드(Immediate Mode)

    저수준 API저수준 API

    유지 모드(Retained Mode)

    즉시 모드 기반 프레임 계층 구조 및 애니메이션 기능 제공

    하드웨어 가속변환 조명 광원의 재조정 뷰포트 객체의 지원하드웨어 가속변환, 조명, 광원의 재조정, 뷰포트 객체의 지원 텍스처 사용의 용이성 제공

    애니메이션및 게임 실습 4

  • DirectX 그래픽의 역사

    DirectX 8

    Direct Draw와 Direct3D의 통합

    데이터의 초기화, 할당, 관리의 단순화

    포인트 스프라이트

    하드웨어 스프라이트 사용 가능 : 스파크, 폭발, 비

    3D 텍스처

    3D 볼륨을 가지는 텍스처 사용

    정확한 픽셀단위 조명 효과, 포인트 광원, 스포트 광원, 대기 환경 효과 지원

    유틸리티 라이브러리

    벡터 및 행렬 연산, 이미지 파일 읽기 및 텍스처 생성 단순화

    버텍스와 픽셀 셰이더

    어셈블리를 이용한 하드웨어 제어

    애니메이션및 게임 실습 5

  • DirectX 그래픽의 역사

    DirectX 9

    HLSL(High-Level Shader Language)

    C 언어와 유사한 문법 NDIVIA와 공동 개발C 언어와 유사한 문법, NDIVIA와 공동 개발

    Scissor Test, Line Anti-Aliasing 텍스처 좌표 자동 생성 지원 양면 구조의 스텐실 지원 다중 렌더링 지원

    애니메이션및 게임 실습 6

  • HAL과 COM에 대한 개요

    하드웨어 추상 계층(HAL)

    Hardware Abstraction Layer 하드웨어와 Direct3D의 중간 매개체

    애플리케이션 애플리케이션

    Direct3D

    GDI

    HAL

    디바이스 드라이버 인터페이스

    GDI

    디바이스 드라이버 인터페이스

    그래픽 카드

    애니메이션및 게임 실습 7

  • HAL과 COM에 대한 개요

    플러그블 소프트웨어 장치

    하드웨어 에뮬레이션 계층 : 하드웨어가 3D 기능을 제공하지 않는 경우

    레퍼런 래 터라이저레퍼런스 래스터라이저

    DirectX SDK에서만 제공 하드웨어 미지원 기능 테스트하드웨어 미지원 기능 테스트

    디바이스 제어하기

    애니메이션및 게임 실습 8

  • Win32API 프로그래밍의 개요

    New Projectsj

    애니메이션및 게임 실습 9

  • Win32API 프로그래밍의 개요

    An empty projectp y p j

    애니메이션및 게임 실습 10

  • Win32API 프로그래밍의 개요

    New Files – c++ source file

    애니메이션및 게임 실습 11

  • Win32API 프로그래밍의 개요

    Project – Settings – Linkj g

    d3d9.lib d3dx9.lib winmm.lib

    애니메이션및 게임 실습 12

  • Win32API 프로그래밍의 개요

    Tools – Options – Directories – Include filesp

    애니메이션및 게임 실습 13

  • Win32API 프로그래밍의 개요

    Tools – Options – Directories – Library filesp y

    애니메이션및 게임 실습 14

  • Direct3D 초기화

    예제 1

    애니메이션및 게임 실습 15

  • 용어 및 기본 함수 정리

    표면(surface)

    Direct3D가 주로 2D 이미지 데이터를 보관하는 데 이용하는 픽셀의 행렬

    IDirect3DSurface9 인터페이스 이용IDirect3DSurface9 인터페이스 이용

    LockRect : 표면 메모리로의 포인터 제공

    UnlockRect : LockRect를 호출하고 표면 메모리에 대한 작업이 끝난 뒤에는 이 메서드를 호출하여 표면의 잠금 해제

    GetDesc : 표면에 대한 정보를 D3DSURFACE DESC 구조체를 통해 획득GetDesc : 표면에 대한 정보를 D3DSURFACE_DESC 구조체를 통해 획득

    애니메이션및 게임 실습 16

  • 용어 및 기본 함수 정리

    멀티 샘플링(Multisampling)p g

    픽셀로 이미지를 표현할 때 나타나는 거친 이미지를 부드럽게 만드는 기술 안티알리아싱

    D3DMULTISAMPLE_TYPE : 표면에 적용할 멀티 샘플링 레벨 지정

    D3DMULTISAMPLE_NONE : 멀티 샘플링 미지정 D3DMULTISAMPLE_1_SAMPLE ~ D3DMULTISAMPLE_16_SAMPLE : 1 ~ 16 멀티 샘플링 레벨 지정

    애니메이션및 게임 실습 17

  • 용어 및 기본 함수 정리

    픽셀 포맷

    D3DFMT_R8G8B8 : 24bit 포맷

    D3DFMT X8R8G8B8 : 32bit 포맷D3DFMT_X8R8G8B8 : 32bit 포맷

    D3DFMT_A8R8G8B8 : 32bit 포맷

    D3DFMT_X16B16G16R16F : 64bit 포맷

    D3DFMT_A32B32G32R32F : 128bit 포맷

    애니메이션및 게임 실습 18

  • 용어 및 기본 함수 정리

    메모리 풀

    D3DPOOL_DEFAULT 자원의 타입과 이용 방식에 가장 적합한 자원들을 메모리에 보관하도록 Direct3D에 요청 (비디오 메모리 AGP 메모리 시스템 메모리)Direct3D에 요청, (비디오 메모리, AGP 메모리, 시스템 메모리)

    D3DPOOL_MANAGED 관리 풀에 보관된 자원은 Direct3D에 의해 관리. 즉, 필요에 따라 자동으로 비 디오 메모리나 AGP 메모리로 이전, 부가적으로 자원의 백업 복사본이 시스템 메모리 내에 보관

    D3DPOOL SYSTEMMEMD3DPOOL_SYSTEMMEM 시스템 메모리 내에 보관될 자원 지정

    D3DPOOL_SCRATCH 시스템 메모리 내에 보관될 자원 지정 장치는 이 풀 내의 자원에 직접 접근 불가능, 그러나 자원을 두 풀 사이에 서 로 복사하는 것은 가능

    애니메이션및 게임 실습 19

  • 용어 및 기본 함수 정리

    스왑 체인

    Direct3D는 2, 3개의 표면을 하나의 컬렉션으로 관리 IDirect3DSwapChain9 인터페이스

    스왑 체인과 플리핑 기술

    표면 1 표면 2

    표면 1 표면 2

    전면버퍼 후면버퍼

    표면 1

    전면버퍼

    표면 2

    후면버퍼

    표면 2

    전면버퍼

    표면 1

    후면버퍼

    표면 1

    전면버퍼

    표면 2

    후면버퍼

    애니메이션및 게임 실습 20

  • 용어 및 기본 함수 정리

    깊이 버퍼(Depth buffer)p

    특정 픽셀의 깊이 정보 저장 해상도가 640X480이면, 깊이 버퍼의 크기도 640X480의 크기를 가짐

    깊이 버퍼링 혹은 z-버퍼링에 이용

    D3DFMT_D32 : 32비트 깊이 버퍼 지장 D3DFMT_D24S8 : 24비트 깊이 버퍼, 8비트 스텐실 버퍼 지정 D3DFMT_D24X8 : 24비트 깊이 버퍼 지장 D3DFMT_D24X4S4 : 24비트 깊이 버퍼, 4비트 스텐실 버퍼 지정 D3DFMT D16 : 16비트 깊이 버퍼 지정D3DFMT_D16 : 16비트 깊이 버퍼 지정

    애니메이션및 게임 실습 21

  • Direct3D 초기화

    초기화 과정

    IDirect3D9 인터페이스의 포인터 획득

    기본 디스플레이 어댑터(기본 그래픽 카드)의 하드웨어 버텍스 프로세싱 지원여부기본 디스플레이 어댑터(기본 그래픽 카드)의 하드웨어 버텍스 프로세싱 지원여부 확인

    D3DPRESENT_PARAMETERS 구조체 인스턴스 초기화

    IDirect3DDevice9 생성

    애니메이션및 게임 실습 22

  • Direct3D 초기화

    예제 1

    d3dUtility.h

    d3dUtility cppd3dUtility.cpp

    d3dInit.cpp

    애니메이션및 게임 실습 23

  • Direct3D 초기화

    초기화 함수

    HRESULT IDirect3DDevice9::Clear (

    // 배열 내 사각형의 수DWORD Count, // pRects 배열 내 사각형의 수 const D3DRECT* pRects, // 소거하려는 화면 사각형의 배열 DWORD Flags, // 어떤 표면을 소거할 지 지정 D3DCOLOR Color // 렌더 대상을 소거할 색상D3DCOLOR Color, // 렌더 대상을 소거할 색상 float Z, // 깊이 버퍼 지정값 DWORD Stencil // 스텐실 버퍼 지정값

    )

    Flags

    D3DCLEAR TARGET : 렌더 대상 표면, 보통은 후면 버퍼D3DCLEAR_TARGET 렌더 대상 표면, 보통은 후면 버퍼 D3DCLEAR_ZBUFFER : 깊이 버퍼 D3DCLEAR_STENCIL : 스텐실 버퍼

    애니메이션및 게임 실습 24

  • 정점/인덱스 버퍼를 이용한 그리기

    정점(vertex) 포맷

    Flexible Vertex Format (FVF)

    x, y, z 좌표

    변환정점변환정점