Программирование графики с использованием Direct3D

       

Функция TargetWin::OrientFrame()


Функция обратного вызова OrientFrame() используется для изменения ориентации фреймов ракет в соответствии с движением цели. Эта работа совершается функцией LookAt() интерфейса Direct3DRMFrame, которая ориентирует один фрейм так, чтобы он «смотрел» на другой. Определение функции OrientFrame() выглядит следующим образом:

void TargetWin::OrientFrame(LPDIRECT3DRMFRAME frame, void* p, D3DVALUE) { LPDIRECT3DRMFRAME targetframe = (LPDIRECT3DRMFRAME)p; LPDIRECT3DRMFRAME scene; frame->GetScene(&scene); frame->LookAt(targetframe, scene, (D3DRMFRAMECONSTRAINT)0); }

Сначала подготавливается указатель на фрейм цели, который инициализируется с помощью задаваемого пользователем второго параметра функции. Затем следует получить корневой фрейм сцены. Он необходим, поскольку функция LookAt() подобно многим другим функциям интерфейса Direct3DRMFrame, требует, чтобы ей указали фрейм, который будет использоваться в качестве системы координат (фактически, если вы хотите, чтобы в качестве системы координат использовался корневой фрейм сцены, можете просто передать 0).

И, наконец, вызывается функция LookAt(). Первый аргумент функции LookAt() — это указатель на фрейм, за которым мы хотим следить. Второй аргумент определяет систему координат. Третий аргумент позволяет ограничить перемещение фрейма вдоль осей системы координат. Мы хотим, чтобы наши фреймы ракет наслаждались полной свободой, и поэтому указываем в этом параметре 0, а не какой-либо набор ограничивающих флагов.



Содержание раздела