Introducing 

Prezi AI.

Your new presentation assistant.

Refine, enhance, and tailor your content, source relevant images, and edit visuals quicker than ever before.

Loading…
Transcript

제 2장 렌더링 파이프라인

제 3장 Direct3D에서의 드로잉

-1조-

렌더링 파이프라인의 아홉 단계

버텍스 정보에서 드로잉까지의 과정

렌더링 파이프 라인

후면 추려내기

투영

(9단계 과정)

(Backface Culling)

(Projection)

버퍼 메모리에

접근

버텍스 정보를 버퍼에

담기

버텍스/인덱스

버퍼 생성

렌더링 파이프라인이란?

후면 추려내기

n 차원에서 n-1 차원을 얻는 과정 ( 3D -> 2D)

기하학적으로 3D 장면을 구성하고 가상 카메라를 설정한 뒤에는 모니터에 2D 표현을 만들어내는 과정

버텍스

인덱스

/

- 후면 폴리곤을 추려냄(이후 프로세스에서 제거)

- 전면 -> 시계 방향 두르기 순서(뷰 스페이스에서)

- 평행 투영

- 원근 투영

--> 카메라에서 멀리 떨어진 물체는 가까운 물체에 비해 작게 표현

버퍼메모리

접근하기

Unlock

Lock

버퍼에 값을 직접 넣지 않고, 버퍼를 열어놓고(Lock) 값을 입력 후 버퍼를 닫는(Unlock) 방식

Lock

(버퍼 오픈)

// 잠금을 시작할 버퍼 위치

// 잠글 바이트 수

// 잠근 메모리의 시작 포인터

// 잠금하는 방법

{

UINT OffsetToLock,

UINT SizeToLock,

BYTE** ppdData,

DWORD Flags

};

우리의 시야 볼륨(절두체)을 정의하고, 절두체 내의 기하물체를 투영 윈도우에 투영하는 과정을 담당

- 후면 추려내기를 완전히 끈다.

- 시계 방향 두르기를 가진 삼각형을 추려 냄.

- 시계 반대방향을 추려 낸다. 디폴트 상태.

Device->Transform(D3DTS_WORLD, &worldMatrix);

이 변환에는 행렬이 이용

IDirect3DDevice->SetTransform

정사각형에서 직사각형으로의 매핑에 의해

발생하는 왜곡을 보정하는 역할

Unlock

(버퍼 닫음)

버퍼 생성

버텍스

인덱스

/

CreateVertexBuffer

// 버퍼에 할당할 바이트 수

// 버퍼가 이용되는 방법

// 버텍스 포멧

// 버퍼가 위치할 메모리 풀

// 만들어질 버텍스 버퍼를 받을 포인터

// 이용되지 않는 것. 0으로 지정

{

UNIT Length,

DWORD Usage,

DWORD FVF,

D3DPOOL Pool,

IDirect3DvertexBuffer9** ppVertexBuffer,

HANDLE* pSharedHandel

}

CreateIndexBuffer

// 버퍼에 할당할 바이트 수

// 버퍼가 이용되는 방법

// 인덱스의 크기를 지정

// 버퍼가 위치할 메모리 풀

// 만들어질 버텍스 버퍼를 받을 포인터

// 이용되지 않는 것. 0으로 지정

{

UNIT Length,

DWORD Usage,

DWORD Format,

D3DPOOL Pool,

IDirect3DvertexBuffer9** ppIndexBuffer,

HANDLE* pSharedHandel

}

로컬 스페이스

월드 스페이스

조명

뷰 포트

(Local Space, World Space)

(Lighting)

(View Port)

로컬스페이스 (로컬 좌표 시스템 )

조명

뷰표트 변환

샘플 코드로 보는 Direct3D 드로잉

투영 윈도우에서 화면의 직사각형 (뷰포트)로 변환

- 광원은 월드 스페이스 내에 정의 되지만 뷰 스페이스 변환에 의해 뷰 스페이스로 변환됨

- 광원은 물체에 명암을 추가하여 장면에 사실감을 더해준다.

- '모델링 스페이스' 라고도 불림

- 물체 자체의 좌표 시스템

- 모델링 작업을 쉽고 단순하게 만듬

- 자체의 좌표 시스템을 이용해 정의됨

월드 스페이스(전역 좌표 시스템)

- 다수의 모델을 전역(월드)좌표 시스템으로

옮겨와 하나의 장면을 구성

- 이동, 회전, 크기 변형 등을 포함하는

"월드 변환"이라는 작업을 거침

- 월드 변환은 위치와 크기, 방위를 포함한 각 물체 간의

관계를 정의함.

버퍼를 이용하여

그릴 준비

1. 버텍스 / 인덱스

버퍼 생성

버텍스/인덱스

버퍼를 이용한

드로잉

2. 메모리 접근,

버텍스 정보 담기

드로잉

인덱스/버텍스

드로잉

인덱스/버텍스

드로잉

버퍼를 이용한 그리기

드로잉

인덱스/버텍스

드로잉 시작 :

버텍스 버퍼로 그리는 방법 :

버퍼를 이용하여 그릴 준비

BeginScene();

DrawPrimitive

1. 스트림 소스 지정

SetStreamSource

드로잉 종료 :

인덱스 버퍼로 그리는 방법 :

EndScene();

DrawIndexedPrimitive

{

UINT StreamNumber,

IDirect3DVertexBuffer9* pStreamData,

UINT OffsetInByte,

UINT Stride

};

// 연결할 스트림 소스

// 연결하고자하는 버퍼 포인터

// 파이프라인에 공급될 스트림 시작 포인터

// 스트림에 연결하고자 하는 버퍼 바이트 수

레스터라이즈

클리핑

3. 스트림 소스와 버퍼 연결

2. 버텍스 포맷 지정

뷰 스페이스

SetFVF

{ D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_FEX1}

3. 인덱스 버퍼 지정

4. 드로잉 실시

(rasterize)

(Clipping)

(View Space)

클리핑

래스터라이즈

뷰 스페이스 (뷰잉 변환)

각각의 삼각형을 그리는 데 필요한 픽셀 컬러들을 계산하는 과정

- 시야 볼륨 외부의 기하물체를 추려냄

- 시야 절두체에서의 삼각형 위치는 세 가지로 분류

작업을 수월하게 하기 위해서카메라의 위치를 원점, 보는 방향을 양의 z축으로 변환

1. 완전한 내부

- 그대로 보전되어 다음 단계로 진행

2. 완전한 외부

- 완전히 다 추려냄

3. 부분적 내부(부분적 외부)

- 절두체 내부의 부분만 보존, 외부는 추려냄

- 래스터라이즈 과정은 엄청난 작업 양을 필요로 하므로 반드시 전용 그래픽 하드웨어에서 처리 되어야 한다.

- 결과물은 모니터에 바로 디스플레이할 수 있는 2D 이미지가 된다.

1. 월드 스페이스 내의 물체와 카메라

2. 관찰점을 원점으로 변환, 물체들도 함께 회전

3. z-축에 맞도록 관찰점을 회전 물체들도 함께 회전

화면 너비

=

종횡비

화면 높이

Learn more about creating dynamic, engaging presentations with Prezi