Необходимо сформировать матрицу Г перевода мира в систему координат наблюдателя. При использовании DirectX такую матрицу можно реализовать вычислением произведения матриц сдвига и вращения вокруг координатных осей при помощи функции SetVi ewAvi а (), код которой приведен в листинге 24.2.
Листинг 24.2
void SetViewAvia(void) {
//Объявим сомножители как объекты класса D3DXMATRIX D3DXMATRIX WX - D3DXMATRIX(1.0.0.0.0.1.0.0.0.0.1.0.0.0.0.1): D3DXMATRIX WY = D3DXMATRIX(1.0.0.0.0.1.0.0.0.0.1.0.0.0.0.1): D3DXMATRIX WZ = D3DXMATRIXC1.0.0.0.0.1.0.0,0.0.1.0.0.0.0.1): D3DXMATRIX SD = D3DXMATRIXC1.0.0.0.0.1.0.0.0.0.1.0.0.0.0.1): //Формируем матрицу сдвига SD SD_41» - XNab: SD_42« - YNab: SD_43= - ZNab:
//Для моделирования поворота линии визирования вокруг оси Y на угол Alpha //нужно все объекты повернуть на угол минус Alpha. Поскольку матрица Т будет //применяться именно к вершинам объектов виртуального мира, формируем ее //элементы следующим образом: WY_33 = WY_ll«cos ((Alpha/180*PD): WY_13 - -sin (Alpha/180*PI); WY_31 - sin (Alpha/180*PI):
//Мы не двигаем объекты, а поворачиваем на угол Alpha систему координат //наблюдателя. Матрица поворота объекта на угол Alpha отличается от матрицы //поворота осей на тот же угол знаком при синусе. То же относится и к двум //другим матрицам:
WX_33 - WX_22 - cos (AlphaX/180*PI); WX_32 - sin(AlphaX/180*PI); WX_23 = -WX_32;
WZ_22 - WZ.Jl - cos (AlphaZ/180*PI); WZ_21 = sin (AlphaZ/180*PI); WZ_12 - -WZ_21:
//Последовательность преобразований реализуется произведением матриц, причем //сомножители следуют в порядке выполнения преобразований: Т - SD*WY*WX*WZ: }
Классы совместимы по присваиванию снизу вверх, поэтому произведение, имеющее тип D3DXMATRIX, можно записать в матрицу Гтипа D3DMATRIX. Данная функция используется в проекте DirectX_scene для отработки перемещения наблюдателя в модельном мире.
Проецирование модели на плоскость
Проецирование модели на плоскость
Как и для преобразования вращения, программист может задавать матрицу проецирования самостоятельно или применять функции графических библиотек, позволяющие сформировать матрицу проецирования, исходя из заданных параметров проекционной системы.