6. Image Texture Mapping

이현기·2022년 8월 14일
0

RayTracing:The-Next-Week

목록 보기
6/9
  • 주의 사항
  1. 이 글은 RayTracing:The Next week을 공부하며 작성한 글이다.
  2. 모든 사진, 글은 RayTracing:The Next week에서 가지고 왔다.
  3. 영어 해석, 이론적으로 틀린 내용이 존재할 경우가 매우 크다. (지적해주시면 감사합니다.)
  4. 글을 쓰는 능력이 매우 안좋으니 이해해주세요. 연습 중 입니다.

LearneOpenGL에서 배웠던 정말 사진을 이용한 texture를 입히는 그런 작업을 할 수 있는 공부같다. 그래픽스 분야에서 텍스처에 의해 화면에 표시되는 quality가 매우 상승할 수 있기 때문에 texture에 관해서 공부를 잘 해보자.

우리는 hitpoint인 PP로 부터 표면의 coordinate (u,v)(u, v)를 계산할 수 있다. 그러면 우리는 이 좌표들을 사용하여 우리의 procedural solid texture에 사용할 수 있다. 그리고 또한 우리는 image를 읽어서 이미지를 indexing하기 위한 2D (u,v)(u, v) texture coordinate로도 사용할 수 있다.

scaled (u,v)(u, v)를 image안에서 직접적으로 사용하는 방법은 u와 v를 int타입으로 바꾼 다음에 그것을 pixel좌표로 사용하는 것이다. 하지만 이 방법은 imaeg의 resolution을 변경하게 된다면 code까지 바뀌게 된다고 한다. 그래서 이 방법 대신에 가장 보편적인 사용 방법은 image의 좌표를 사용하는 것이 아니라 texture coordinate를 사용하는 것이다. 방정식으로 표현을 하자면 (i,j)(i, j)는 image coordinate이고 Nx,NyN_x, N_y는 그 축에 해당하는 pixel의 개수를 뜻한다.

u=iNx1u = \frac{i}{N_x - 1}
v=jNy1v = \frac{j}{N_y - 1}

쉽게 이미지가 나타내는 좌표를 텍스처 좌표로 사용할 수 있게 변환을 해주어 handling하게 편하게 만드는 것이다.

다행히도 이런 작업을 위해서 쉽게 지원을 해주는 라이브러리가 stb_image.h로 존재를 한다. github에서 다운로드를 해서 texture를 간편하게 사용을 할 수 있다. 위의 header는 이미지를 unsigned char 타입으로 매우 큰 array로 만들어 준다. 그리고 그것들은 단지 [0, 255]로 이루어진 RGB 데이터를 모아둔 것이다.

나는 CMake를 사용하기 때문에 header file을 경로에 맞게 잘 설정해주었다.

결과

기존의 header file이 잘 되어있기 때문에 이번 chapter는 엄청 쉬웠다. 다양한 사진들로 texture를 입힐 수 있을 것 같다. 해픠~ 잘 되는 건가?

profile
안녕하세요!

0개의 댓글