: 3차원 물체들을 시각적으로 나타내보는 그래픽 과제이다. mlx라는 라이브러리를 이용하고, 레이 트레이싱이라는 기술을 이용하여 3차원의 물체들을 사실감 있게 만든다. + 수학 공식을 어떻게 코드화를 시킬지에 대해서도 고민을 하게 되고, 적용을 해보게 된다.
: miniRT의 Tutorial이다. 이것을 통하여 과제를 정말 수월하게 해볼 수가 있다. Tutorial이 끝나면 이것을 바탕으로 다른 물체들을 표현하면 된다.
링크 : https://github.com/GaepoMorningEagles/mini_raytracing_in_c
: Ray Tracing에 대한 Tutorial이다. 물론 이 것도 좋긴 하지만 개인적으로는 1번이 더 수월하게 배워갈 수 있었던 것 같다.
링크 : https://github.com/cos18/ray-tracing-in-one-weekend-mlx
: 1번 Tutorial을 마치게 되면, 어느 정도 뼈대가 만들어진다.
추가로 해야될 것은 원기둥 + 평면과 그림으로 되어있는 것을 mlx로 바꿔내는 작업이다. 아래의 링크는 원기둥과 평면에 대한 내용이 나와있다. 전부 다 맞지는 않고 코드도 수정해야 될 것들이 있기 때문에 참고만 하는 것이 좋다.
링크 : https://velog.io/@sham/miniRT-11-%EC%9B%90%EA%B8%B0%EB%91%A5-%EA%B5%AC%ED%98%84-%EC%B6%94%EA%B0%80
: 이 과제를 하면서 벡터의 내적과 외적에 대해서 공부를 해보는 것은 중요하다. 벡터로 방정식을 풀어 가기 때문에 벡터의 내적과 외적은 공부를 하도록 하자.
링크(내적) : https://ansohxxn.github.io/c++ games/chapter3-2-2/
링크(내적 + 외적) : https://math-development-geometry.tistory.com/45
: 정말 오래전에 공부를 하고 놓았던 벡터를 만나게 되었다. 레이트레이싱 기법이 결국 내가 보는 시야(벡터)와 물체와의 연관성을 파악한 뒤 연관성이 있다면 앞에 물체가 있는 것이고, 연관성이 없다면 앞에 물체가 없는 것이다. 결국엔 수학식을 코드로 바꾸어 놓는 일이지만, 물체가 어떻게 표현되는지 보기 위해서는 벡터를 보지 않을 수가 없다. 굉장히 복잡한 식들이 많지만 결국에는 벡터로 인하여 저렇게 복잡한 것들을 다 표현해 낼 수 있다는 것이 신기하였다.(물체, 빛, 그림자 등등)
: mlx는 사실 fractol이라는 과제를 하면서 어느 정도 공부를 하였었다. 그래서 이 과제의 기본 틀 자체는 이전 과제에서 했던 틀과 유사하게 mlx setting을 하였고, 오히려 더 간단하게 셋팅이 된 부분도 있었다. 그래서인지 조금 아쉬운 부분이 있었다면 multi thread로 프로그램을 조금 더 가볍게 만들었으면 어땠을까 하는 생각이 들기도 하였다.
: 사실 그래픽 과제에 엄청난 애정은 없었다. 보기에도 예쁘고 재미있기는 하지만, 이쪽으로 나가고 싶은 생각이 없어서 그런지 기본에 충실하려고 했던 것 같다. 다행히도 선배들이 만들어 놓으신 tutorial이 있었고, 이를 잘 이해해보려고 생각하였다. 방정식이 생각보다 복잡하고, 오랜만의 수학공부라 쉽지는 않았지만 그럼에도 불구하고 노력 끝에 보는 3d 그림은 나의 호기심을 자극하고 더 재밌는 것을 해볼까 하는 생각도 들게 하였다. 정말 해보고 싶은 것은 태양계 행성들이 도는 것을 손으로 만들어 보고 싶기도 했었다.
: 마지막 시험이 C라는 것을 제외하고서 앞으로의 과제에서 C로 하는 과제는 지나왔다. 아쉬우면서도 오랜시간 거의 C만 보고 살았는데 이제는 보내줄 때가 되지 않았나 싶다. 몇년 전에 아두이노를 하면서 왜 이 언어는 말도 안되는 포인터를 쓰는가에 대해서 고민을 많이 했었는데, 그 포인터가 C를 화려하게 해주는 모습이었던 것 같다. 향후에도 C언어를 할지는 모르겠지만 정말 재미있는 언어였다고 해주고 싶다.