[GPG 1 글 4.3] pivot 포인트 변경후 카메라 이동 문제

GPG 시리즈 관련 질답, 논의 공간.

Moderator: 류광

h2h1995
Posts: 2
Joined: 2019-04-03 16:38

pivot 포인트 변경후 카메라 이동 문제

Post by h2h1995 »

안녕하세요.
OpenGL 을 공부중인 초심자입니다.

우선 GPG 도서와는 관련이 없는 질문이라 정말 죄송하게 생각합니다.
어디다 질문할데는 없고.. 정말 난감한 상황에 실례를 무릅쓰고 올려봅니다.

제가 아래와 같이 OpenGL 에서 pivot 포인트를 변경하여 해당 위치를 기준으로 회전을 시키는 코드를 작성중입니다.
해당 짤막한 코드는 다음과 같습니다.

float ratio = (float)width / (float)height;
glm::mat4 projection = glm::ortho(-ratio, ratio, -1.0f, 1.0f, -100.0f, 100.0f);

glm::mat4 model = glm::mat4(1.0);
model = glm::translate(model, _pivot);
model = glm::translate(model, glm::vec3(_trans_x, _trans_y, 0.0f));
model = glm::scale(model, glm::vec3(_zoom, _zoom, _zoom));
model = model * _rotation;
model = glm::translate(model, -_pivot);

glm::mat4 view = glm::lookAt(
glm::vec3(0, 0, 0.0f), // Camera position is at (0,0,_zoom), in world space
glm::vec3(0, 0, -1.0f), // and looks at the origin
glm::vec3(0,1,0) // Head is up (set to 0,-1,0 to look upside-down)
);

glm::mat4 MV = view * model;

glMatrixMode(GL_PROJECTION);
glLoadMatrixf(glm::value_ptr(projection));

glMatrixMode(GL_MODELVIEW);
glLoadMatrixf(glm::value_ptr(MV));


해당 _pivot 변수는 마우스를 클릭시 해당 view 메트릭스의 방향으로 ray intersection 을 수행해서 가장 가까운 지점을 찾아낸 지점입니다.
찾아낸 지점을 기준으로 rotation 은 잘 됩니다..
하지만 _pivot 포인트를 변경시 카메라가 움직이는듯합니다.
아래 캡쳐 동영상을 올려 보았습니다.

http://archive.tcltk.co.kr/files/tmp/reproduce.mp4

해당 동영상을 보시면.. 변경된 _pivot 포인트 위치로 카메라의 중심점? 이 이동하는듯 합니다.
이 문제를 수정할려면 어떻게 해야할지.. 조언좀 부탁드립니다.
거의 2-3주째 이걸 해결 못하니.. 답답한 마음에 이렇게 실례를 무릎쓰고 올려봅니다.

감사합니다.
류광
Posts: 3805
Joined: 2001-07-25 09:00
Location: GPGstudy
Contact:

Re: pivot 포인트 변경후 카메라 이동 문제

Post by 류광 »

안녕하세요~ 회원 가입 고맙습니다.

안타깝게도 답글이 안 달리네요. throw bug( http://throwbug.com )에도 질문을 올려 보시면 어떨까 합니다.

( h2h1995 님 및 다른 회원 분들께 참고로 말씀 드리면, 독자 게시판의 경우 책 내용과 무관한 질문은 임시보관소로 이동하거나 삭제하지만, 이 글은 링크된 GPG 글과 적어도 카메라라는 주제가 겹치므로 그대로 두었습니다. 이 정도의 유연성은 괜찮지 않을까 합니다...)
h2h1995
Posts: 2
Joined: 2019-04-03 16:38

Re: pivot 포인트 변경후 카메라 이동 문제

Post by h2h1995 »

류광님 이해 감사드립니다.
아무래도 이 문제는 피봇 위치가 변경되었을때.. 매트릭스를 새로 계산해줘야 할 것 같습니다.
답변 감사드리며, 알려주신 싸이트에 다시한번 질문 올려보겠습니다.
감사합니다. ^^
Post Reply