Как подключить opengl к проекту

Подключение OpenGL в Visual Studio 2010

Подключение OpenGL на Visual Studio 2010

Как подключить opengl к проекту. Смотреть фото Как подключить opengl к проекту. Смотреть картинку Как подключить opengl к проекту. Картинка про Как подключить opengl к проекту. Фото Как подключить opengl к проекту
Первым делом скачиваем GLUT(The OpenGL Utility Toolkit) c официального сайта:
http://www.opengl.org/resources/libraries/glut/
Можете почитать инструкцию по установке на английском:
http://www.cs.csustan.edu/

rsc/SDSU/GLUTinstall.html
Немного ниже на этой странице в Other GLUT Information/Downloads выберите:
Pre-compiled Win32 for Intel GLUT 3.7 DLLs for Windows 95 & NT
или скачайте сразу:
http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip

После скачивания откройте архив и извлеките файлы.В папке будет 5 файлов:

Файлы glut.dll и glut32.dll нужно скопировать в вашу WINDOWS директорию в папку System32,например у меня такой путь:C:\Windows\System32
или в C:\Windows\SysWOW64 если 64-битная Windows!

Далее скопируйте ваш glut.h в папку с вашей Visual Studio по пути:
\Visual_Studio\VC\include
Затем оставшиеся файлы glut.lib и glut32.lib скопируйте в папку \Visual_Studio\VC\lib
Далее запускаем сам Visual Studio 2010 создаем консольный проект или открываем готовый.Нажимаем правой кнопкой мыши на проект,вкладка Properties.
Как подключить opengl к проекту. Смотреть фото Как подключить opengl к проекту. Смотреть картинку Как подключить opengl к проекту. Картинка про Как подключить opengl к проекту. Фото Как подключить opengl к проекту
Далее в вкладке Configuration Properties открываем вкладку Linker а в ней вкладку Input.
Как подключить opengl к проекту. Смотреть фото Как подключить opengl к проекту. Смотреть картинку Как подключить opengl к проекту. Картинка про Как подключить opengl к проекту. Фото Как подключить opengl к проекту
Справа в окне видим строку Additional dependencies.
Нажимаем Edit.
Как подключить opengl к проекту. Смотреть фото Как подключить opengl к проекту. Смотреть картинку Как подключить opengl к проекту. Картинка про Как подключить opengl к проекту. Фото Как подключить opengl к проекту
Вставляем в вышедшее окно строку(подключаем библиотеки):
opengl32.lib glut32.lib glu32.lib
Как подключить opengl к проекту. Смотреть фото Как подключить opengl к проекту. Смотреть картинку Как подключить opengl к проекту. Картинка про Как подключить opengl к проекту. Фото Как подключить opengl к проекту
Нажимаем «ОК» и «Применить» или «Apply» в предыдущем окне.

Теперь напишем программу для отрисовки фигуры(белого квадрата)с помощью средств и библиотек OpenGL.
Как подключить opengl к проекту. Смотреть фото Как подключить opengl к проекту. Смотреть картинку Как подключить opengl к проекту. Картинка про Как подключить opengl к проекту. Фото Как подключить opengl к проекту
Вот как мы это сделаем (код):

Источник

Настраиваем Windows для программирования OpenGL

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

Недавно, наконец, вышло 8-е издание книги OpenGL programming guide, которую я ждал уже более чем 2 года. Чуть раньше я познакомился с замечательным текстовым редактором Sublime Text 2 и решил настроить его вместо установки тяжелой Visual Studio.

Итак, для начала нам нужен компилятор — я остановился на G++. Он является частью GCC, а его порт под Windows называется MinGW. С него и начнем:

MinGW

Качаем с официального сайта инсталлятор и запускаем его. Можно выбрать выкачивание свежих пакетов сразу при установке, либо обновить их вручную позже. Компиляторы Fortran, Ada и ObjC нам не понадобятся, их можно не ставить. MSYS Basic System может пригодится, его ставим. В качестве адреса я указал » C:\MinGW «, но если вас это смущает — можете выбрать другой, например, » C:\Program Files\Common Files\MinGW «.

Теперь, когда у нас есть компилятор, мы можем приступить к установке необходимых OpenGL библиотек.

Freeglut

Поскольку OpenGL это API, которое относится исключительно к графике — в него не входят функции по созданию окон или обработки устройств ввода. Тем более, решение этой задачи зависит от операционной системы. По-этому ее вынесли в отдельную библиотеку и назвали GLUT — OpenGL Utility Toolkit. Однако, последний релиз этой библиотеки был очень давно и сейчас ее подменила freeglut.

Качаем с официального сайта бинарники под MinGW. Распаковываем, freeglut.dll из папки bin кидаем в » C:\Windows\System32 » (для х86) или » C:\Windows\SysWOW64 » (для х64), или любую другую папку, которая указана в PATH. Содержимое папок include и lib можно скопировать либо в » MinGW\include » и » MinGW\lib » (так будет проще), либо в отдельные созданые папки » MinGW\freeglut\include » и » MinGW\freeglut\lib «.

На этом с freeglut все. Для его подключения нужно добавить #include

Проверяем работоспособность

Создаем минимальный test.cpp:

Sublime Text 2

Ну и напоследок, приведу пример настройки Sublime. Скачать его можно отсюда, вводные видео-уроки на английском языке можно глянуть здесь.
После установки открываем файл настройки билда С++:
» C:\Users\%Username%\AppData\Roaming\Sublime Text 2\Packages\C++\C++.sublime-build »
Сохраняем его копию как
» C:\Users\%Username%\AppData\Roaming\Sublime Text 2\Packages\User\C++\С++ OpenGL.sublime-build «

Строчку
дополняем подключением библиотек:

Для того чтобы Sublime не отказывался выводить кириллицу в свою консоль, после
добавляем

UPD: Когда дело дошло до кода с gl-функциями из последних версий, выяснилось, что подключение заголовочного файла GL/gl.h недостаточно. В нем содержится устаревшая версия 1.1, и этот файл больше не обновляется. В дополнение к нему необходимо подключить GL/glext.h (последнюю версию которого надо скачать отсюда) и GL/wglext.h (отсюда). Для линукса последний файл заменяется GL/glxext.h (ссылка). Скачанными файлами нужно заменить их устаревшие версии по адресу » MinGW/include/GL/ «.

Источник

Урок №2. Подготовка к первому проекту OpenGL: настройка GLFW, CMake и GLAD

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

К счастью, существует довольно много библиотек, которые обеспечивают необходимый нам функционал, при этом некоторые из них специально нацелены на работу с OpenGL. Эти библиотеки избавят нас от всей специфической работы, связанной с особенностями конкретной операционной системы. Наиболее популярными библиотеками являются: GLUT, SDL, SFML и GLFW. На этих уроках мы будем использовать библиотеку GLFW. Вы также можете использовать и любую другую библиотеку из предоставленного списка, т.к. установка и настройка для большинства из них аналогична установке и настройке GLFW.

Библиотека GLFW

GLFW (англ. «Graphics Library FrameWork») — это библиотека, написанная на языке Си, специально предназначенная для работы с OpenGL. Библиотека GLFW предоставит нам все необходимые инструменты, которые потребуются для рендеринга на экран различных объектов. Благодаря этому мы сможем создавать контексты OpenGL, определять параметры окна и обрабатывать пользовательский ввод, что вполне коррелирует с нашими целями.

Основное внимание на этом и следующем уроках уделяется изучению библиотеки GLFW, созданию корректного контекста OpenGL, а также простого окна, в котором мы и будем рисовать наши объекты. На этом уроке мы пошагово рассмотрим установку библиотеки GLFW, а также процесс сборки и компиляции программы в связке с GLFW.

Примечание: На момент написания данной статьи в качестве среды разработки мы будем использовать Microsoft Visual Studio 2019 (обратите внимание, что наши действия будут аналогичными и с более старыми версиями Visual Studio). Если же вы используете более старую версию Visual Studio (или вообще другую среду разработки), то можете быть спокойны, т.к. процесс установки и настройки GLFW аналогичен в большинстве IDE.

Сборка GLFW

Библиотеку GLFW можно скачать с официального сайта. Стоит отметить, что GLFW уже имеет предварительно скомпилированные бинарные и заголовочные файлы для Visual Studio 2010-2019, но для полноты картины их мы использовать не будем, а вместо этого вручную скомпилируем GLFW из исходного кода. Это делается для того, чтобы вы сами прочувствовали процесс компиляции библиотек с открытым исходным кодом, поскольку не каждая подобная библиотека будет предоставлять возможность скачать предварительно скомпилированные бинарные файлы. Итак, давайте загрузим пакет с исходным кодом.

Примечание: Мы будем собирать все библиотеки в формате 64-битных бинарных файлов, поэтому убедитесь, что скачиваете и используете именно 64-битные бинарные файлы.

После загрузки пакета с файлами исходного кода извлеките и откройте его содержимое. Нас интересуют следующие вещи:

библиотека, которая будет получена в результате компиляции;

Компиляция библиотек из исходного кода гарантирует, что полученная нами библиотека идеально подойдет для нашего процессора и операционной системы, в то время как предварительно скомпилированные бинарные файлы не всегда могут этим похвастаться (иногда они вообще недоступны для вашей системы). Однако проблема проектов, распространяющихся под эгидой открытого программного обеспечения, заключается в том, что не все используют одну и ту же IDE или систему сборки для разработки своего приложения, а это значит, что предоставленные файлы проекта/решения могут быть несовместимы с настройками IDE у других людей. Следовательно, каждый конечный пользователь должен настроить свой собственный проект/решение с учетом полученных *.с / *.cpp и *.h / *.hpp файлов, что почти всегда является довольно трудоемким и громоздким процессом. Но не спешите расстраиваться, для решения данной проблемы уже существует удобный инструмент сборки проектов под названием CMake.

CMake

CMake — это инструмент, который с использованием заранее определенных сценариев может из коллекции файлов исходного кода сгенерировать файлы проектов/решений под выбранную пользователем IDE (например, для Visual Studio, Code::Blocks или Eclipse). Он позволит нам из исходного пакета файлов GLFW создать файл проекта под среду разработки Visual Studio 2019, а затем данный файл мы сможем использовать для компиляции библиотеки. Но сначала нам нужно его скачать, а затем установить.

После установки CMake у вас будет 2 варианта:

запустить CMake из командной строки;

запустить CMake через графический интерфейс.

Поскольку мы не стремимся всё усложнять, то остановимся на варианте с использованием графического интерфейса. Для работы с CMake нам потребуется указать папку с файлами исходного кода проекта (в нашем случае glfw-3.3.2 ) и папку назначения для бинарных файлов. Для папки исходного кода мы собираемся выбрать корневую папку загруженного исходного пакета GLFW, а для папки сборки мы создадим новый каталог build :

Как подключить opengl к проекту. Смотреть фото Как подключить opengl к проекту. Смотреть картинку Как подключить opengl к проекту. Картинка про Как подключить opengl к проекту. Фото Как подключить opengl к проекту

В следующем окне необходимо задать используемую версию Visual Studio. Т.к. работать мы будем в Visual Studio 2019, то выбираем опцию «Visual Studio 16 2019» :

Как подключить opengl к проекту. Смотреть фото Как подключить opengl к проекту. Смотреть картинку Как подключить opengl к проекту. Картинка про Как подключить opengl к проекту. Фото Как подключить opengl к проекту

Компиляция проекта

Как подключить opengl к проекту. Смотреть фото Как подключить opengl к проекту. Смотреть картинку Как подключить opengl к проекту. Картинка про Как подключить opengl к проекту. Фото Как подключить opengl к проекту

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

Способ №1: Можно скопировать содержимое папки include проекта GLFW в соответствующую папку include вашей IDE или компилятора, а также скопировать полученный файл glfw3.lib в соответствующую папку /lib вашей IDE или компилятора. Данный способ вполне рабочий, но мы его не рекомендуем, так как новая установка IDE или компилятора приведет к тому, что вам заново придется подключать необходимые файлы.

Как только необходимые файлы будут сохранены в выбранном вами месте, мы сможем приступить к созданию нашего первого OpenGL-GLFW-проекта.

Наш первый проект

Как подключить opengl к проекту. Смотреть фото Как подключить opengl к проекту. Смотреть картинку Как подключить opengl к проекту. Картинка про Как подключить opengl к проекту. Фото Как подключить opengl к проекту

Теперь у нас есть рабочее пространство для создания нашего самого первого OpenGL-приложения!

Линкинг проекта

Как подключить opengl к проекту. Смотреть фото Как подключить opengl к проекту. Смотреть картинку Как подключить opengl к проекту. Картинка про Как подключить opengl к проекту. Фото Как подключить opengl к проекту

Как подключить opengl к проекту. Смотреть фото Как подключить opengl к проекту. Смотреть картинку Как подключить opengl к проекту. Картинка про Как подключить opengl к проекту. Фото Как подключить opengl к проекту

Здесь вы можете добавить столько дополнительных каталогов, сколько захотите, и с этого момента IDE при поиске файлов библиотек также будет просматривать и эти директории. Поэтому, как только вы подключите папку Lib из проекта GLFW, вы сможете использовать все файлы библиотек из этой папки. Аналогично обстоят дела и с добавлением папки Include для заголовочных файлов.

Поскольку для VS были указаны все необходимые файлы, то мы, наконец, можем связать GLFW с нашим проектом, перейдя в раздел «Компоновщик» > «Ввод» :

Как подключить opengl к проекту. Смотреть фото Как подключить opengl к проекту. Смотреть картинку Как подключить opengl к проекту. Картинка про Как подключить opengl к проекту. Фото Как подключить opengl к проекту

Примечание: В примечании подраздела «Сборка GLFW» сказано, что мы собираем все библиотеки в формате 64-битных бинарных файлов. В то же время число «32» в названии файла OpenGL32.Lib может вызвать некоторую путаницу, как бы намекая на то, что в данном случае используется именно 32-битная версия библиотеки. На самом деле это не так. Если у вас установлен пакет Microsoft SDK, то достаточно просто зайти в папку C:\Program Files (x86)\Windows Kits\10\Lib\[Номер_версии_SDK]\um\x64\ и убедиться, что в ней среди прочих файлов находится и наша библиотека:

Как подключить opengl к проекту. Смотреть фото Как подключить opengl к проекту. Смотреть картинку Как подключить opengl к проекту. Картинка про Как подключить opengl к проекту. Фото Как подключить opengl к проекту

Больше того, если зайти в папку C:\Program Files (x86)\Windows Kits\10\Lib\[Номер_версии_SDK]\um\x86\, то и там можно встретить файл OpenGL32.Lib:

Как подключить opengl к проекту. Смотреть фото Как подключить opengl к проекту. Смотреть картинку Как подключить opengl к проекту. Картинка про Как подключить opengl к проекту. Фото Как подключить opengl к проекту

Другими словами, под одним названием файла OpenGL32.Lib существует две различные версии (32-битная и 64-битная) библиотеки. Поэтому просто не обращайте внимание на то, что в её имени есть часть «32». Всё прекрасно работает и в 64-битном окружении.

Затем, после добавления библиотек GLFW и OpenGL в настройки компоновщика, вы сможете подключить заголовочные файлы GLFW следующей строкой кода:

Источник

Подключение библиотеки OpenGL к Visual Studio 2017

Как в visual studio 2008 добавить библиотеки opengl
Здравствйте, я скачал отсюда http://www.swiftless.com/tutorials/opengl/gldrivers.html библиотеки.

Подключение OpenGL к проекту на С++ (Visual Studio)
Доброго времени суток! Никак не могу понять, как подключать библиотеку OpenGL к своему проекту.

«OpenGL» я сам создал. В ней я создал папку «glut». В папке «glut» создал папки: «include», «lib» и «bin». И раскидал файлы по папкам. В «bin» положил glut32.dll. Это просто для удобства.

Вот такая структура у меня. Количество дефисов определяет вложенность папки или файла.

— lib
— Win32
—- glut32.dll
—- glut32.lib
— x64
—- glut32.dll
—- glut32.lib

Решение

GLUT перешёл в FreeGLUT. Это тоже самое. Положил библиотеки в папку «Libs», настроил по относительному пути. Вы можете скачать проект и вставить свой код в main.cpp. Этот проект рабочий. Вы можете скачать и сразу запустить. Он выводит треугольника с разными цветами вершин. Используется OpenGL 3.3 Core: FreeGLUTAndGLSL.zip

По идее, если вы вставите свой код в main.cpp, но должно заработать, если в вашем коде нет ошибок. Если есть ошибки, то вставьте свой код в сообщение в тег CPP (кнопка C++ в редакторе сообщения)

Это проект я скачал из какого-то туториала. Немного доработал. Добавил библиотеку GLM для изменения размера треугольника, поворота и переноса его с новую позицию.

Источник

Как подключить opengl к проекту

После того как вы создадите новое приложение в Visual C++ (причем Win32 приложение, а не консольное), Вам надо будет добавить для сборки проекта библиотеки OpenGL. В меню Project/setting, выберите закладку LINK. В строке «Object/Library Modules» добавьте «OpenGL32.lib GLu32.lib GLaux.lib». Затем кликните по OK. Теперь все готово для создания программы с OpenGL.

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

OpenGL code

Первые две строки устанавливают Контексты Рендеринга, которые связывает вызовы OpenGL с окном Windows. Контекст Рендеринга OpenGL определен как hRC. Для того чтобы рисовать в окне, вам необходимо создать Контекст Устройства Windows, который определен как hDC. DC соединяет окно с GDI. RC соединяет OpenGL с DC.

OpenGL code

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

OpenGL code

Opengl Code

Opengl code

Следующие три строки создают Буфер Глубины. Думайте о буфере глубины как о слоях на экране. Буфер глубины указывает, как далеко объекты находятся от экрана. Мы не будем реально использовать буфер глубины в этой программе, но любая программа с OpenGL, которая рисует на экране в 3D будет его использовать. Он позволяет сортировать объекты для отрисовки, поэтому квадрат расположенный под кругом не изображен будет поверх круга. Буфер глубины очень важная часть OpenGL.

OpenGL code

Следующие пять строк разрешают плавное цветовое сглаживание (которое я буду объяснять позднее) и установку экрана для перспективного просмотра. Отдаленные предметы на экране кажутся меньшими, чем ближние. Это придает сцене реалистичный вид. Перспектива вычисляется c углом просмотра 45 градусов на основе ширины и высоты окна. 0.1f, 100.0f глубина экрана.

glMatrixMode(GL_PROJECTION) сообщает о том, что следующие команды будут воздействовать на матрицу проекции. glLoadIdentity() – это функция работает подобно сбросу. Раз сцена сброшена, перспектива вычисляется для сцены. glMatrixMode(GL_MODELVIEW) сообщает, что любые новые трансформации будут воздействовать на матрицу просмотра модели. Не волнуйтесь, если вы что-то не понимаете этот материал, я буду обучать всему этому в дальнейших уроках. Только запомините, что НАДО сделать, если вы хотите красивую перспективную сцену.

OpenGl code

Следующая секция кода очень простая, по сравнению с предыдущим кодом. Это функция масштабирования сцены, вызываемая OpenGL всякий раз, когда вы изменяете размер окна (допустим, что вы используете окна чаще, чем полноэкранный режим, который мы не рассматриваем). Даже если вы не делаете изменение размеров окна (например, если вы находитесь в полноэкранном режиме), эта процедура все равно должна быть вызвана хоть один раз, обычно во время запуска программы. Замечу, что сцена масштабируется, основываясь на ширине и высоте окна, которое отображается.

OpenGL code

GLvoid ReSizeGLScene(GLsizei Width, GLsizei Height)
<
if (Height==0) // Предотвращение деления на ноль, если окно слишком мало
Height=1;

glViewport(0, 0, Width, Height);
// Сброс текущей области вывода и перспективных преобразований

glMatrixMode(GL_PROJECTION); // Выбор матрицы проекций
glLoadIdentity(); // Сброс матрицы проекции

gluPerspective(45.0f,(GLfloat)Width/(GLfloat)Height,0.1f,100.0f);
// Вычисление соотношения геометрических размеров для окна
glMatrixMode(GL_MODELVIEW); // Выбор матрицы просмотра модели
>

В этой секции содержится весь код для рисования. Все, что вы планируете для отрисовки на экране, будет содержатся в этой секции кода. В каждом уроке, после этого будет добавлять код в эту секцию программы. Если вы уже понимаете OpenGL, вы можете попробовать добавить в код простейшие формы на OpenGL, ниже вызова glLoadIdentity(). Если вы новичок в OpenGL, подождите до следующего моего урока. Сейчас все что мы сделаем, это очистка экрана цветом, который мы определили выше, очистка буфера глубины и сброс сцены.

Opengl code

Следующая секция кода наиболее важная секция в этой программе. Это установка окна Windows, установка формата пикселя, обработка при изменении размеров, при нажатии на клавиатуру, и закрытие программы.

OpenGL code

Код между скобками устанавливает формат пикселей. Я предпочитаю не использовать режим индексации цвета. Если вы не знаете, что это означает, не заботьтесь об этом. Формат описания пикселя описывает, как OpenGL будет выводить в окно. Большинство кода игнорируется, но зачастую это необходимо. Я буду помещать короткий комментарий для каждой строки. Знак вопроса означает, что я не уверен, что это строка кода делает (я только человек!).

OpenGL code

OpenGl code

WM_CREATE сообщает программе, что оно должно быть создано. Вначале мы запросим DC (контекст устройства) для вашего окна. Помните, без него мы не можем рисовать в окно. Затем мы запрашиваем формат пикселя. Компьютер будет выбирать формат, который совпадает или наиболее близок к формату, который мы запрашиваем. Я не делаю здесь множества проверок на ошибки, чтобы сократить код, но это неправильно. Если что-то не работает, я просто добавляю необходимый код. Возможно, вы захотите посмотреть, как работают другие форматы пикселей.

OpenGL code

Если подходящий формат пикселя не может быть найден, будет выведено сообщение об ошибке с соответствующем уведомлением. Оно будет ждать, когда вы нажмете на OK, до выхода из программы.

OpenGL code

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

OpenGL code

Если код сделан, как показано выше, будет создан DC (контекст устройства), и установлен подходящий формат пикселя. Сейчас мы создадим Контекст Рендеринга, для этого OpenGL использует DC. wglCreateContext будет захватывать Контекст Рендеринга и сохранять его в переменной hRC. Если по какой-то причине Контекст Рендеринга не доступен, выскочит сообщение об ошибке. Нажмите OK для вызова программы.

OpenGL code

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

OpenGl code

Если все прошло удачно, то у нас есть все для того, чтобы создать область рисования OpenGL. GetClientRect возвратит нам ширину и высоту окна. Мы запомним ширину справа, и высоту снизу. После того как мы получили ширину и высоту, инициализируем экран OpenGL. Мы делаем это при помощи вызова InitGL, передавая в параметрах право и низ (ширину и высоту).

OpenGL code

WM_DESTROY и WM_CLOSE очень похожи. Программа будет посылать это сообщение каждый раз, когда вы выходите из программы, нажав ALT-F4, или если вы послали PostQuitMessage(0) также как мы делали, когда происходила ошибка.

ChangeDisplaySettings(NULL,0) будет переключать разрешение рабочего стола обратно, делая его таким, каким мы переключались из него в полноэкранный режим. ReleaseDC(hWnd,hDC) уничтожает контекст устройства окна. По существу это уничтожает окно OpenGL.

OpenGl code

case WM_DESTROY:
case WM_CLOSE:
ChangeDisplaySettings(NULL, 0);

wglMakeCurrent(hDC,NULL);
wglDeleteContext(hRC);
ReleaseDC(hWnd,hDC);

WM_KEYDOWN вызывается всякий раз при нажатии клавиши. Клавиша, которая была нажата, сохраняется в переменной wParam. Итак, что же делает следующий код. Скажем, я нажал ‘A’. Буква фактически – это число, которое ее представляет. Поэтому в ячейку, которая представляет ‘A’ заносится TRUE. Позднее, в коде, если я проверю состояние ячейки и увижу TRUE, то я знаю, что клавиша ‘A’ действительно в этот момент нажата.

OpenGL code

WM_KEYUP вызывается всякий раз, когда клавиша отпускается. Клавиша, которая отжата, также сохраняется в переменной wParam. Поэтому, когда я отпускаю клавишу ‘A’, это делает ячейку для клавиши ‘A’ равной FALSE. Когда я проверю ячейку, для того чтобы увидеть нажата ли клавиша ‘A’, она вернет FALSE, что означает «нет, она не нажата».

OpenGL code

OpenGL code

Затем, дадим Windows обработать все сообщения, которые мы не обрабатываем и завершим процедуру.

OpenGL code

Это то место, где начинается программа, где создается окно, где делается практически все, кроме рисования. Мы начинаем с создания окна.

OpenGL code

OpenGL code

Сейчас мы регистрируем класс. Если произошла ошибка, появится соответствующее сообщение. Кликните на OK на окно с сообщение об ошибке и будете выкинуты из программы.

OpenGL code

Сейчас мы сделаем окно. Не смотря на то, что мы делаем окно здесь, это не вызовет OpenGL до тех пор, пока сообщение WM_CREATE не послано. Флаги WS_CLIPCHILDREN и WS_CLIPSIBLINGS требуются для OpenGL. Очень важно, чтобы вы добавили их здесь. Я люблю использовать всплывающее окно, оно хорошо работает в полноэкранном режиме.

OpenGl code

WS_POPUP |
WS_CLIPCHILDREN |
WS_CLIPSIBLINGS,

0, 0, // Позиция окна на экране
640, 480, // Ширина и высота окна

NULL,
NULL,
hInstance,
NULL);

OpenGL code

Я не устанавливаю глубину цвета, когда я переключаю полноэкранный режим. Всякий раз, когда я пробовал переключать глубину цвета, я получал сверхъестественные запросы от Windows чтобы сделать перезагрузку компьютера для переключения нового режима цвета. Я не уверен, надо ли удовлетворять это сообщение, но я решил оставлять компьютер с той глубиной цвета, которая была до запуска GL программы.

OpenGL code

DEVMODE dmScreenSettings; // Режим работы

memset(&dmScreenSettings, 0, sizeof(DEVMODE)); // Очистка для хранения установок
dmScreenSettings.dmSize = sizeof(DEVMODE); // Размер структуры Devmode
dmScreenSettings.dmPelsWidth = 640; // Ширина экрана
dmScreenSettings.dmPelsHeight = 480; // Высота экрана
dmScreenSettings.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT; // Режим Пиксела
ChangeDisplaySettings(&dmScreenSettings, CDS_FULLSCREEN);
// Переключение в полный экран

OpenGL code

OpenGL code

SwapBuffers(hDC) очень важная команда. Мы имеем окно с установленной двойной буферизацией. Это означает, что изображение рисуется на скрытом окне (называемым буфером). Затем, мы говорим компьютеру переключить буфера, скрытый буфер копируется на экран. При этом получается плавная анимация без рывков, и зритель не замечает отрисовку объектов.

OpenGL code

В этом уроке я попытался объяснить как можно больше деталей каждого шага запутанной установки, и создания ваших собственных полноэкранных OpenGL программ, которые будут завершаться при нажатии ESC. Я потратил 3 дня и 13 часов для написания этого урока. Если вы имеете любые комментарии или вопросы, пожалуйста, пошлите их мне по электронной почте. Если вы ощущаете, что я некорректно комментировал что-то или что код должен быть лучше в некоторых секциях по некоторым причинам, пожалуйста, дайте мне знать. Я хочу сделать уроки по OpenGL хорошими насколько смогу. Я заинтересован в обратной связи.

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

Еще одно примечание переводчика: в связи с тем, что NeHe иногда изменяет уроки, но при этом нет возможности понять когда он это сделал (нет даты последнего изменения урока), то бывает так, что текст переведенных уроков незначительно отличается от текущих оригинальных уроков. Не пугайтесь этого, смысл урока при этом значительно не меняется.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *