2023. 2. 22. 11:59ㆍ컴퓨터 그래픽스/그래픽 알고리즘 및 표현
원은 무수히 많은 삼각형으로 이루어진 것으로 볼 수 있다.
앞에서 했었던 삼각형 그리기를 이용하여 원을 그려볼 것이다.
https://whdtjr222.tistory.com/68
Rasterization
Rasterization은 3D 좌표계의 오브젝트를 2D로 비율에 맞게 옮겨주는 과정이다. Rasterization을 이용하여 삼각형을 그려볼 것이다. Rasterization의 과정은 2단계로 볼 수 있다. 3d 좌표계에서 NDC(normalized devic
whdtjr222.tistory.com
어떻게 그릴지 그려보자
8개의 삼각형으로 원을 그린다고 했을 때 vertex는 9개가 들어간다.
원을 표현하는 벡터를 좌표 상에 나타냈을 때
정리해서 코드로 옮기기 쉽게 하자
주의해야할 것은 vertex가 시계 방향으로 들어가야한다는 것이다. 앞에서 해봤듯이 삼각형의 normal vector로 삼각형을 판단하기 때문에 왼손 법칙을 따르는 DX는 시계 방향을 기본으로 삼각형을 그리게 된다.
그러면 v0, v2, v1 순서로 삼각형 vertex가 들어가서 그려지게 될 것이다.
그리고 색을 넣어서 표현해준다.
중심 색을 검은색으로 해주고 가장자리 색들을 다른 코드로 설정해준다
// deltaTheta = 2.0f * PI / float(numberOfTriangle)
for (float theta = 0.0f; theta < 2.0f * PI; theta += deltaTheta) {
vec3 vertex = center + vec3(radius * cos(theta), radius * sin(theta), 0.0f);
this->vertices.push_back(vertex);
colors.push_back(vec3(1.0f, 0.8f, 0.0f))
}
인덱스를 시계방향으로 꺼내오는 방법 vertex 0은 계속 쓰이므로 처음에 넣는다.
이러한 방식으로 계산을 하는 것은 비효율적이다. 나중에 개선된 방법을 이용한다.
for (int i = 0; i < numTriangles; i++) {
indices.push_back(0);
if (i == numTriangles - 1) {
indices.push_back(1);
} else {
indices.push_back(i + 2);
}
indices.push_back(i + 1);
}
그리고 삼각형의 개수를 조금씩 늘려보자
3개
6개
32
원에 가까워지고 있다.
'컴퓨터 그래픽스 > 그래픽 알고리즘 및 표현' 카테고리의 다른 글
깊이 버퍼(depth buffer) (0) | 2023.04.01 |
---|---|
2차원 transformation (0) | 2023.02.22 |
Rasterization (0) | 2023.02.15 |
perspective 원근표현 (0) | 2023.02.09 |
Phong shading 을 이용한 물체의 표현 (0) | 2023.02.05 |