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



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


clock.Create(m_pScene) ;

double dSpin = -0.1;

// Создать стержень с минутной стрелкой C3dFrame si;

si.Create(Sclock) ;

C3dShape rl;

rl.CreateRod(0, 0, -0.5, О, О, 10, 0.4, 16);

rl.SetColor(0, 0, 1);

sl.AddChild(Srl) ;

// Присоединить минутную стрелку CHand bighand(lO) ;

sl.AddChild(Sbighand) ;

bighand.SetPosition(0, 0, 0) ;

// Присоединить шестеренку CGear gl(1.5, 1.5, 8) ;

sl.AddChildf&gl) ;

gl.SetPosition(0, 0, 5.5);

// Привести стержень во вращение sl.SetRotation(0, 0, 1, dSpin);

}

/b> Я»:'?' Глава 6. Перемещение объектов в макете

Фрейм стержня создается как потомок по отношению к фрейму всего механизма. Затем к фрейму стержня присоединяется цилиндрический объект, который является его визуальным представлением. Минутная стрелка создается как объект класса CHand, производного от CSdShape, который мы рассмотрим чуть позже. Шестеренка тоже является объектом отдельного класса CGear, производного от CSdShape, и точно так же присоединяется к фрейму стержня. Последнее, что осталось сделать, — привести фрейм во вращение функцией C3dFrame::SetRotation.

Стрелки создаются из двух цилиндров и конуса:

CHand::CHand(double 1)

{

CreateRod(0, 0, О, О, О, 0.5, 1, 16);

SetColor(l, 1, 0);

CSdShape r;

r.CreateRod(0, 0, 0.25, 0, 1-3, 0.25, 0.20, 16);

r.SetColor(0, 0, 1);

AddChild(&r) ;

CSdShape с;

c.CreateCone(0, 1-3, 0.25, 0.75, TRUE, 0, 1, 0.25, 0, FALSE, 16);

c.SetColor(l, 1, 0);

AddChild(Sc) ;

}

С шестеренками дело обстоит несколько сложнее. Внешний и внутренний радиус зубцов определяется двумя окружностями. Затем окружности разбиваются на части по числу зубцов, что и дает нам положения вершин (Рисунок 6-10). Генерация списка данных для внешних граней зубцов завершает первую стадию создания фигуры.

Рисунок. 6-10. Конструирование зубцов шестеренки


При создании боковых граней шестеренки используются нормали, чтобы грани воспроизводились в виде плоских поверхностей. Если не задавать нормали, механизм визуализации скругляет стороны шестеренок, и на их гранях появляют-




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