Показать сообщение отдельно
Старый 27.08.2011, 00:47   #21
alcoSHoLiK
Дэвелопер
 
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений
(для 110 пользователей)
Ответ: передвижение с помощью матриц

Попробуй поменять местами функции MoveEntity и RotateEntity. Должно получиться

   MoveEntity(matWorldPos,UP1,0,UP2); 
   RotateEntity(matWorldRY,mx);
   D3DXMatrixMultiply(&matWorld,&matWorldPos,&matWorldRY);
   SetTransform(WORLD,matWorld);
	pMesh->DrawSubset(0);
Правка:
Пардон, не внимательно глянул. Вызовы MoveEntity и RotateEntity пусть остаются как есть, а вот в вызове D3DXMatrixMultiply надо поменять местами matWorldPos и matWorldRY.

---

Наблюдаемый тобой эффект (поворот объект вокруг другой оси после перемещения) можно объяснить таким образом. Матрица поворота в действительности всегда поворачивает вокруг начала координат. Если объект находится в начале координат, то будет казаться, что он поворачивается вокруг своей оси. На самом деле он поворачивается вокруг оси, которая проходит через начало координат, это сразу становится заметным при смещении объекта.

Как же повернуть объект вокруг своей оси? В общем случае это делается за три шага:
1) построить вектор из начала координат в центр объекта и переместить объект вдоль этого вектора так, чтобы его центр оказался в начале координат
2) повернуть объект (или систему координат -- все относительно)
3) вернуть объект на прежнее место, переместив его вдоль построенного ранее вектора в обратную сторону

В твоем частном случае должно быть достаточно поменять местами порядок умножения матрицы смещения и матрицы поворота, чтобы достичь желаемого эффекта.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
St_AnGer (27.08.2011)