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



Преобразования - часть 5


Объект после равномерного масштабирования по осям х, у и z


Обратите внимание на то, что коэффициенты масштабирования по осям у и z равны 1, а не 0. Если присвоить им нулевые значения, вам будет нелегко рассмотреть свои объект!

/h2>

Порядок преобразований

Мы рассмотрели отдельные преобразования переноса, поворота и масштабирования. Теперь давайте посмотрим, что происходит при выполнении серии последовательных преобразований. Начнем с переноса вдоль оси х, за которым следует поворот вокруг оси у. Результат изображен на Рисунок 5-7.

Рисунок. 5-7. Перенос вдоль оси х, за которым следует поворот вокруг оси у


Совпадает ли такой результат с тем, что вы ожидали увидеть? Текст функции приведен ниже:

void CMainFrame::OnEditTranrot() {

if (!m_pCurShape) return;

C3dMatrix m;

m.Translate(3, 0, 0) ;

m.Rotate(0, 45, 0) ;

m_pCurShape-»AddTransform(m, D3DRMCOMBINE_AFTER) ;

Как видите, мы осуществили перенос на 3 единицы вдоль оси х, после чего развернули объект на 45 градусов вокруг оси у. Во время поворота самолет находился на расстоянии в 3 единицы от начала координат. Следовательно, самолет описал дугу в 45 градусов по окружности радиусом в 3 единицы.

Давайте повторим те же самые преобразования, но на этот раз изменим их порядок. Результат изображен на Рисунок 5-8.

Как видите, результат значительно отличается от предыдущего. На этот раз все выглядит так, словно после переноса самолет развернулся вокруг собственной оси, а не вокруг оси у макета.

/h2>

Глава 5. Поеобоазования

Рисунок. 5-8. Поворот вокруг оси у, за которым следует перенос вдоль оси х


Только что мы сделали важное открытие: порядок применения преобразований чрезвычайно важен. Кроме того, мы выяснили, что для того, чтобы повернуть объект вокруг оси макета, следует применять поворот после всех переносов;

для того, чтобы объект вращался вокруг его собственной оси, поворот следует применить до переносов. Это необходимо знать, если вы хотите в полной мере контролировать положение всех объектов. В главе 6 мы воспользуемся этой методикой для имитации полета.




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