Главная » Просмотр файлов » Ю.М. Баяковский, А.В. Игнатенко - Начальный курс OpenGL (DOC)

Ю.М. Баяковский, А.В. Игнатенко - Начальный курс OpenGL (DOC) (1124366), страница 18

Файл №1124366 Ю.М. Баяковский, А.В. Игнатенко - Начальный курс OpenGL (DOC) (Ю.М. Баяковский, А.В. Игнатенко - Начальный курс OpenGL (DOC)) 18 страницаЮ.М. Баяковский, А.В. Игнатенко - Начальный курс OpenGL (DOC) (1124366) страница 182019-05-11СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 18)

Б.4- Пример 3: Текстурирование и анимация

193

glRotatef (CurAng / 2, 1, 0, 1);

// Чтобы тетраэдр вращался вокруг центра, его // надо сдвинуть вниз по оси oz glTranslatef (0, -0.33, 0);

// Задаем цвет диффузного отражения для тетраэдра glColor3fv(mat_diff2);

// Проводим построение тетраэдра glCallList (TETR_LIST); }

void Display (void)

{

// Инициализация (очистка) текущего буфера

// кадра и глубины

glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

// Построение объектов

DrawFigures ();

// Перестановка буферов кадра

glutSwapBuffers (); }

void Redraw (void)

{

// Увеличение текущего угла поворота CurAng+=l;

// Сигнал для вызова процедуры создания изображения // (для обновления) glutPostRedisplay (); }

int main(int argc , char **argv) {

194 Приложение Б. Демонстрационные программы

// Инициализация функций библиотеки GLUT glut Init (&argc , argv );

// Задание режима с двойной буферизацией, // представление цвета в формате RGB, // использование буфера глубины glutInitDisplayMode(GLUT_DOUBLE |

GLUT_RGB |

GLUT_DEFTH); // Создание окна приложения

glutCreateWindow ("Examplewof „using^OpenGL" ); // Регистрация функции построения изображения glutDisplayFunc( Display ) ;

// Регистрация функции обновления изображения glutldleFunc (Redraw); // Инициализация функций OpenGL Init ();

// Цикл обработки событий glutMainLoop () ; return 0;

}



Рис. Б.З.

Результат работы программы Б.5.

Б. 5. Класс для работы с OPENGL в WIN32

195

Б.5. Класс для работы с OpenGL в Win32

Программа Б.6. Файл glrc.li.

#ifndef _GLRC_H_ #define _GLRC_H_

// заголовки OpenGL ^include <gl/gl.h> ^include <gl/glu.h>

class GLRC

{ public :

// создание из идентификатора окна GLRC( HWND wnd );

// деструктор ~GLRC() ;

// удаление, (также вызывается из деструктора) void Destroy () ;

// Создание контекста рисования.

// Необходимо вызвать до использования OpenGL

bool Create ();

// Создан ли контекст рисования? bool IsCreated ();

// Является ли контекст рисования текущим? bool IsCurrentQ const;

// Делает контект текущим bool MakeCurrent () ;

196 Приложение Б. Демонстрационные программы

// Вызывается в конце рисования, // показ созданного изображения void SwapBuffers () ;

private:

// создан ли контекст

bool m_created;

// окно, для которого контекст

HWND m_wnd;

// контекст устройства

HDC m_dc;

// контекст рисования OpenGL

HGLRC m_glrc;

};

#endif

Программа Б.7. Файл glrc.cpp.

T^include <windows.h> T^include "glrc.h" T^include "assert, h"

GLRC: :GLRC(HWND wnd) : m_created ( false )

{

assert( wnd );

m_wnd = wnd;

m_dc = : : GetDC ( wnd );

assert ( m_dc ); }

GLRC::~GLRC()

{ _

if (m_created)

Б. 5. Класс для работы с OPENGL в WIN32 197

Destroy () ; }

void GLRC:: Destroy ()

{

wglDeleteContext (m_glrc) ;

: : ReleaseDC (m_wnd, m_dc) ;

m_created = false ; }

bool GLRC::MakeCurrent()

{

assert ( m_created );

if (IsCurrent ()) return true ;

BOOL res = wglMakeCurrent (m_dc, m_glrc); return (res != FALSE);

}

bool GLRC:: Create ()

{

assert ( !m_created );

int nPixelFormat = 0;

DWORD flags ; flags = Pro_DRAW_TO_WJNDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;

static PKELFORMATDESCRIPTOR pfd =

{

sizeof (PLXELFORMATDESCRIPTOR) ,

1,

198

Приложение Б. Демонстрационные программы

flags ,

PFD_TYPE_RGBA, 24,

О, О, О, О, О, О,

1,

о, о, о, о, о, о,

32,

о, о,

PFD_MAIN_PLANE,

О,

О, О, О

};

pfd . cAlphaBits = 8;

nPixelFormat = ChoosePixelFormat ( m_dc, &pfd );

BOOL res =

SetPixelFormat ( m_dc, nPixelFormat, &pfd ) ;

if (res = FALSE) return false ;

m_glrc = wglCreateContext ( m_dc );

m_created = true ;

return MakeCurrent (); }

void GLRC:: SwapBuffers ()

{

assert (m_created ) ; : : SwapBuffers (m_dc);

Б. 5. Класс для работы с OPENGL в WIN32 199

}

bool GLRC : : IsCurrent () const

{

assert ( m_created );

return :: wglGetCurrentContext () = m_glrc; }

bool GLRC:: IsCreatedQ

{

return m_created;

}

Приложение В.

Примеры практических заданий

В.1. Cornell Box

Целью задания является создание изображения заданной трехмерной статичной сцены средствами OpenGL с использо­ванием стандартных геометрических примитивов.

Требуется создать изображение сцены Cornell Box. Эта клас­сическая сцена представляет собой комнату кубического вида, с отсутствующей передней стенкой. В комнате находятся геомет­рические предметы различных форм и свойств (кубы, парал­лелепипеды, шары), а также протяженный источник света на потолке. Присутствует также камера с заданными параметрами (обычно она расположена так, чтобы была видна вся комната).

В одной из лабораторий Корнельского университета такая комната существует в реальности, и ее фотографии сравнива­ются с изображениями, построенными методами трассировки лучей для оценки точности методов. На странице лаборатории (http://graphics.cornell.edu) можно найти описание геометрии сцены в текстовом формате.

201

202 Приложение В. Примеры практических заданий


Рис. В.1. Пример сцены Cornell Box.

Реализации сцены, приведенной на рисунке В.1, достаточно для выполнения задания, хотя возможно введение новых пред­метов дополнительно к существующим или вместо них. Привет­ствуется использование примитивов библиотек GLUT и GLU. Внимание! Сцена не должна превращаться в набор разнород­ных предметов. Эстетичность и оригинальность выполненного задания принимается во внимание.

Протяженный источник света на потолке комнаты можно эмулировать несколькими точечными источниками.

За простейшую реализацию сцены ставится 7 баллов.

Реалистичность сцены можно значительно повысить за счет разбиения многоугольников. Суть этого в том, что в модели осве­щения OpenGL освещенность вычисляется в вершинах много­угольника с учетом направления нормалей в этих вершинах, а затем линейно интерполируется по всей поверхности. Если ис­пользуются относительно большие многоугольники, то, очевид­но, невозможно получить действительно плавные переходы и за-

B.l. CORNELL BOX

203

тенения. Для преодоления этого недостатка можно разбивать большие грани (стены, например) на множество меньших по раз­мерам. Соответственно разброс в направлении нормалей в вер­шинах одного многоугольника не будет столь велик и затенение станет более плавным (1 балл).

Наложение текстур на объекты сцены поощряется 2-мя бал­лами.

Дополнительными баллами оценивается присутствие в сцене теней. Один из простейших алгоритмов наложения теней приве­ден в разделе 8.2. За его реализацию можно получить до 2 бал­лов. Использование более продвинутых алгоритмов (например, shadow volumes) будет оценено дополнительными баллами.

Реализация устранения ступенчатости (antialiasing) методом, предложенным в разделе 8.1 или каким-либо другим, оценивает­ся в 2 балла.

За введение в сцену прозрачных объектов и корректный их вывод дается 1 балл. Механизм работы с прозрачными объекта­ми описан в разделе 7.1.

Задание оценивается, исходя из 15 баллов.

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



Простейший вариант сцены (только освещение)

7 баллов

Разбиение полигонов

+1 балл

Использование текстур

+2 балла

Наложение теней

+2 балла

Устранение ступенчатости

+2 балла

Использование прозрачных объектов

+1 балл

Дополнительные баллы можно получить за хорошую опти­мизацию программы, необычные решения, эстетичность и т.д.

204 Приложение В. Примеры практических заданий

В.2. Виртуальные часы

Целью задания является создание трехмерной интерактив­ной модели аналоговых часов.

Рис. В.2. Пример трехмерных виртуальных часов. Обязательные требования к программе:

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

  • Часы на экране обязательно должны иметь минутную и часовую стрелки. Секундная — по желанию, но очень при­ветствуется (иначе трудно будет определить, ходят часы или нет).

В.2. Виртуальные часы

205

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

  • Сцена должна быть интерактивной, т.е. давать приемле­мую частоту кадров в секунду (>10) при визуализации на машине с аппаратным ускорителем трехмерной графики. Если программа будет работать медленно, баллы могут быть снижены.

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

Пожелания к программе:

  • Поощряется введение дополнительной геометрии. Напри­мер, ремешков, маятников и т.д. Можно сделать часы с ку­кушкой, будильник и т.п.

  • Желательно наличие возможностей для управления про­цессом визуализации. Например, наличие/отсутствие тек­стур, режимы заливки, детализации и т.д.

  • Приветствуется выполнение задания в виде демонстрации, т.е. с возможностью работы в полноэкранном режиме и немедленным выходом по клавише Escape. Можно напи­сать программу как Screen Saver.

  • Постарайтесь использовать максимум возможностей биб­лиотеки OpenGL. Блики, отражения, спецэффекты — за все это обязательно даются дополнительные баллы.

206 Приложение В. Примеры практических заданий

• Проявите вкус — сделайте так, чтобы нравилось прежде всего Вам. Но не увлекайтесь — оставайтесь реалистами.

Максимальная оценка — 20 баллов. За минимальную реали­зацию требований ставиться 10 баллов. Еще до 10 баллов мож­но получить за использование в работе возможностей OpenGL (текстур, прозрачности, сферического текстурированяи и пр.), оригинальных и продвинутых алгоритмов, количество настроек, а также за эстетичность и красоту сцены.

В.З. Интерактивный ландшафт

Рис. В.З. Пример трехмерного ландшафта.


Целью данного задания является генерация и вывод с по­мощью OpenGL поверхности ландшафта, а также обеспечение интерактивного передвижения над ней.

Характеристики

Тип файла
Документ
Размер
3,41 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6384
Авторов
на СтудИзбе
307
Средний доход
с одного платного файла
Обучение Подробнее