Показать сообщение отдельно
Старый 26.08.2011, 22:35   #20
Mind
ПроЭктировщик
 
Аватар для Mind
 
Регистрация: 24.02.2011
Сообщений: 188
Написано 13 полезных сообщений
(для 18 пользователей)
Ответ: передвижение с помощью матриц

Появился еще вопрос:
Как мне сделать сдиг тела а потом поворот в локальных координатах?
Делаю вот так:
   RotateEntity(matWorldRY,mx);
   MoveEntity(matWorldPos,UP1,0,UP2); 
   D3DXMatrixMultiply(&matWorld,&matWorldPos,&matWorldRY);
   SetTransform(WORLD,matWorld);
	pMesh->DrawSubset(0);
когда позиция = 0 то тело крутится как бы вокруг своей оси, а когда передвигаеться дальше тополучаеться что тело это child каой-то оси, т.е оно движеться не вокруг своей оси а вокруг другой как ребёнок вокруг парента? Что надо написать чтобы тело крутилось вокруг себя?

Функция поворота такая:

void RotateEntity(D3DXMATRIX& m,double angle)
{
  
  m._11 = cos(angle);   m._12 = 0;	  m._13 = -sin(angle);   m._14 = 0;
  m._21 = 0;   m._22 = 1;   m._23 = 0;   m._24 = 0;
  m._31 = sin(angle);   m._32 = 0;   m._33 = cos(angle);   m._34 = 0;
  m._41 = 0;   m._42 = 0;	  m._43 = 0;   m._44 = 1;

}
а передвижения:

void MoveEntity(D3DXMATRIX& m,float dx,float dy,float dz)
{
  

  m._11 = 1;   m._12 = 0;	  m._13 = 0;   m._14 = 0;
  m._21 = 0;   m._22 = 1;     m._23 = 0;   m._24 = 0;
  m._31 = 0;   m._32 = 0;     m._33 = 1;   m._34 = 0;
  m._41 += dx;   m._42 += dy;	  m._43 +=-dz;   m._44 = 1;

}
(Offline)
 
Ответить с цитированием