Краткие комментарии к урокам NeHe

версия 1.2 - 05 февраля 2005


Нижеследующий текст предназначен для тех людей, которым, по каким либо причинам, не удалось самостоятельно разобраться в примерах на FASM использующих OpenGL.

Так как примеры являются уроками NeHe, то писать полноценную публикацию не имеет смысла. В сети существуют полные переводы уроков и при желании их легко можно найти. А вот краткие комментарии не помешают, и возможно позволят увидеть основные действия по работе с тем или иным аспектом OpenGL без лишних обрамляющих команд.

Урок 1. Инициализация в Windows

Настройка и установка параметров

1. Получение Контекста Устройства(DC) окна с помощью функции GetDC с дальнейшим его
    сохранением.
2. Заполнение структуры PIXELFORMATDESCRIPTOR необходимыми данными: размер структуры,
    версия, флаги, пиксела, число бит на пиксел, число бит Z буфера, число бит Stencil буфера и т.п.
3. Проверка правильности заполнения структуры функцией ChoosePixelFormat.
4. Установка пиксельного формата функцией SetPixelFormat
5. Получение контекста окна посредством функции wglCreateContext.
6. С помощью функции wglMakeCurrent установить текущим контекст, полученный в пункте 5.
7. Установка размеров Viewport функцией glViewport.
8. Настройка матрицы проекции (GL_PROJECTION).
9. Настройка матрицы вида (GL_MODELVIEW).
10. Дополнительные настройки в зависимости от задач приложения.

Действия осуществляемые при выходе из приложения

1. Сброс текущего контекста окна функцией wglMakeCurrent.
2. Удаление контекста функцией wglDeleteContext.
3. Освобождение контекста устройства окна функцией ReleaseDC.

Урок 2. Отображение полигонов

Отрисовка сцены

1. Очистка BackBuffer'а, Z - буфера и Stencil - буфера, если это необходимо.
2. Настройка матриц.
3. Рисуем треугольниками: glBegin, GL_TRIANGLES
4. Рисовать вершину: glVertex3f
    (повторив 3 раза данную команду с разными координатами получим треугольник)
5. Завершить: glEnd
6. Показать на экран результат используя функцию SwapBuffers.

Урок 3. Отображение закрашеных цветом полигонов

Добавление цвета осуществляется функцией glColor..f. Встретив данную команду OpenGL все дальнейшие примитивы будет отрисовывать данным цветом, пока не встретит другую команду glColor..f с другими параметрами цвета.

Урок 4. Вращение полигонов

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

Урок 5. Отрисовка объемных фигур

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

Очень важное свойство не упомянутое выше это то, как расположены вершины в треугольнике. Стандартно при описании используется правило при котором вершины должны следовать по часовой стрелке. Так механизм визуализации сможет определить повернут данный треугольник к нам или нет и следовательно не будет отрисовывать невидимые полигоны.

Урок 6. Загрузка и отображение текстур

В OpenGL не существует встроенных функций по загрузке текстур поэтому приходиться использовать сторонние библиотеки или средства API. В нашем случае выбран способ позволяющий загружать файлы формата BMP посредством функции LoadImage. У данной функции существуют различные параметры определяющие откуда необходимо загрузить изображение.

Загрузка изображения и создание текстуры.

1. Создание заготовки текстуры посредством glGenTextures.
2. Загрузка изображения LoadImage и получение данных об изображении используя GetObject.
3. Установка текстуры текущей с помощью glBindTexture.
4. Создание непосредственно готовой текстуры на основе загруженного изображения
    - glTexImage2D.
5. Установка параметров сглаживания текстуры - glTexParameteri.
6. Удаление загруженного изображения - DeleteObject.

Действия осуществляемые при отрисовке

0. Включить использование текстур - glEnable. Данный пункт можно осуществить при
    инициализации OpenGL.
1. Установить текущей текстуру - glBindTexture.
2. Отрисовка полигонов или фигур.
3. Установка текущей другой текстуры (если нужно).
4. Отрисовка новых фигур и т.д.

Урок 7. Освещение и параметры сглаживания текстур

Настройка освещения.

0. Включить использование освещения - glEnable.
1. Установить различные параметры источника света используя glLightfv.

Загрузка изображения и создание текстуры

В данном уроке используется тот же самый алгоритм по загрузке и созданию текстур, что и в уроке номер 6. Отличие состоит лишь в создании 3 видов текстур с различными параметрами сглаживания.

Действия осуществляемые при отрисовке

Действия осуществляемые при отрисовке абсолютно те же самые, что и в уроке номер 6, только для наглядности используется установка одной текущей текстуры из трех в зависимости от нажатия клавиши F.

Урок 8. Смешивание (Blending)

Для включения смешивания используется функция glEnable с параметром GL_BLEND. Для различных настроек связанных со смешиванием в данном уроке используется связка функций - glColor4f и glBlendFunc.

Урок 9. Перемещение объектов в пространстве

Ничего нового в этом уроке нет. Используются математические формулы для вычисления значений координат и функции glTranslatef, glRotatef для перемещения и вращения текстурированных полигонов по заданному алгоритму.

Урок 10. Загрузка и отображение 3D мира

Как и в предыдущем уроке особых нововведений нет. Всего лишь реализован возможный вариант загрузки 3D мира из текстового файла.

Урок 11. Анимация вершин

Анимация производится посредством математических формул. На основе вычислений изменяются координаты вершин составляющих треугольники. В качестве добавки использована функция glPolygonMode позволяющая включать нужный режим отрисовки полигонов. Например сплошной или в виде проволочного каркаса.

Урок 12. Использование дисплейных списков

Создание списков

1. Создать список функцией glGenLists.
2. Начать определять список функцией glNewList.
3. Здесь располагаются обычные команды отрисовки примитивов и т.п.
4. Закончить определение списка функцией glEndList.

Отрисовка списков

Отрисовка происходит также как и отрисовка обычных примитивов. Вызывается командой glCallList.

При выходе из приложения

Удалить созданный список - glDeleteLists.

Урок 13. Использование текста

Создание шрифта

1. Создать список функцией glGenLists.
2. Создать стандартный шрифт используя функцию API CreateFont.
3. Выбрать созданный шрифт - SelectObject
4. Определить шрифт функцией wglUseFontBitmapsA.
5. Удалить созданный стандартный шрифт - DeleteObject.

Вывод текста

1. Поместить в стек атрибут дисплейного списка - glPushAttrib.
2. Установить начало с которого будет начинаться шрифт - glListBase.
3. Вызов отрисовки строки с текстом используя glCallLists.
4. Снять со стека атрибут дисплейного списка - glPopAttrib.

Урок 14. Использование объемного текста (Outline Fonts)

Все действия по созданию и отрисовке такого шрифта аналогичны действиям из 13 урока с той лишь разницей, что взамен функции wglUseFontBitmapsA необходимо использовать функцию wglUseFontOutlines.

Урок 15. Текстурирование объемного текста (Outline Fonts)

Настройка

1. Для создания шрифта используются действия описанные в уроке 14.
2. Загрузка текстуры производится методом из урока номер 6.
3. Производится настройка автогенерации текстурных координат с помощью glTexGeni.
4. Включается использование автогенерации текстурных координат:
    glEnable GL_TEXTURE_GEN_S (GEN_T).


Отрисовка

1. Установить текущей текстуру с помощью glBind.
2. Отрисовать текст посредством glCallLists.

Урок 16. Туман

Настройка

1. Установка режима тумана: glFogi. Варианты тумана - (GL_EXP, GL_EXP2, GL_LINEAR).
2. Установка цвета тумана: glFogfv
3. Установка плотности тумана: glFogf.
4. Параметры обработки: glHint.
5. Установка ближней границы: glFogf.
6. Установка дальней границы: glFogf.
7. Включение тумана: glEnable.

copyright © 2003-2006 keYMax
   © 2003-2006 keYMax
   Полное или частичное воспроизведение материалов сайта возможно только с разрешения автора
Компьютеры
Hosted by uCoz