MFC и OpenGL

MFC и OpenGL

Авторы:

Жанр: Программирование

Циклы: не входит в цикл

Формат: Полный

Всего в книге 2 страницы. У нас нет данных о годе издания книги.

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

Читать онлайн MFC и OpenGL


"Подать сюда MFС!!! – кричил он, топая всеми 4-мя лапами."

Сижу тут как-то, программку сочиняю, тут смотрю, царь зверей пожаловал. Вопрос задать пришел. Спрашивает как же OpenGL в MFC то вставить? Сначала думал отмажусь, потом смотрю, настойчивый такой царь попался. Письма шлет, желает знать как же все-таки её туда вставить-то. Вот и решил я примерчик на MFC состроить дабы цари меньше утруждали себя, а больше на солнышке бы нежились, чтоб у царей спокойно и хорошо все было, тогда и нам, простым зверушкам жить хорошо будет. И так поехали.

Для начала сделаем приложение MFC как диалог. Я назвал его BitScroll. Как это делать? Смотрите шаги по MFC.

Теперь, при помощи визарда добавим функцию

>BOOL CBitScrollDlg::PreCreateWindow(CREATESTRUCT& cs) {

> cs.style |= WS_CLIPSIBLINGS | WS_CLIPCHILDREN;

> return CDialog::PreCreateWindow(cs);

>}

Помните, мы устанавливали слиль окна в функции CreateWindow? Так вот это действие по смыслу тоже самое. Напомню как это выглядело в Win32API:

>hWnd = CreateWindow("Skeleton", "Skeleton", WS_OVERLAPPEDWINDOW |  WS_CLIPCHILDREN | WS_CLIPSIBLINGS, 50, 50, 700, 400, NULL, NULL, hInst, NULL);

Теперь обратимся к функции OnInitDialog(). В ней сначала вызывается функция базового класса, т.е. CDialog, а потом устанавливаются иконки для диалога. Давайте вставим наш код между иконками и CDialog::OnInitDialog().

>SetWindowPos(&wndTop, 0, 0, WIDTH, HEIGHT, SWP_NOMOVE);

>pDC = GetDC();

>CenterWindow();

>Init(); SetTimer(1,SPEED, NULL);

Теперь посмотрим, что мы сделали. Сначала сделаем окно нужного нам размера (макросы WIDTH и HEIGHT объявлены так #define WIDTH 640 и #define HEIGHT 480 в заголовочном файле).

Затем получим контекст для рисования. Установимся в центр вселенной и… вот, тут самое интересное, тут мы вызываем нашу собственную функцию, которая будет инициализировать OpenGL (напоминаю, что тоже самое делала функция Initial в программе на Win32API).

А потом включаем таймер, чтобы обеспечить анимацию. Обратимся теперь к Init(). Выглядит она итак:

>void CBitScrollDlg::Init() {

> CRect rect;

> HGLRC hrc;

> if (!bSetupPixelFormat()) return;

> hrc = wglCreateContext(pDC->GetSafeHdc());

> ASSERT(hrc != NULL);

> wglMakeCurrent(pDC->GetSafeHdc(), hrc);

> GetClientRect(&rect);

> glClearColor(0.0f, 0.0f, 0.0f, 0.0f);

> glClearDepth(1.0);

> glDepthFunc(GL_LESS);

> glEnable(GL_DEPTH_TEST);

> glShadeModel(GL_SMOOTH);

> glMatrixMode(GL_PROJECTION);

> glLoadIdentity();

> gluPerspective(45.0f, (GLfloat)rect.right / (GLfloat)rect.bottom, 0.1f, 100.0f);

> glMatrixMode(GL_MODELVIEW);

>}

Что мы тут делаем? Прежде всего вызываем ф-ию SetupPixelFormat(), это опять наша функция и мы посмотрим ее чуть позже.

Далее, как и раньше, получаем контекст рендеринга (маленькая деталь, ранее pDC(а точнее эта переменная называлась hDC) была объявлена как static HDC hDC, сейчас контекст рисования является пременной типа CDC, а ф-ция wglCreateContext и другие функции OpenGL требуют в качестве аргумента переменную типа HDC. Поэтому мы получаем этот hardware context с помощью pDC->GetSafeHdc()).

Затем делаем этот контекст текущим и настраиваем область отображения, так как это делалось в Initial() (Win32API)

Функция bSetupPixelFormat() содержит следующее:

>BOOL CBitScrollDlg::bSetupPixelFormat() {

> static PIXELFORMATDESCRIPTOR pfd = {

>  sizeof(PIXELFORMATDESCRIPTOR), // size of this pfd

>  1, // version number

>  PFD_DRAW_TO_WINDOW | // support window

>  PFD_SUPPORT_OPENGL | // support OpenGL

>  PFD_DOUBLEBUFFER, // double buffered

>  PFD_TYPE_RGBA, // RGBA type

>  24, // 24-bit color depth

>  0, 0, 0, 0, 0, 0, // color bits ignored

>  0, // no alpha buffer

>  0, // shift bit ignored

>  0, // no accumulation buffer

>  0, 0, 0, 0, // accum bits ignored

>  32, // 32-bit z-buffer

>  0, // no stencil buffer

>  0, // no auxiliary buffer

>  PFD_MAIN_PLANE, // main layer

>  0, // reserved

>  0, 0, 0 // layer masks ignored

> };

> int pixelformat;

> if ((pixelformat = ChoosePixelFormat(pDC->GetSafeHdc(), &pfd)) == 0) {

>  MessageBox("ChoosePixelFormat failed");

>  return FALSE;

> }

> if (SetPixelFormat(pDC->GetSafeHdc(), pixelformat, &pfd) == FALSE) {

>  MessageBox("SetPixelFormat failed");

>  return FALSE;

> }

> return TRUE;

>}

Как не трудно заметить, она почти полностью взята из Win32API приложения за исключением того, что hDC заменена на pDC->GetSafeHdc().

Теперь добавим в нашу программку обработчик от таймера (мы его недавно сделали в ф-ции Init())

>void CBitScrollDlg::OnTimer(UINT nIDEvent) {

> DrawScene();

> CDialog::OnTimer(nIDEvent);

>}

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

>void CBitScrollDlg::DrawScene() {

> static GLfloat angle = 0;

> glClearColor(0.0f, 0.0f, 0.0f, 1.0f);

> glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

> glLoadIdentity();

> glTranslatef(0.0f, 0.0f, –2.0f);

> glRotatef(angle, 1.0f, 0.5f, 0.3f);

> glBegin(GL_QUADS);

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

> glVertex3f(-0.5f, 0.5f, 0.0f);

> glColor3f(1.0f, 1.0f, 1.0f);

> glVertex3f(0.5f, 0.5f, 0.0f);

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

> glVertex3f(0.5f, –0.5f, 0.0f);

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


С этой книгой читают
Обработка событий в С++

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


Экстремальное программирование. Разработка через тестирование
Автор: Кент Бек

Возвращение знаменитого бестселлера. Изящный, гибкий и понятный код, который легко модифицировать, который корректно работает и который не подкидывает своим создателям неприятных сюрпризов. Неужели подобное возможно? Чтобы достичь цели, попробуйте тестировать программу еще до того, как она написана. Именно такая парадоксальная идея положена в основу методики TDD (Test-Driven-Development – разработка, основанная на тестировании). Бессмыслица? Не спешите делать скороспелые выводы. Рассматривая применение TDD на примере разработки реального программного кода, автор демонстрирует простоту и мощь этой методики.


Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.


Перевод в электронный формат, кодированные наборы шрифтов и система Оптического Распознавания Символов для многошрифтовых информационных ресурсов на примере “Летописи журнальных статей”

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


Геймдизайн. Рецепты успеха лучших компьютерных игр от Super Mario и Doom до Assassin’s Creed и дальше

Что такое ГЕЙМДИЗАЙН? Это не код, графика или звук. Это не создание персонажей или раскрашивание игрового поля. Геймдизайн – это симулятор мечты, набор правил, благодаря которым игра оживает. Как создать игру, которую полюбят, от которой не смогут оторваться? Знаменитый геймдизайнер Тайнан Сильвестр на примере кейсов из самых популярных игр рассказывает как объединить эмоции и впечатления, игровую механику и мотивацию игроков. Познакомитесь с принципами дизайна, которыми пользуются ведущие студии мира! Создайте игровую механику, вызывающую эмоции и обеспечивающую разнообразие.


Изучаем Java EE 7

Java Enterprise Edition (Java EE) остается одной из ведущих технологий и платформ на основе Java. Данная книга представляет собой логичное пошаговое руководство, в котором подробно описаны многие спецификации и эталонные реализации Java EE 7. Работа с ними продемонстрирована на практических примерах. В этом фундаментальном издании также используется новейшая версия инструмента GlassFish, предназначенного для развертывания и администрирования примеров кода. Книга написана ведущим специалистом по обработке запросов на спецификацию Java EE, членом наблюдательного совета организации Java Community Process (JCP)


Драгоценности Медичи

Венецианский князь и всемирно известный антиквар Альдо Морозини не мог предположить, в какую пучину ввергнет его поиск старинных серег и рубинового креста – драгоценностей, которые он увидел на портрете кисти известного художника.Шаг за шагом восстанавливая историю этих произведений искусства, князь сам становится участником кровавых событий...


Точка разрыва
Автор: Джим Браун
Жанр: Триллер

Дебютный роман талантливого американского журналиста, блестящего репортера «Ассошиэйтед Пресс». Впечатляющий триллер, созданный в духе «романов ужасов» Дина Кунца. После того как в городе появился таинственный бродяга, жители оказываются во власти необъяснимых, зловещих явлений природы и душераздирающих кровавых расправ…


Умный огород

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


Крик совы перед концом сезона

Перед нами пять героев в переломное для России время — самое начало девяностых годов. Они абсолютно разные: по своему социальному положению, сфере деятельности, политическим взглядам. Вместе они собираются только на охоте и обсуждают будущее страны. Москвичи самых разных профессий: учитель, врач-хирург, журналист, экономист, заведующий крупной продовольственной базы, электрик объединилась, как любители природы и страстные охотники. Кто-то поддерживает социалистический строй и говорит о том, сколько советское правительство сделало для людей, кто-то считает, что демократы должны прийти к власти.


Другие книги автора
Галчонок
Жанр: Эротика

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


Призраки ночи

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


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

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


mmmavro.org | День 131, Победа

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


Поделиться мнением о книге