Показать сообщение отдельно
Старый 06.10.2008, 16:15   #1
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений
(для 1,540 пользователей)
Печаль Преобразование координат в D3D

Т.к я щас пишу свой графический движок, а опыта работы с D3D у меня маловато то ессесно возникла глупая(а мож и нет )проблема преобразования координат . Знач юзаю я функция SetTransform(D3DTS_WORLD,&matrix).матрица работы с объектом (вращение , движение) создается при помощи вот этой функции:

void RotateMatrixOnAxis(D3DXMATRIX *matWorld, D3DXVECTOR3 vPos, D3DXVECTOR3 vAxs, float fRad )
{
if( matWorld != NULL )
{
// это положение матрицы
D3DXVECTOR3 vDist = D3DXVECTOR3( matWorld->_41, matWorld->_42, matWorld->_43 );
// получаем смещение относительно О
vDist -= vPos;
// матрица такая же как и изменяемая
D3DXMATRIX mWorldO = *matWorld;
// только смещаем на полученный вектор
//ChangeMatrixPosition( &mWorldO, vDist );
mWorldO._41=vDist.x;
mWorldO._42=vDist.y;
mWorldO._43=vDist.z;
// получаем матрицу поворота относительно оси
D3DXMATRIX Out;
D3DXMatrixIdentity( &Out );
D3DXMatrixRotationAxis( &Out, &vAxs, fRad );
// получаем повернутую матрицу, но не смещенную
D3DXMatrixMultiply( &mWorldO, &mWorldO, &Out ); // вращение вокруг центра координат
// прибавляем позицию, вокруг которой вроде как крутили - получаем итоговую матрицу
mWorldO._41 += vPos.x;
mWorldO._42 += vPos.y;
mWorldO._43 += vPos.z;
// передаем
*matWorld = mWorldO;
}
};

так вот беда в том что когда я применяю матрицу, например к кубу, то куб едет вперед, а вращается вокруг своей собственной оси, а мне надо так, чтобы повернули куб и он поехал в ту сторону, куды повернули. А он отказывается! Муд*лко!

в чем трабла так и не понял.
мож кто подскажет способ решения проблемы. ну или на крайняк мона ссылки дать

плиз помогите
__________________

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