Иллюстрированный самоучитель по Visual Studio.Net


Перспективная проекция - часть 2


Мы вычисляем его и подаем на вход функции в качестве второго параметра.

Вспомните и найдите функцию, в которой мы задавали размеры окна, и увеличьте вертикальный размер до 500, так как далее мы собираемся изображать более крупные объекты. Введите определения новых глобальных переменных:

//====== Углы поворотов изображения вокруг осей X и Y

double gdAngleX, gdAngleY; //====== Сдвиги вдоль координат

double gdTransX, gdTransY, gdTransZ = -4.;

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

glEnable(GL_DEPTH_TEST);

в функцию Init. Туда же вставьте установку режима заполнения полигонов

glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);

и уберите строку, задающую текущий цвет вершин

glColorSd (1., 0.4, 1.);

так как мы теперь будем задавать его в другом месте. При подготовке окна OpenGL и формата его пикселов надо установить бит AUX_DEPTH — учет буфера глубины. Замените существующий вызов функции auxlnitDisplayMode на: auxInitDisplayMode (AOX_SINGLE I AUX_RGB I AUX_DEPTH);

В функции перерисовки, приведенной ниже, мы создадим куб, координаты которого будем преобразовывать с помощью матрицы моделирования. Порядок работы с этой матрицей таков:

  • Сначала с помощью команды glMatrixMode (GL_MODELVIEW); матрица моделирования выбирается в качестве текущей. Обычно при этом она сразу инициализируется единичной матрицей (команда glLoadldentity).

  • После этого текущая (единичная) матрица последовательно домножается справа на матрицы преобразования системы координат, которые формируются с помощью команд glTranslate* (сдвиги), glRotate* (вращения) или glScale* (растяжения-сжатия).

  • Наконец, команды glVertex* генерируют вершины примитивов, то есть координатные векторы точек трехмерного пространства. Векторы умножаются (справа) на текущую матрицу моделирования и тем самым претерпевают такие преобразования, чтобы соответствовать желаемому местоположению и размерам в сцене OpenGL.



    Начало  Назад  Вперед