2013-04-11 16 views
0

Итак, вот мой сценарий: у меня есть космический корабль, каждый космический корабль может нацеливаться на другой корабль и огненные торпеды, а торпеде нужен направленный вектор для перемещения, вектор должен быть независим от расстояние.Вычислите вектор между 2 D3DXVECTOR3 независимо от расстояния

Я ищу, чтобы создать метод, который возвращает D3DXVECTOR3 построен таким образом:

D3DXVECTOR3 TargetVector(D3DXVECTOR3 *target, D3DXVECTOR3 *firer)

Кто-нибудь есть опыт в этом вопросе? Было бы здорово, если бы кто-нибудь мог даже указать мне на любые достойные, легко понятные учебники по математике D3D, поскольку все, что я нашел до сих пор, основано на рендеринге изображений, а не на математических уравнениях.

Спасибо!

-Ryan

ответ

2

Если вы хотите направление вектора, который начинается с firer и точек target просто вычесть из firertarget т.е.

direction = target - firer; 

Существует D3DXVec3Subtract его в D3DX Lib.

Если вы хотите иметь нормальную единицу, которая является вектором, длина которого равна 1, то нормализуйте его с помощью D3DXVec3Normalize.

Таким образом, вы будете иметь:

D3DXVECTOR3 TargetVector(D3DXVECTOR3 *target, D3DXVECTOR3 *firer) 
{ 
    D3DXVECTOR3 direction; 
    D3DXVec3Subtract(&direction, target, firer); 

    D3DXVec3Normalize(&direction, &direction); 
    return direction; 
} 
+0

Построенные без «&» на цели и Фирере, и нормализация позволит мне перевести торпеды, как: «торпеда [я] .posVec3 + = (торпеды [ i] .directionVec * torpedo [i] .speed); ' правильно? – TotalJargon

+0

Да, предполагая, что 'directionVec' имеет правильный оператор для умножения со скаляром. –

+0

directionVec - D3DXVECTOR3, так что я предполагаю, что это не-нет? Также как я могу использовать ключевые моменты кода в комментариях? Меня это раздражало какое-то время. XD – TotalJargon