래스터라이즈
픽셀의 색을 최종 결정하는 단계가 아닌 정점 정보를 기반으로 픽셀의 정보를 만들어내기 시작한 것이다.
래스터라이즈 후 만들어진 픽셀을 픽셀 쉐이더를 통과시켜 픽셀의 색을 결정한다.
정점 버퍼의 생성
Vertex Buffer은 정점들을 담는 버퍼이다. CreateVertexBuffer함수로 만들 수 있다.
HRESULT CreateVertexBuffer(
UINT Length,
DWORD Usage,
DWORD FVF,
D3DPOOL Pool,
IDirect3DVertexBuffer9** ppVertexBuffer,
HANDLE* pHandle
);
Length - 정점 버퍼의 사이즈로, 정점 하나의 크기 * 정점 개수로 구할 수 있다.
Usage - 0으로하면 버텍스 버퍼를 정적으로 생성한다. 버텍스 버퍼 내부 정점의 값을 바꿀 필요 없을 때 정적으로 생성하며 속도가 빠르지만 값을 바꿀 때 사용하는 Lock, Unlock (DX11에서 map,unmap) 함수의 속도가 느리다.
D3DUSAGE_DYNAMIC으로 하면 동적으로 버퍼를 생성하는데 정점을 바꿔야 할 필요 있다면 동적으로 버퍼를 생성해주는 것이 좋다.
FVF - 정점의 내용을 기술하는 정보이다. (D3DFVF_XYZ는 좌표 포함, D3DFVP_NORMAL는 법선 벡터 포함 등..)
Pool - 리소스를 메모리에 보관하는 방식을 결정한다. 주로 D3DPOOL_MANAGED를 사용한다.
ppVertexBuffer - 생성한 Vertex Buffer을 여기에 저장
pHandle - 일단 지금은 0으로 해.
uv좌표계, 정점 순서에 앞뒤 구분
uv 좌표계는 각각 크기가 다른 텍스쳐를 매핑하기 위해 필요한 전체 크기가 1인 상대적인 좌표계이다.
정점을 세팅할 때 시계방향 순서로 세팅하면 그 면을 전면, 반시계방향이면 후면이라고 인식한다.
후면으로 인식하면 컬링해서 보이지 않는다
정점 버퍼의 렌더
m_pGraphic_Device->SetStreamSource(0, m_pVB, 0, m_iStride);
m_pGraphic_Device->SetFVF(m_dwFVF);
m_pGraphic_Device->DrawPrimitive(m_PrimitiveType, 0, m_iNumPrimitive);
정점 버퍼를 렌더링하기 위해서는 자원, 정점, 렌더링 방법을 설정해야 한다.
SetStreamSource는 정점 버퍼를 장치에 데이터 스트림에 바인딩하는데 뭔소린지 모르겠다.
대충 CreateVertexBuffer로 생성한 버퍼를 렌더링할 수 있게 인자로 넣어준다고 하자. (m_iStride는 한 정점의 데이터 크기)
그리고 SetFVF로 정점의 내용을 정한다. DrawPrimitive는 렌더링하는 방법을 설정한다.
'Today I Learned' 카테고리의 다른 글
| 23.05.30 - 직교 투영 행렬 만들기 (0) | 2023.05.30 |
|---|---|
| 23. 05. 26 - 알파 블렌딩 vs 알파 테스트 (0) | 2023.05.26 |
| 23. 05. 24 - 좌표 변환 (0) | 2023.05.24 |
| 23. 05. 19 - 프로토타입, map 사용시 주의점 (0) | 2023.05.19 |
| 23. 05. 17 - 스레드 관련 함수 (0) | 2023.05.17 |