본문 바로가기

개인공부/C++ Graphics

OpenGL #12 Projection (1/3)

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