이제 vertex shader로 데이터를 옮길 수 있게 되었다. 하지만 vertex shader와 fragment 사이에는 rasterize 부분이있고 그 부분에서는 우리가 이제 그 중간 지점들에 대해서 색깔을 어떻게 주어야 하는지에 대해서 의문이 쌓일 수 있다. 이는 바로 linear interpolation 파트가 도와줄 것이다.
linear interpolation은 각 직선의 중간값을 구해주는 방법이라 생각하면 된다.(중고등학교 때 내분점 생각하면 쉽다)

일차원에서는 다음과 같이 중간지점의 값을 생각할 수 있다.
마찬가지로 2차원에서는 다음과 같이 확장해서 사용할 수 있다.

그러면 세가지 점은 어떻게 interpolation을 시켜야할까?
대학생때 선형대수를 보면 약간의 답이 나올거다. 영상에는 Barycentric coordination을 사용하는 느낌으로 나온다.

다음과 같이 vector -> ab와 vector ac를 기저벡터로 하는 좌표평면을하면 두 벡터가 선형적으로 독립하면 (ab로 ac를 표현할 수 있지않으면) 두벡터는 2차원적으로 span하다고 할 수 있다. (즉 두벡터로 2차원공간의 모든 점은 유일한 값 두개로 표현이 된다)
09 선형 독립(Linear independence), Span, 기저(Basis) 그리고 차원(Dimension) · linear algebra
adioshun.gitbooks.io
위의 url를 참고하면 이 영상을 이해하기가 쉬울거다.
위와같은 방식으로 결국 우리는 삼각형 내부 혹은 외부의 어떤점의 값을 두개의 값과 세개의 점으로 표현할 수 있게 된다.
raterization stage을 통해 triangle과 overlap되는 부분의 pixel을 알려준다음 barycentric coordinate를 이용해 표현할 색을 선정해준다.
코드는 다음 url을 보면됨
https://github.com/comwitch/VulkanStudy/tree/tutorial7
GitHub - comwitch/VulkanStudy: this is VulkanStudy code
this is VulkanStudy code. Contribute to comwitch/VulkanStudy development by creating an account on GitHub.
github.com
생각보다 바꿔줄 것이 많이 없다. .frag 파일 바꿔준 다음 vertexinputattributeDescription 쪽 바꿔주고 color 변수 넣어주면된다.
결과물

추가적으로 swapchain부분에서 chooseSwapSurfaceFormat 파트를 바꿔주면

다음과 같이 바뀐다.
'vulkan' 카테고리의 다른 글
vulkan tutorial #8 Swap Chain Recreation (0) | 2023.06.23 |
---|---|
vulkan 쉬어가기 시어핀스키 삼각형 (0) | 2023.06.14 |
Vulkan tutorial #6 Vertex Buffers (0) | 2023.06.13 |
Vulkan tutorial #5 part2. Command Buffers Overview (1) | 2023.06.12 |
Vulkan tutorial #5 part1. swap chain overview (0) | 2023.06.11 |