블로그 이미지
˙Jisoo

카테고리

분류 전체보기 (98)
Programming (35)
Game Project (23)
Almighty Engine (8)
Daily Life (19)
Photo Shots (11)
Total22,054
Today42
Yesterday77

 비정상적으로 작동할 때의 모습

2차원에서 작업할때완 달리 3차원에서 작업할때는 이리저리 살펴보는것이 필요해서 가장먼저 어느정도 테스트용으로 사용가능한 카메라 클래스를 제작중입니다..
어디까지나 테스트용으로 둘러보기 위한것이므로 아주 기본적인 기능만 있기에 추후 게임용으로 쓰려면 여러군데 손봐야겠지요
테스트 작업용 카메라 만들기도 벅찬데 게임상에서 쓰일 카메라를 제대로 만들수 있을런지 걱정됩니다...;;

오늘 하루동안 yaw pitch roll 과 상하전후좌후 움직이도록 만들어놓으려고 했는데 yaw pitch roll 에서부터 문제가 발생합니다..ㅠ.ㅠ
분명 생각했던 방법대로 짜고 처음 실행해보았을 때는 그런가보다.. 했는데 어째 볼수록 게임에서 카메라를 움직이던 것과 무언가 틀립니다....
(여기서 말하는 게임에서 카메라는 보통 fps게임에서 플레이어가 죽었을 시 spectator 모드로 조종할 때의 카메라 조종 방식)
여기 저기 찾아본 결과 로컬스페이스를 기준으로 yaw 를 움직여서 그랬습니다.
생각해보니 pitch로 카메라가 바라보는 시점이 바뀔경우 로컬스페이스의 업벡터가 같이 변경되고 그 변경된 업벡터를 기준으로 yaw 적용을 하니 원치않던 움직임이 나오는 것은 당연했습니다.






정상적으로 작동하는 모습

그래서 yaw 할때 업벡터를 로컬스페이스의 업벡터가 아닌 월드스페이스 업벡터로 설정하도록 바꾸었습니다.
결과가 더 이상해졌습니다....;;
이때 많이 고민을 했는데 중요한 작업 하나를 빼먹고 있었습니다.
월드스페이스의 업벡터로 yaw를 변경했으면 분명 로컬스페이스 내의 업벡터 값도 변하겠지요. 룩앳벡터 (아.. 도대체 우리말의 표현은 무엇인지;;) 가 바라보는 방향과 같은 선상으로요.
즉 월드스페이스의 업벡터 기준으로 yaw를 적용 한 만큼 로컬스페이스 내의 업벡터도 회전하여야 합니다.
다행히 그렇게 했더니 원하는대로 작동을 하더군요..
그 간단한 한줄짜리 생각을 못해서 참...ㅠ.,ㅠ

pitch 는 그냥 로컬스페이스의 측면벡터,업벡터,룩앳벡터 로 해도 적용 되고 yaw 와 roll에만 이렇게 적용하면 됩니다.
아래는 그냥 나중에 또 까먹고 제 글을 찾아보는 일이 생길까봐.. 간단한 의사코드

1번째 방법 :
yaw( y ) {
  D3DXMatrixRotationAxis ( &matrixRotY , &월드스페이스 업벡터 , y );
  D3DXVecTransformNormal =>  로컬 업벡터 에 &matrixRotY 적용;
  D3DXVecTransformNormal =>  로컬 측면벡터에 ~~~~;
  D3DXVecTransformNormal =>  로컬 룩앳벡터에 ~~~~;
}

2번째 방법:
yaw ( y ) {
  로컬 측면벡터 = 룩앳벡터 와 월드스페이스업벡터 내적;
  로컬 업벡터 = 측면벡터와 룩앳벡터 내적;
  D3DXMatrixRotationAxis ( &matrixRotY , &로컬업벡터 , y );
  로컬 측면,룩앳벡터에 matrixRotY 적용;
}
Posted by ˙Jisoo

댓글을 달아 주세요

최근에 달린 댓글

최근에 받은 트랙백

글 보관함