ПРОГРАМИРУЕМ 3D ГРАФИКУ ИСПОЛЬЗУЯ DirectX




Перемещение объектов - часть 16


• Это летающий танк.

• Мне было лень возиться с колесами.

Решайте сами.

На Рисунок 6-12 изображена диаграмма подвижных частей танка (вместе с колесами). Иллюстрация приведена на цветной вкладке.

. Составные части танка


Создание собственного контроллера движения

/h2>

В приложении Tank класс C3dTank является производным от C3dFrame. Последовательность, в которой строится танк, такова: сначала мы присоединяем корпус к внешнему фрейму, затем присоединяем башню к корпусу и в последнюю очередь присоединяем пушку и радар к башне. Радар приводится в постоянное вращение. Пушка может подниматься и опускаться, вращаясь вокруг своей горизонтальной оси. Башня может вращаться вокруг вертикальной оси корпуса.

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

C3dTank::C3dTank() {

// Создать фрейм

C3dFrame::Create(NULL) ;

// Загрузить составные части танка и построить танк

m_hull.Load(IDX_HULL) ;

AddChild(&m_hull) ;

m_turret.Load(IDX_TURRET) ;

m hull.AddChild(&m_turret);

m_gun.Load(IDX_GUN) ;

m_turret.AddChild(&m_gun) ;

// Радар имеет собственный фрейм,

// чтобы было удобнее управлять осью вращения

C3dFrame rframe;

rframe.Create(&m_turret);

C3dShape radar;

radar.Load(IDX_RADAR) ;

rframe.AddChild(Sradar) ;

radar.SetPosition(0, 0, -0.3);

rframe.SetPosition(О, О, 0.3);

rframe.SetRotation(0, 1, 0, 0.1);

SetGun(25) ;

}

Единственное, что может здесь показаться странным, — это то, что я использовал для радара отдельный фрейм. Мне пришлось поступить так из-за того, что в первоначальном варианте танка ось у радара была смещена относительно того места, где я хотел расположить радар. Поэтому я задал начало координат фрейма в той точке башни, где помещается ось, и сместил объект-радар внутри фрейма, чтобы он находился над осью вращения (Рисунок 6-13).

Все объекты, из которых состоит наш танк, были созданы в 3D Studio и преобразованы в формат .X с помощью утилиты conv3ds, входящей в DirectX 2 SDK. Они были включены в файл приложения RC2 в качестве ресурсов:




Содержание  Назад  Вперед