더럽지만..내가 그림판으로 그린 그림.. 먼저 보면..

기본적으로 다각형(그 중에서 삼각형, 오각형) 그리는 법을 알아야 한다.
삼각형의 가운데 중간점을 찍을 수 있으면 쉽게 풀릴 수 있다.
현재 각도 랑 다음 각도의 반을 나눠서 cos하면 해당 길이를 알 수 있다 하지만 길이도 반이 되야 하므로 또 반으로 나눠줌
//main.cpp
//가운데 정점 구하는 법
cos((angle + nextAngle) *0.5f) * 0.5f, sin((angle + nextAngle) *0.5f) * 0.5f
이것만 구해주면 쉽다.
0->2->1
0->3->2 ... 이런 식으로 가다가 마지막에는 1 정점으로 가줘야 한다.
따라서 아래와 같은 코드가 만들어집니다!
//main.cpp
FOR(count * 2) //#define FOR(n) for(int i = 0 ; i < n ; i++)
{
indices.push_back(0); // 중심점 인덱스
if (i + 1 < count * 2)
indices.push_back(i + 2);
else
indices.push_back(1); // 마지막 모서리의 다음은 첫 번째 모서리로 연결
indices.push_back(i + 1);
}
총 코드 ↓ ☆★ ☆★ ☆★ ☆★ ☆★ ☆★ ☆★ ☆★ ☆★ ☆★ ☆★ ☆★ ☆★ ☆★ ☆★ ☆★ ☆★ ☆★ ☆★ ☆★ ☆★
//main.cpp
UINT count = 5; // 버텍스 갯수
//Polygon : 정점 3개로 이루어진 3차원 상의 평면
//정점순서의 시계방향을 앞면으로 하며 앞면만 출력
float stepAngle = XM_2PI / count; // 2Pi나누기 count
//360/5 = 73
VertexColor center(0, 0, 0, 1, 1); // 원점과 색상 //(점x,점y,색R,색G,색B)
vertices.push_back(center); //center 추가 //0 index
//각 버텍스 설정
FOR(count)
{
float angle = stepAngle * i;
float nextAngle = stepAngle * (i + 1);
// 현재 모서리의 정점 추가
vertices.emplace_back(cos(angle), sin(angle), 0, 0, 1);
// 현재 모서리의 다음 모서리 정점 추가
//현재랑 다음 모서리의 가운데 정점
vertices.emplace_back(cos((angle + nextAngle) *0.5f) * 0.5f, sin((angle + nextAngle) *0.5f) * 0.5f, 0, 0, 1);
}
vertexBuffer = new VertexBuffer(vertices.data(), sizeof(VertexColor), vertices.size());
//0->2->1
//0->3->2
//...
//0->10->1
FOR(count * 2)
{
indices.push_back(0); // 중심점 인덱스
if (i + 1 < count * 2)
indices.push_back(i + 2);
else
indices.push_back(1); // 마지막 모서리의 다음은 첫 번째 모서리로 연결
indices.push_back(i + 1);
}

'공부 좀 해라★彡 > DirectX' 카테고리의 다른 글
Direct 2D 행렬을 사용해서 게임 수학 배우기/행렬을 이용해서 출력 및 활용 (1) | 2024.03.03 |
---|---|
Direct 2D 곰돌이ʕ •◆•ʔ 출력해보기 (2) | 2024.02.29 |
Direct 2D 화면에 출력하기 & 코드 (13) | 2024.02.28 |
Direct 2D 기본 - 코드 적용(버퍼 설정 & 창 띄우기) (2) | 2024.02.28 |
DirectX 2D 초반 기본기 책 내용 정리 (1) | 2024.02.28 |
댓글