컴퓨터 그래픽스/그래픽 알고리즘 및 표현(10)
-
shading 표현
shader는 vertex shader와 pixel shader(hlsl기준)이 있습니다. vertex shader는 직접 vertex들을 받아와서 좌표계 변환을 통해 실제 우리가 보는 화면은 어떻게 보이는지 좌표를 나타내고 rasterization을 통해 필요한 픽셀을 계산하고 pixel shader로 넘겨주어서 색을 칠해주게 됩니다. vertex에서는 rotation, scaling, translation의 과정을 거치고 원근 표현을 거치고, world좌표계로 바꾼 뒤 raster(2차원)좌표계로 변하게 됩니다. vertex shader에서 vertex 값들을 가져오고 rotation을 위해 픽셀과, 변하는 각도를 넣어주고 행렬과 곱 translation을 위해 vertex.x + translatio..
2023.05.06 -
backface culling, 원근법
backface culling은 물체의 뒷면은 그리지 않는 것을 말한다. culling을 해줌으로써 보이지 않는 뒷면은 계산하지 않아서 효율적인 컴퓨팅 관리가 가능해진다. 물체가 뒷면인지 앞면인지는 어떻게 확인할지 고민해보면 물체가 앞면이면 normal vector가 양수가 나온다. 뒷면일 경우 음수가 나오게 될 것이다. 그러므로 양수인 것만 색으로 표현해주고 음수인 것은 넘겨버리면 될 것이다. normal이 양수인 경우에는 아래의 판단을 통해 그려준다. 모든 물체는 삼각형으로 이루어져 있다. 모든 정점 세개씩 돌면서 픽셀들 별로 해당 픽셀이 삼각형의 안에 있는지 판단한다. 안에 있는지 판단은 cross product를 통해 한다. 픽셀을 다 돌면서 해당 삼각형 안에 픽셀이 있는지 판단한다. DX는 왼손..
2023.05.03 -
깊이 버퍼(depth buffer)
깊이 버퍼는 사물의 앞 뒤를 판단하기 위해 이용하는 버퍼이다. 사물이 먼 순서대로 그리게 되면 상관이 없지만 순서대로 그리지 않지만 거리가 서로 다르다면 현실 세계를 제대로 반영하기가 어려워진다. 그래서 z 버퍼들을 가지고 사물이 어디가 앞이고 뒤인지 확인하는 것이다. 카메라는 z 축 정면을 보기 때문에 깊이 버퍼를 z축으로 한 것 같다. z축을 기준으로 카메라의 위치와 물체의 위치를 픽셀 단위로 계산하면서 각 픽셀의 거리 최솟값에서만 색을 넣어주어서 저장하면 가장 가까운 거리에만 색이 입혀지게 되면서 앞 뒤가 구분되게 된다. z버퍼는 모든 픽셀에 대하여 초기화가 되고 그려질 물체에만 색이 입혀지게 된다. 삼각형 그리기 const vec3 trianglePoint1; const vec3 triangleP..
2023.04.01 -
2차원 transformation
2차원 transformation에서는 해볼 것은 3가지 변환이다. 1. rotation 2. translation 3. scale rotation 회전변환으로 원점을 중심으로 회전하는 것을 나타낸다. 2차원에서는 점을 중심으로 회전을 하고 3차원에서는 축을 중심으로 회전을 하게 된다. translation 좌표 이동이고 덧셈으로 나타낸다. vertex.x + translation, vertex.y + translation ... scale 크기 변환으로 곱셈으로 크기를 변경해준다. vertex.x * xScale, vertex.y * yScale ... 처음 변환을 하려면 vertex들을 가져오고 rotation을 할때는 어느 각도로 rotation을 할지 넘겨준 뒤 변환한 것을 return하면 된다...
2023.02.22 -
Rasterization 원 그리기
원은 무수히 많은 삼각형으로 이루어진 것으로 볼 수 있다. 앞에서 했었던 삼각형 그리기를 이용하여 원을 그려볼 것이다. https://whdtjr222.tistory.com/68 Rasterization Rasterization은 3D 좌표계의 오브젝트를 2D로 비율에 맞게 옮겨주는 과정이다. Rasterization을 이용하여 삼각형을 그려볼 것이다. Rasterization의 과정은 2단계로 볼 수 있다. 3d 좌표계에서 NDC(normalized devic whdtjr222.tistory.com 어떻게 그릴지 그려보자 8개의 삼각형으로 원을 그린다고 했을 때 vertex는 9개가 들어간다. 원을 표현하는 벡터를 좌표 상에 나타냈을 때 정리해서 코드로 옮기기 쉽게 하자 주의해야할 것은 vertex가 ..
2023.02.22 -
Rasterization
Rasterization은 3D 좌표계의 오브젝트를 2D로 비율에 맞게 옮겨주는 과정이다. Rasterization을 이용하여 삼각형을 그려볼 것이다. Rasterization의 과정은 2단계로 볼 수 있다. 3d 좌표계에서 NDC(normalized device coordinates) 로 옮겨주는 과정 NDC에서 Raster 좌표계(Screen 좌표계)로 옮겨주는 과정 그리고 삼각형을 그리기 위해서 해당 픽셀이 삼각형 내부에 있는지 판단하고 내부에 있다면 색을 넣어주어서 삼각형을 그리게 된다. 1. 3d 좌표계에서 NDC로 옮겨주는과정 보통 3D에 물체가 있다고 가정하고 해당 vertex들을 처리하는게 그래픽스 파이프라인이다. 그래서 3차원 벡터의 vertex들을 정해주고 해당 vertex를 NDC 좌..
2023.02.15