자체 제작 3D 렌더러 제작기 episode 3. Perspective Projection

라코마코·2023년 11월 9일
1

렌더러제작

목록 보기
3/9

Source code: https://github.com/lacomaco/laco3DRenderer

Perspective Projection 구현 전에 간단한 Back face culling, orthogonal projection도 확인하고 작업에 들어갔다.

간단한 개념이기에 쉽게 끝날 줄 알았는데 혼자 착각에 빠져 작업이 길어졌다.

glm 라이브러리를 사용하고 있어 Perspective Projection은 손쉽게 구현이 가능하다.

  1. mat4.perspective 함수를 사용해 projection 함수를 넘긴다.
  2. lookAt 함수를 사용해 카메라 위치를 정의한다.

생성한 projection, view 함수를 shader로 넘겨 정점위치를 수정 후 화면에 렌더링하면 마무리된다.

이때 주의할점은 행렬 연산 순서에 주의해야한다.

    gl_Position = projectionMatrix * viewMatrix * moveMatrix * a_position;

projection - view - model - vertex 순서로 연산해야 화면에 표시된다.

혼자했던 삽질

위 이미지를 보면 왼쪽은 X축 방향으로 30도 회전한 것이고 오른쪽은 그렇지 않다.

근데 자세히 보면 왼쪽 사각형이 제자리에서 회전한것이 아니라 살짝 공중에 떠있는 상태에서 회전하고있다.

결론부터 말하면 이건 정상이다.

나는 이게 정상이 아니고 내 코드에 있는 버그인줄 알고 2시간 해맸는데... 정상이다.

이것이 왜 정상이냐면

2차원 사각형은 그림처럼 3차원 공간에서 z축 살짝 떨어져서 위치해있다.

이 상태에서 x축으로 회전하기 때문에 마치 원통처럼 회전하는것이다.

물체가 제자리에서 회전하기 위해선 물체의 중심이 회전축과 일치해야한다. 또는 카메라를 움직이는 꼼수를 사용하거나...

다음에 할 일

간단한 텍스처를 입힌 정육면체를 화면에 그리고 회전시키는 것을 구현해볼 예정이다.

지금은 vertex를 수작업으로 숫자로 한땀한땀 찍고 있는데 이게 정말 힘들다. 생각보다 피곤하고 지루한 작업이다. 정육면체 이후 바로 Wave Front obj 파일을 읽어서 화면에 출력하는 렌더러를 만들예정이다.

라이팅은 그 다음에 하는걸로.. 우선은 이쁜 모델을 화면에 찍어보고 싶은 마음이 크다

0개의 댓글