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

2Arton - ошиблись разделом, вам в раздел Болтовня.

/////////////////////////////////////////
// при инициализации объекта
D3DXVECTOR3 right( 1, 0, 0 );
D3DXVECTOR3 up( 0, 1, 0 );
D3DXVECTOR3 look( 0, 0, 1 );
D3DXVECTOR3 pos( 0, 0, 0 );
/////////////////////////////////////////

/////////////////////////////////////////
// В цикле
D3DXMATRIX out;

// Делаем оси ортогональными
D3DXVec3Normalize(&look, &look);

D3DXVec3Cross(&up, &look, &right);
D3DXVec3Normalize(&up, &up);

D3DXVec3Cross(&right, &up, &look);
D3DXVec3Normalize(&right, &right);

float x = -D3DXVec3Dot(&right, &pos);
float y = -D3DXVec3Dot(&up, &pos);
float z = -D3DXVec3Dot(&look, &pos);

// Строим матрицу
out._11 = right.x;
out._12 = up.x;
out._13 = look.x;
out._14 = 0.0f;

out._21 = right.y;
out._22 = up.y;
out._23 = look.y;
out._24 = 0.0f;

out._31 = right.z;
out._32 = up.z;
out._33 = look.z;
out._34 = 0.0f;

out._41 = x;
out._42 = y;
out._43 = z;
out._44 = 1.0f;

device->SetTransform( D3DTS_WORLD, &out );
/////////////////////////////////////////

/////////////////////////////////////////
// Поворот 
D3DXMATRIX result,pitchMatrix,yawMatrix,rollMatrix;
D3DXMatrixRotationAxis( &pitchMatrix, &D3DXVECTOR3( 1, 0, 0 ), pitchAngleRadians );
D3DXMatrixRotationAxis( &yawMatrix, &D3DXVECTOR3( 0, 1, 0 ), yawAngleRadians );
D3DXMatrixRotationAxis( &rollMatrix, &D3DXVECTOR3( 0, 0, 1 ), rollAngleRadians );

result = pitchMatrix * yawMatrix * rollMatrix;
D3DXVec3TransformCoord( &right, &D3DXVECTOR3( 1, 0, 0 ), &result );
D3DXVec3TransformCoord( &look, &D3DXVECTOR3( 0, 1, 0 ), &result );
D3DXVec3TransformCoord( &up, &D3DXVECTOR3( 0, 0, 1 ), &result );
/////////////////////////////////////////

/////////////////////////////////////////
// Перемещение в зависимости от направления
pos += right * xSpeed;
pos += up * ySpeed;
pos += look * zSpeed;
/////////////////////////////////////////

/////////////////////////////////////////
// Перемещение по осям
pos += xSpeed;
pos += ySpeed;
pos += zSpeed;
/////////////////////////////////////////
__________________

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