원은 여러 개의 삼각형을 쪼개어 만든다.
얘를 들어 삼각형을 그린다고 했을 땐,
삼각형0은 vertex 0 2 1
삼각형1은 vertex 0 3 2
...
이런 식으로 사용할 것이다.
이럴 때 vertex의 순서가 중요하다.
해당 엔진에서는 Vertex 순서가 시계 방향으로 가면 화면에 그려지지만,
반시계 방향으로 그린다면 화면에 제대로 그려지지 않는다.
이러한 방향은 사실 원하는 대로 바꿀 수 있다.
하지만, dx에서는 전통적으로 시계 방향으로 렌더하는 것이 앞면이라고 여긴다.
이러한 삼각형을 원처럼 보이도록 여러개를 쪼개어,
sin과 cos을 이용하여 애둘러쌓아 둔다면
원처럼 보인다.
이러한 방식으로 원을 그리면 모든 삼각형이 0번을 공유한다.
하지만 마지막 삼각형은 1번 정점으로 다시 돌아오기 때문에
다음과 같이 예외처리를 해준다.
for (size_t i = 0; i < numTriangles; i++) {
// 시계 방향으로 배치
this->indices.push_back(0);
// 첫 버텍스를 마지막에 재활용
if (i == numTriangles - 1)
this->indices.push_back(1);
else
this->indices.push_back(i + 2);
this->indices.push_back(i + 1);
}
예제 완성 (30각형)
예제 완성 (5각형)
예제 완성 55각형
'그래픽스 > DX11' 카테고리의 다른 글
D3D11 - 2차원 애니메이션 + 깊이 버퍼 (2) | 2024.10.20 |
---|---|
DX11 - 2차원 변환(VertexShader작업) (1) | 2024.10.03 |
퐁라이팅 (0) | 2024.09.30 |
DX11 - 무게중심좌표계 이론 (0) | 2024.09.24 |
D3D11 - 벡터와 레스터화 (1) | 2024.09.13 |