본문 바로가기
코드

버텍스 회전 이용하기

by ehei 2006. 7. 8.

Ogre3D에서의 버텍스 회전 이동은 간단하게 이루어진다.

 

참조:

http://www.ogre3d.org/wiki/index.php/Line3D

http://www.ogre3d.org/wiki/index.php/Quaternion_and_Rotation_Primer

 

작성한 코드는 MyManualObject라는 클래스를 갖고 있다. 이 클래스는 두 개의 메소드가 있다. 하나는 시작점과 끝점을 주어 3차원 공간 상의 선을 그린다. 또 하나는 3차원 형태의 화살표를 그린다. 화살표는 Z축 방향이 기본으로 그려진다. 회전을 위해 사원수 클래스가 쓰인다. Ogre3D에서는 사원수에 대한 개념 - Q(w,x,y,z)에서 w은 축에 대한 회전 정도, x,y,z은 물체가 이동할 축을 나타낸다는 점만 알면 쉽게 회전을 처리할 수 있다.

 


1152666260_Line3DSample.zip


 

일단 코드를 보자. 참고로 소스에서는 버텍스 데이터를 이용해 커스터마이징된 메쉬를 만들 수 있는 ManualObject가 사용되었다.

 

 Ogre::Vector3 axis = direction; // 회전할 방향. 벡터

 Ogre::Quaternion angleQuat = v[ 1 ].getRotationTo( axis ); // pitch와 yaw를 처리하는 사원수를 얻는다.


 Ogre::Matrix3 m;
 angleQuat.ToRotationMatrix( m ); // 회전 행렬을 얻는다

 

 Ogre::Matrix3 rotMat = Ogre::Matrix3::IDENTITY;
 rotMat.FromAxisAngle( axis, Ogre::Radian( roll ) ); // roll을 처리하는 회전 행렬을 구한다
 m = m * rotMat;

 

 for( for( size_t i = 0; i < v.size(); ++ i ) 

 {

      v[ i ] = v[ i ] * m; // 회전 행렬을 곱하여, 회전된 버텍스를 얻는다. p[ i ]는 버텍스 정보가 담긴 벡터임.

 }





'코드' 카테고리의 다른 글

Inno Setup 5 Script  (0) 2006.09.09
CQ 빌더  (0) 2006.08.01
VisualStudio 2005에서 QT 작업하기  (0) 2006.07.06
AABB 충돌 검사 방식에서의 정확한 구 검출  (0) 2006.07.06
빌보드 및 폰트 표시 테스트  (0) 2006.06.29