Студопедия — Дисплейные списки OpenGL
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Дисплейные списки OpenGL

Руководитель Аппарата

Исполнительного комитета г.Казани И.В.Сивов

Новгородская область г. Боровичи, ул. Ленинградская д. 28

Реестровый номер ВНТ 011193

Тел/факс 8(81664) 201-89, 201-15

e-mail: [email protected]

 

ГРАФИК АВТОБУСНЫХ ЭКСКУРСИОННЫХ ТУРОВ ЛЕТО 2015

13.06.15 Кронштадт «Город морской славы»

20.06.15 Любытино «Славянская деревня»

21.06.15г. Валдай «Уездный город»

27.06-28.06.15г. «Псковские жемчужины» Псков-Изборск-Печеры-Пушкинские горы (ночлег на б/о «Пушкиногорье») экскурсии и питание по программе 2 дня.

03.07-05.07.15г. «Русь святая» Нижний Новгород-Дивеево-Владимир-Суздаль (ночлег в гостинице Н. Новгород) экскурсии и питание по программе 3 дня.

04.07.15г. Петергоф «Дворцы и фонтаны»

05.07.15г. Кончанское Суворовское + купание на озере

11.07.-12.07.15 «Там на неведомых дорожках» Торжок-Берново-Осташков-Селигер-Нилова Пустынь-Исток Волги-Вышний Волочек (ночлег в Осташкове) 2 дня.

17.07-19.07.15г. «Дивные места Карелии» Петрозаводск-Заповедник Кивач- о. Кижи- Сортавала «Мраморный каньон» (ночлег в Петрозаводске) 3 дня.

18.07.15г. Кронштадт «Город морской славы»

25.07-26.07.15г. СПб. «День военно-морского флота» 2 дня.

25.07.15г. Любытино «Славянская деревня» + водопад

26.07.15г. Старая Русса «Краса Новгородчины»

01.08-02.08.15г. «Легенды старого Выборга» 2 дня.

01.08.15 Валдай «Уездный город»

08.08-09.08.15г. о. Валаам+ Сортавала «Мраморный каньон» целый день на о. Валаам (ночлег в Сортавале) 2 дня.

08.08.15г. Петергоф «Дворцы и фонтаны»

09.08.15. В. Новгород + теплоходная прогулка

14.08.-16.08.15. «Малое золотое кольцо России» Углич-Ростов-Переславль Залеский-Сергиев Посад (ночлег в Ростове и Переславле Залеском) 3 дня.


ПРОДОЛЖАЕТСЯ НАБОР ГРУПП НА ОДНОДНЕВНЫЕ ЭКСКУРСИОННЫЕ ТУРЫ из БОРОВИЧЕЙ!!!
- 2 МАРТА ВЕЛ. НОВГОРОД "МАСЛЕНИЦА В ВИТОСЛАВИЦАХ"
- 9 МАРТА СПб. ЭРМИТАЖ " Бриллиантовые кладовые"
- 23 МАРТА СПб. Уникальный музей "ГРАНД МАКЕТ"
- 29 МАРТА СПБ. "ДЕЛЬФИНАРИЙ и МУЗЕЙ ВОДЫ"
Показать полностью..

ПО ВЫХОДНЫМ ПОЕЗДКИ В ВАЛДАЙ: ИВЕРСКИЙ МОНАСТЫРЬ и ЛЕДОВЫЙ ДВОРЕЦ "КРИСТАЛ" (катание на коньках). 15.08.15г. Тихвин «История одного города»

22.08.15г. Пушкин-Павловск (парки, дворцы, янтарная комната)

23.08.15г. Православные святыни В. Новгорода (три монастыря)

29.08.15г. СПб. «Город на Неве»

Подробная информация и запись по телефонам 8-(81664) 201-89, 201-15, 8- 950-681-10-83

 

Дисплейные списки OpenGL

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

 

Создание дисплейного списка

Чтобы создать дисплейный список нужно:

1. Cгенерировать и сохранить уникальный номер дисплейного списка

2. Между вызовами функций glNewList() и glEndList() единожды визуализировать необходимую графику

3. Теперь в функции, отвечающей за визуализацию кадра, достаточно вызвать необходимый дисплейный список с помощью команды glCallList

 

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

 

РАБОТА СО СПИСКАМИ ИЗОБРАЖЕНИЙ

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

void glNewList (GLuint list, GLenum mode)

void glEndList ()

Эти команды выглядят, как операторные скобки. Первая команда является заголовком (началом) нового списка изображений. Список заканчивается командой glEndList(). Параметр list представляет собой целочисленный идентификатор – имя списка. Параметр mode – символическая константа, определяющая следующие режимы сборки списка:

Константа Режим сборки списка
GL_COMPILE СПИСОК КОМАНД ТОЛЬКО КОМПИЛИРУЕТСЯ (НАКАПЛИВАЕТСЯ) ДЛЯ ВОЗМОЖНОГО ПОСЛЕДУЮЩЕГО ИСПОЛЬЗОВАНИЯ  
GL_COMPILE_AND_EXECUTE Команды исполняются и только потом заносятся в список

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

Вызов списка изображений осуществляется командой:

void glCallList (GLuint list)

Параметр list задает целочисленное имя списка изображений.

Рассмотрим пример подготовки и вызова списка изображений.

// Открываем список изображений (без выполнения) под номером 2

glNewList(2,GL_COMPILE);

glColor3f(1.0f, 0.0f,0.0f); // Задаем цвет создаваемого примитива

glBegin(GL_POLYGON); // Задаем сам примитив

glVertex3f(1.0f, 1.0f, 0.0f);

glVertex3f(–1.0f, 1.0f, 0.0f);

glVertex3f(–1.0f, –1.0f, 0.0f);

glVertex3f(1.0f, –1.0f, 0.0f);

glEnd();

glEndList(); // Закрываем список изображений под номером 2

glCallList(2);

В список можно включать вызовы уже готовых списков изображений. Рассмотрим список из двух

вызовов готовых списков 1 и 2:

// Открываем список изображений (без выполнения) под номером 1

glNewList(1,GL_COMPILE);

glColor3f(0.0f, 1.0f,0.0f);

glBegin(GL_TRIANGLES);

glVertex3f(1.0f, 2.0f, 0.0f);

glVertex3f(–1.0f, 2.0f, 0.0f);

glVertex3f(–1.0f, –2.0f, 0.0f);

glEnd();

glEndList();

// Открываем список изображений (без выполнения) под номером 2

glNewList(2,GL_COMPILE);

glColor3f(1.0f, 0.0f,0.0f);

glBegin(GL_TRIANGLES);

glVertex3f(1.0f, 1.0f, 0.0f);

glVertex3f(–1.0f, –1.0f, 0.0f);

glVertex3f(1.0f, –1.0f, 0.0f);

glEnd();

glEndList();

// Открываем список изображений (без выполнения) под номером 3

glNewList(3,GL_COMPILE);

glCallList(1);

glCallList(2);

glEndList();

// Вызов списка 3

glCallList(3);

Для выполнения сразу нескольких готовых списков используется команда:

void glCallList (GLsizei n,

GLenum type,

Const GLvoid *lists)

где n – количество исполняемых списков, lists – указатель на массив, содержащий список имен списков изображений, которые необходимо исполнить, type – тип значений в списке имен lists и может принимать следующие символьные константы:

 

Константа Тип значений в списке имен изображений
GL_BYTE ПАРАМЕТР LISTS ЯВЛЯЕТСЯ УКАЗАТЕЛЕМ НА МАССИВ С БАЙТОВЫМИ ЭЛЕМЕНТАМИ, ПРИНИМАЮЩИМИ ЗНАЧЕНИЯ В ДИАПАЗОНЕ [−128, 127]
GL_UNSIGNED_BYTE Параметр lists является указателем на массив с положительными байтовыми элементами, принимающими значения в диапазоне [0, 255]
GL_SHORT Параметр lists является указателем на массив с двухбайтовыми элементами, принимающими значения в диапазоне [−32768, 32767]
GL_UNSIGNED_SHORT Параметр lists является указателем на массив с положительными двухбайтовыми элементами, принимающими значения в диапазоне [0, 65535]
GL_INT Параметр lists является указателем на массив с четырехбайтовыми целыми элементами и т.д. (см. MSDN)

 

Перед вызовом команды glCallLists можно задать постоянное смещение к каждому имени списка изображения из массива lists. Это выполняется командой

void glListBase (GLuint base)

где base – целочисленное смещение. По умолчанию это смещение равно нулю.

Как уже было показано в примере, команды glCallList и glCallLists могут быть вложены в другие списки изображений. Уровней вложения не может быть больше 64.

При работе со списками, особенно при формировании шрифтов, приходится следить за номерами создаваемых списков, что не всегда удобно. Эту проблему легко разрешает функция glGenList, генерирующая непрерывный набор пустых дисплейных списков. Рассмотрим формат записи этой команды.

GLuint glGenList (GLsizei range)

Параметр range определяет количество пустых дисплейных списков, которые необходимо сгенерировать. Функция glGenList возвращает целое число n, которое является именем первого дисплейного списка. Если range больше 1, то также будут созданы пустые дисплейные списки с именами n+1, n+2,…, n+range−1. При нулевом значении range функция glGenList вернет значение 0 и никакой дисплейный список не создастся.

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

Допустим, имеется группа имен, например: 1, 3, 4, 5, 6, 8, 9, 10. Мы можем удалить из этой группы любую непрерывную последовательность имен списков, например, 4, 5 и 6. Для этого необходимо воспользоваться специальной командой

void glDeleteLists (GLuint list, GLsizei range)

где list – целое число, являющееся именем первого удаляемого списка изображений, range – количество удаляемых списков.

Для приведенного выше примера, оформление команды glDeleteLists выглядит следующим образом: glDeleteLists(4,3).

Ход работы:

1. Нарисовать коробок спичек, используя дисплейные списки.

2. На каждый объект коробки спичек (в том числе и сами спички) наложить текстуру.

3. К нарисованному объекту применить:

· Поворот;

· Масштабирование;

· Перенос;

· Каркас объекта;

· Обрезка объекта;

· Выдвижение/задвижение внутренней части короба.

4. Запрограммировать освещение объекта, используя создание источника света (возможность включения/выключения света).

 

 

 




<== предыдущая лекция | следующая лекция ==>
Основные операции | Тесты для 1-го рубежного контроля знаний по Основам экономической теории

Дата добавления: 2015-10-19; просмотров: 1219. Нарушение авторских прав; Мы поможем в написании вашей работы!



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

Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...

Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

Билет №7 (1 вопрос) Язык как средство общения и форма существования национальной культуры. Русский литературный язык как нормированная и обработанная форма общенародного языка Важнейшая функция языка - коммуникативная функция, т.е. функция общения Язык представлен в двух своих разновидностях...

Патристика и схоластика как этап в средневековой философии Основной задачей теологии является толкование Священного писания, доказательство существования Бога и формулировка догматов Церкви...

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

Сущность, виды и функции маркетинга персонала Перснал-маркетинг является новым понятием. В мировой практике маркетинга и управления персоналом он выделился в отдельное направление лишь в начале 90-х гг.XX века...

Разработка товарной и ценовой стратегии фирмы на российском рынке хлебопродуктов В начале 1994 г. английская фирма МОНО совместно с бельгийской ПЮРАТОС приняла решение о начале совместного проекта на российском рынке. Эти фирмы ведут деятельность в сопредельных сферах производства хлебопродуктов. МОНО – крупнейший в Великобритании...

ОПРЕДЕЛЕНИЕ ЦЕНТРА ТЯЖЕСТИ ПЛОСКОЙ ФИГУРЫ Сила, с которой тело притягивается к Земле, называется силой тяжести...

Studopedia.info - Студопедия - 2014-2024 год . (0.008 сек.) русская версия | украинская версия