Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СКТ - 5,6сем.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
8.67 Mб
Скачать

Параметры вида. Перспективная проекция

Объем сцены ограничен кубом с координатами точек вершин по диагоналям (-1. –1, -1) и (1, 1, 1).

Команда glFrustum задает параметры вида, определяющие область воспроизведения в пространстве. Все, что выходит за пределы этой области, будет отсекаться при воспроизведении. Первые два аргумента задают координаты плоскостей отсечения слева и справа, третий и четвертый параметры определяют координаты плоскостей отсечения снизу и сверху. Последние аргументы задают расстояния до ближней и дальней плоскостей отсечения, значения этих двух параметров должны быть положительными – это не координаты плоскостей, а расстояния от глаза наблюдателя до плоскостей отсечения. Например:

glFrustum (-1, 1, -1, 1, 3, 10);

glTranslatef(0.0, 0.0, -5.0); // перенос объекта по оси Z

Все, что рисуется с нулевым значением координаты Z, не будет видно наблюдателю, поскольку ближнюю плоскость отсечения расположили на расстоянии 3 единиц от глаза наблюдателя, располагающегося в точке (0, 0, 0). Поэтому перед воспроизведением смещаем систему координат на пять единиц вниз.

Команды glPushMatrix; и glPopMatrix можно заменить вызовом команды glLoadIdentity, «вернуться в исходное состояние».

Задать параллельную проекцию можно командой:

glOrtho (-2, 2, -2, 2, 0, 15.0); параметры аналогичны glFrustum.

Можно рассмотреть команду gluOrtho2D.

Можно использовать команду построения перспективы

gluPerspective(angX, // угол видимости в направлении оси Y

angY, // угол видимости в направлении оси X

1.0, // расстояние от наблюдателя до ближней плоскости отсечения

15.0); // расстояние от наблюдателя до дальней плоскости отсечения

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

glNormal3f(0.0, 0.0, 1.0);

Буфер глубины

Используется для передачи пространства. При воспроизведении каждого пикселя в этот буфер записывается информация о значении координаты Z пикселя, так называемая оконная Z.

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

glEnable (GL_DEPTH_TEST);

Код сцены начинается с очистки двух буферов: буфера кадра и буфера глубины:

glClear (GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);

Надстройки над OpenGl

Стандартной надстройкой является библиотека glu, физически располагаемая в файле glu32.dll. Кроме того, существует библиотека glut. Для ее подключения необходимо добавить строку:

uses DGLUT; //Для рисования куба с единичной длиной ребра используем:

glutSolidCube (1.0); и т.д.

glutSolidSphere (1.5, 20, 20);

glutSolidCone (0.5, 1.5, 20, 20);

glutSolidTorus (0.5, 1.5, 20, 20);

glutSolidDodecahedron;

glutSolidIcosahedron;

glutSolidTetrahedron;

glutSolidTeapot (1.5);

Источник света

При создании окна включается источник света:

glEnable (GL_LIGHTING); // разрешаем работу с освещенностью

glEnable (GL_LIGHT0); // включаем источник света

Это источник с именем 0. Можно еще добавить источник, например:

glEnable (GL_LIGHT1);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]