DirectX 11

220927

슬뷔 2022. 10. 5. 06:35

같은 위치의 정점을 여러번 넣는건 비효율적이어서,

정점 수를 필요한 만큼만 넣고 인덱스를 활용한다.

 

정점 수를 줄인다고 버텍스 쉐이더 호출 수가 줄어드는건 아니다.

8

인덱스 버퍼 -> 인덱스를 저장하는 버퍼, 겹치는 자리에 정점을 안주려고 사용한다.

 

사각형을 그릴 때, 정점이 6개 필요했지만 인덱스버퍼가 있으면 정점이 4개만 있어도 된다.

인덱스 버퍼는 6개 필요하다 ..

 

상수버퍼는 디바이스에서 관리한다..

상수버퍼마다 용도가 따로 있다.

 

Transform -> 캐릭터의 위치 정보

Material -> 재질정보

 

* ComPtr은 기본 인터페이스 포인터의 참조 개수를 자동으로 관리하여 참조 횟수가 0이 되면 인터페이스를 릴리스한다.

enum 으로 하면 캐스팅 없어도 정수로 변환이 자유롭다.

파이프라인을 사용 안 하고 UINT 를 사용한 이유 ?

비트연산한 값이기 때문에 정수로 취급돼서 enum 이랑 조합이 안되니까, 

비트를 조합할 경우를 대비해서 정수로 받는다.

 

리소스 클래스에서 RefCount를 만들어서 리소스가 얼마나 자기가 참조되고 있는지 카운팅을 하기 위함이다.

RefCount가 0이 되면 리소스가 지워지도록 할 것이다.

매쉬클래스에는 VB, IB를 멤버로 가진다.

 

원형매쉬 만들기

정점을 중앙에 하나 찍고 태두리에 정점을 필요한 만큼만 찍는다.

그리고 인덱스버퍼에 삼각형을 지정한다.

 

* 180도 = XM_PI

 

중심각을 XM_2PI(360도) / 등분 수 로 구할 수 있다.

좌표는 각도를 알면 x = rcos0 y = rsin0 이다.

만약 10등분을 하면, 반복문 10바퀴 돌려야한다.

 

버텍스버퍼에는 정점 6개

 

반복문횟수는 등분 수 -> ex) 10등분이면 10각형

 

0번 정점이 중심점이기 때문에 vecIdx.push_back에 0번이 들어가야한다.

정점을 인덱스가 반시계로 접근하면 화면상에서 컬링이 되어(레스터라이저에서 제외처리) 안그려짐.

그래서 꼭 시계방향으로 가져가야한다.

 

그래서 순서를 아래처럼 해서 반복문을 돌린다.

i 는 0부터 시작이다.

vecIdx.push_back(0)

vecIdx.push_back(i+2)

vecIdx.push_back(i+1)

 

 

 

 

'DirectX 11' 카테고리의 다른 글

220929  (0) 2022.10.10
220928  (0) 2022.10.09
220926  (0) 2022.10.04
220923  (0) 2022.10.01
220929  (0) 2022.09.29