|
|
Краткие комментарии к урокам 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 |
|