Projection 은 벡터와 matrix 를 사용한다 (행렬)
벡터는 엔지니어링을 전공한 사람은 알다시피 Directional Vector 와 Position Vector 가있다.
방향성이 있냐 아니면 그냥 위치 벡터이냐 차이인데
우리는 벡터와 행렬을 곱해서 새로운 벡터값을 얻기위해 Mat을 사용한다.
곱이라고 하긴 뭐하고 벡터와 행렬의 관계는 합성함수같은 개념이라고 생각하면 좋다.
F(x) 가 행렬이고 G(x) 가 벡터라면
F(g(x)) 의 관계같은 느낌이지만 모두 곱하기라고 말하니 곱하기로 정의하겠다.
결국 이런걸 왜하느냐?
벡터값을 Transform 하여서 새로운 벡터값을 찾아내기위함인데 이는 우리가 카메라를 물체를 중심으로 돌때
물체의 위치를 계산하기 위함이다.
(아니 카메라가 도는데 왜 물체의 벡터값을 바꾸느냐?)
사실은 물체를 중심으로 카메라가 도는것처럼 보이더라도 카메라를 기준으로 물체가 도는것이다.
그래서 물체의 벡터값을 바꿔줘야하는것.
결론은! 3D 물체의 데이터를 2D 에 투영화 해야하는데 필요한 계산식이라는것이다.
# 2학년때 공부했는데 다시 공부하려니까 많이잊어버린 것 같다.... 블로그를 생활화 하자.
계산은 glm 라이브러리로 할 수 있다.
일단 쉐이더에 아래 함수를 추가하자

이후 메인파일에

라인을 추가해준다. 코멘트를 보면 첫 네개의 파라미터가 세계의 크기를결정한다.
orthographic 에대한건...
orthographic vs perspective projection 으로 나뉠수 있는데 일단 이건 다음시간에...
한마디로 orthographic 은 원근법이 없는 렌더링방식
perspective 는 원근법을 추가한 방식이다.
또한 쉐이더를 약간 수정해준다.

MVP 란 뭐냐? Model View Projector 인데 이건 다음시간에 다뤄보자.
아무튼 간단히 말해서 MVP 라는 세개의 행렬을 순서에맞게 합성하고(곱하고) 포지션 좌표랑 곱하면
3D 를 2D 에 투영해서 보여줄수 있다는것이다.
* 행렬은 순서에 맞지않게 곱하면 답이 달라지기 때문에 주의한다!
그리고 쉐이더에 바인딩만 하면


그렇게 해서 돌려보면 이렇게 텍스쳐가 약간 멀어졌다.
'개인공부 > C++ Graphics' 카테고리의 다른 글
| OpenGL #14 Projection - MVP(3/3) (0) | 2025.01.17 |
|---|---|
| OpenGL #13 Projection (2/3) (0) | 2025.01.16 |
| OpenGL #11 Blending (0) | 2025.01.14 |
| OpenGL #10 Texture (1) | 2025.01.14 |
| OpenGL #9 Renderer (0) | 2025.01.13 |