Вычислить вектор между 2 D3DXVECTOR3 независимо от расстояния

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

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

D3DXVECTOR3 TargetVector(D3DXVECTOR3 *target, D3DXVECTOR3 *firer)

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

Спасибо!

-Райан


person TotalJargon    schedule 11.04.2013    source источник


Ответы (1)


Если вам нужен вектор направления, который начинается с firer и указывает на target, просто вычтите firer из target, т.е.:

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;
}
person Barış Uşaklı    schedule 11.04.2013
comment
Построен без '&' на цели и стрелке, а нормализация позволит мне перевести торпеду так: ' torpedo[i].posVec3 += (torpedo[i].directionVec * torpedo[i].speed); ' Правильно? - person TotalJargon; 11.04.2013
comment
Да, при условии, что directionVec имеет правильный оператор для умножения на скаляр. - person Barış Uşaklı; 11.04.2013
comment
directionVec - это D3DXVECTOR3, так что я предполагаю, что это нет-нет? Также как использовать выделение кода в комментариях? Меня уже давно это бесит xD - person TotalJargon; 11.04.2013
comment
Просто используйте ` вокруг слова, чтобы поставить кавычки. Вероятно, в D3DX есть метод умножения вектора на скаляр. msdn.microsoft.com/en -нас/библиотека/окна/рабочий стол/ - person Barış Uşaklı; 11.04.2013
comment
Попробуйте перейти на DirectXMath, а не продолжая использовать устаревшую математическую библиотеку D3DX. Вы также можете использовать XNAMath, если вы еще не используете Windows 8.x SDK. - person Chuck Walbourn; 25.08.2014