Glaux lib как подключить в visual studio

Обновлено: 05.07.2024

Я переношу некоторый код из Visual Studio 2005 в Visual Studio 2008.

Могу ли я использовать glaux.lib, найденный в Visual Studio 2005, найденный в папке \PlatformSDK\Lib в Visual Studio 2008?
Я не хочу менять свои API и иметь требование использовать glaux.h

как сказано здесь, работает ли это

выглядит как glaux.lib устарел. Вместо ссылки на kernel32.lib, user32.lib, gdi32.lib и advapi32.lib


спросил(а) 2010-02-19T01:46:00+03:00 11 лет, 9 месяцев назад

Задайте путь, и все будет готово.

ответил(а) 2011-06-02T09:15:00+04:00 10 лет, 5 месяцев назад

AFAIK, большинство программистов пропустили функцию auxDIBImageLoad(), и нет документального обходного пути. Glaux.lib является статической библиотекой и вводит некоторый раздутый код.

Этот загрузчик изображений будет работать без < glaux.h > :

Эта процедура будет обрабатывать как RGB (24-битные), так и индексированные изображения правильно! Нет необходимости в ручном пикселе twiddeling! В примере загружается из ресурса process.exe с числовым идентификатором 1.

LoadBitmap() может быть заменен LoadImage() для загрузки из файла.

Если ваше входное изображение, как известно, имеет несжатый тип RGB, GetDIBits не требуется, так как вы можете LoadImage() с LR_CREATEDIBSECTION, обращаться к битам с помощью указателя bmBits и использовать константу GL_BGR_EXT, ( новый и удалить не нужны.)

GetDIBits нуждается в любом действительном дескрипторе контекста устройства для успеха. Используйте GetDC/ReleaseDC, если у вас нет дескриптора.

Константа GL_BGRA_EXT является расширением Microsoft для opengl, его использование именно для такого вывода GetDIBits.

Загрузка сжатого PNG/GIF/JPG здесь не тестируется, но должна работать одинаково; GetDIBits() - ваш друг.

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

Решил проверить как работают эти библиотеки дабы понять разницу работы без них.
Также обнаружил, что в поиске нет нормальной статьи где описывается где качать и как работать с этими библиотеками GLUT и GLAUX.

Сначала ответьте на эти вопросы, потом вступайте в полемику!:
1. Где скачать библиотеки: GLUT и GLAUX
2. Как подключать к среде Visual Studio
3. Какие файлы куда вставлять для работы, что прописать в коде
4. Достоинства и недостатки таких библиотек для приложения Win32

И от себя: Я заметил, что в интернете много статей навязывают использовать эту библиотеку для создания окон для приложения Win32. Однако за последний месяц работы я набрал достаточно кода, чтобы понять то, что для приложения win32 библиотеки GLUT и GLAUX не обязательны. Можно их не использовать. Но статей пруд запрудись с избытком.

Например, многие хотят написать приложение для Windows. А Visual Studio приложение Win32 вполне позволяет напсать приложение для windows и применить OpenGL. Но вынуждены натыкаться на библиотеки GLUT и GLAUX.
Конечно можно дать оправдание: Тот кто использует Win32 WinAPI могут использовать DirectX.

В этой теме хочу обсудить работу этих библиотек и как можно обойтись без этих библиотек.

Недостатки библиотек (GLUT и GLAUX) явные:
1. Тащить за приложением файл .DLL
2. Ваше приложение будет сильно связано с этой библиотекой, хотя для Windows эта библиотека не актуальна! Вы просто будите тащить этот баласт!
3. Файлы .DLL могут ссылаться на другие .DLL файлы в опереционной системе. Поэтому это риск того, что в будущем ссылка на файл умрет, а за ним и ваше приложение.
4. Библиотека GLUT и GLAUX может не дать больших возможностей с форматированием окон. На WinAPI можно много сделать своего уникального.

Еще один момент: Болшинство программисты пишут приложение для windows. Вы сходите в магазин: Ноутбуки с какой операционной системой продаются? Windows имеет большее преимущество среди населения России. Также считаю, что именно Windows дает возможность использовать большинство профессиональных программ. Вы видели, что бы программист писал приложение для Windows на операционной системе Мак, Линукс или Андроид? Про Мак и Линукс не знаю: Есть ли там подобные профессиональные программы для программирования. Например возьмем чертежные программы AutoCad и его аналоги. Есть что-то подобное на Маке или Линуксе?

Windows пока очень силен. Почти каждый программист пишущий приложение пишет его на приложении под WIndows.
И я считаю, что профессиональные программы типа AutoCad, Cinema4D лучше писать для WIndows. Так как Windows считается профессиональной машиной для работы коммерческих фирм. Большинство коммерческих программ написаны на приложениях под windows.

А то, что так сильно агетируется кросплатформенность - это бред сивой кабылы. Опытные программисты поддержат эту мысль, а не опытные будут агетировать кроссплатформенность. Начинающие программисты с кроссплатформенностью только усложняют себе карьеру программиста. Начинающие программисты делайте сначала для Windows, и после того как сделаете что-то достойное можно изучать другие системы. Граблей навалом.

OpenGL в C++ для Ch--

Совершенствуем ОС Windows .
C Билла Гейтса « причитается »!

. Особенность работы Графической библиотеки OpenGL заключается в том, что она в отличие от других распространенных библиотек (например, математической) не полностью инсталлирована в Операционную систему. Более того, она не подключена к компиляторам языка программирования С++. Этими вопросами в первую очередь и предстоит заняться.

. Как ни вертись, придется окунуться в бездну ОС Windows и немного её усовершенствовать!


. Нам понадобится пять файлов библиотеки GLUT ( glut.dll , glut32.dll , glut.h , glut.lib , glut32.lib ) и два файла библиотеки GLAUX ( glaux.h , glaux.lib ). Билл Гейтс пренебрёг этими библиотеками, поэтому с него « причитается »! Изучим процесс создания проекта « whiteline » - «белая линия» для ОС Windows 7 и 10 .

. Интегрированную среду разработки программного обеспечения Visual Studio 2010 можно использовать в качестве компилятора языка программирования С++ в Win 7 . Для неё вышеупомянутые файлы можно найти по ссылке Gl Files.zip. Однако в Win 10 она не работает!

. Для ОС Windows 10 в качестве компилятора С++ можно использовать Visual Studio 2017 Enterprise . Однако необходимо будет найти в Интернете обновлённые файлы библиотек (например, glut32.dll должен быть обновлён до 2017 г.).

. Весь процесс «модернизации» Windows разбиваем на три шага.


. 1-й шаг . Встраиваем библиотеки GLUT и GLAUX в Windows 7 x64 . С этой целью упомянутые 7 файлов копируем в следующие три папки дистрибутива:

Файлы glut.dll и glut32.dll копируем в C:\ Windows \ System32 \ SysWOW64.
Открываем C:\ Program Files (x86)\ Microsoft Visual Studio 10.0\ VC. Здесь находятся папки lib и include.
Файлы glut.lib , glut32.lib и glaux.lib копируем в папку lib.
Файлы glut.h и glaux.h копируем в папку include.

. 2-й шаг . Открываем VS 2010 и создаем проект « whiteline ». Для этого нажимаем:

Создать проект —> Консольное приложение CLR —> Вводим имя whiteline —> OK
Открывается файл исходного кода whiteline.cpp

. 3-й шаг . Новый проект создан. Подключаем к нему библиотеки GLUT и GLAUX. В файле whiteline.cpp последовательно нажимаем:

Проект —> Свойства: whiteline . —> Свойства конфигурации (2 клика) —>
Компоновщик (2 клика) —> Ввод —> Дополнительные зависимости —>
Расширяем окошко —> Изменить. —> Вставляем в открывшееся поле:
opengl32.lib; glut32.lib; glu32.lib; glaux.lib; . —> OK —> Применить —> OK.

. Библиотеки GLUT и GLAUX встроены в ОС Windows 7 и подключены к проекту « whiteline ».

. При установке Visual Studio 2017 Enterprice из множества пакетов программ различного назначения выбираем третий, который называется «Разработка классических приложений на С++». Ставим на нём галочку и вперёд! Установка проходит без проблем и занимает около 30 минут.

. Рекомендую не отказываться от предложения зарегистрироваться в Microsoft, так как тогда можно будет бесплатно пользоваться программой вплоть до превращения Дремучего Чайника в хакера-профи, способного, например, повлиять на выборы президента США.


. 1-й шаг . Встраиваем библиотеки GLUT и GLAUX в Windows 10 x64 . С этой целью упомянутые файлы копируем в следующие три папки дистрибутива:

Файлы glut.dll и glut32.dll копируем в C:\ Windows \ System32 \ SysWOW64.
Открываем C:\ Program Files (x86)\ Microsoft Visual Studio \ 2017 \ Enterprise
\ VC \ Tools \ MSVC \ 14.12.25827
Здесь находятся папки include и lib. Файлы glut.h и glaux.h копируем в папку include.
Файлы glut.lib , glut32.lib и glaux.lib копируем в папку lib \ x86.

. 2-й шаг . Открываем VS 2017 и создаем проект « whiteline ». Для этого нажимаем:

Файл —> Создать —> Проект —> Консольное приложение Windows —> Вводим имя whiteline —> OK
Открывается файл исходного кода whiteline.cpp

. 3-й шаг . Новый проект создан. Подключаем к нему библиотеки GLUT и GLAUX. В файле whiteline.cpp последовательно нажимаем:

Проект —> Свойства: whiteline . —> Свойства конфигурации —>
Компоновщик —> Ввод —> Дополнительные зависимости —>
Расширяем окошко —> Изменить. —> Вставляем в открывшееся поле:
opengl32.lib; glut32.lib; glu32.lib; glaux.lib; legacy_stdio_definitions.lib;
—> OK —> Применить —> OK.

. Библиотеки GLUT и GLAUX встроены в ОС Windows 10 и подключены к проекту « whiteline ».

В качестве примера мы рассмотрим подключение библиотеки SDL к нашему проекту в Visual Studio 2017 (работать будет и с более новыми версиями Visual Studio).

Шаг №1: Создаем папку для хранения библиотеки

Создаем папку Libs на диске C ( C:\Libs ).

Шаг №2: Скачиваем и устанавливаем библиотеку



Шаг №3: Указываем путь к заголовочным файлам библиотеки

Открываем свой любой проект в Visual Studio или создаем новый, переходим в "Обозреватель решений" > кликаем правой кнопкой мыши (ПКМ) по названию нашего проекта > "Свойства" :


В "Свойства конфигурации" ищем вкладку "С/С++" > "Общие" . Затем выбираем пункт "Дополнительные каталоги включаемых файлов" > нажимаем на стрелочку в конце > "Изменить" :


В появившемся окне кликаем на иконку с изображением папки, а затем на появившееся троеточие:


Заголовочные файлы находятся в папке include внутри нашей библиотеки, поэтому переходим в нее ( C:\Libs\SDL2-2.0.9\include ) и нажимаем "Выбор папки" , а затем "ОК" :



Шаг №4: Указываем путь к файлам с реализацией библиотеки

Переходим на вкладку "Компоновщик" > "Общие" . Ищем пункт "Дополнительные каталоги библиотек" > нажимаем на стрелочку в конце > "Изменить" :


Опять же, нажимаем на иконку с папкой, а затем на появившееся троеточие. Нам нужно указать следующий путь: C:\Libs\SDL2-2.0.9\lib\x86 . Будьте внимательны, в папке lib находятся две папки: x64 и x86 . Даже если у вас Windows разрядности x64, указывать нужно папку x86 . Затем "Выбор папки" и "ОК" :


После этого переходим в "Компоновщик" > "Ввод" . Затем "Дополнительные зависимости" > нажимаем на стрелочку в конце > "Изменить" :


В появившемся текстовом блоке вставляем:


Затем переходим в "Компоновщик" > "Система" . После этого "Подсистема" > нажимаем на стрелочку вниз > выбираем "Консоль (/SUBSYSTEM:CONSOLE)" > "Применить" > "ОК" :



Шаг №5: Копируем dll-ку в папку с проектом

Переходим в папку x86 ( C:\Libs\SDL2-2.0.9\lib\x86 ), копируем SDL2.dll и вставляем в папку с вашим проектом в Visual Studio. Чтобы просмотреть папку вашего проекта в Visual Studio, нажмите ПКМ по названию вашего проекта > "Открыть содержащую папку" :


Затем вставляем скопированный файл (SDL2.dll) в папку с проектом (где находится рабочий файл .cpp):


Шаг №6: Тестируем

Теперь, чтобы проверить, всё ли верно мы сделали — копируем и запускаем следующий код:

В отличие от обычной консольной программы Win32, в проект программы, использующей OpenGL, надо добавить три файла с расширениями .lib из каталога DEVSTUDIO\VC\LIB: opengl32.lib, glu32.lib и glaux.lib. В этих файлах содержатся данные, с помощью которых компоновщик организует в исполняемом файле программы вызовы функций OpenGL из динамических библиотек opengl32.dll и glu32.dll (они расположены в каталоге WINDOWS\SYSTEM).

Показанная ниже программа 1.1 выполняет анимацию сферы, которая движется в экранном окне в направлении "слева направо". Генерация изображения трехмерной сцены выполняется в функции display(). Консольные приложения, которые будут рассматриваться в данной лекции, имеют похожую структуру и различаются содержанием функции display().

// Прототипы функций обратной связи (для автоматического вызова из GLAUX)

void CALLBACK resize( int width, int height );

void CALLBACK display( void );

// Параметры обсчета сцены в OpenGL: цветовой режим RGBA, удаление

// невидимых поверхностей и линий, двойная буферизация

auxInitDisplayMode( AUX_RGBA | AUX_DEPTH | AUX_DOUBLE );

// Создание окна OpenGL с заголовком "Программа 1.1"

// Размер окна – 400х400 пикселей. Левый верхний угол окна

// задается экранными координатами (50, 10).

auxInitPosition( 50, 10, 400, 400);

auxInitWindow( "Программа 1.1" );

// таймера, то будет вызываться функция display. Так можно получить

// анимацию. Если анимация не нужна, то эта строка лишняя.

// Задание функции, которая будет вызываться при изменении

// размеров окна Windows.

// Включение ряда параметров OpenGL

glEnable( GL_ALPHA_TEST ); // Учет прозрачности

glEnable( GL_DEPTH_TEST ); // Удаление невидимых поверхностей

glEnable( GL_COLOR_MATERIAL ); // Синхронное задание цвета рисования

// и цвета материала объектов

glEnable( GL_BLEND ); // Разрешение смешения цветов

glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );

glEnable( GL_LIGHTING ); // Учет освещения

glEnable( GL_LIGHT0 ); // Включение нулевого источника света

// Задание положения и направления нулевого источника света

glLightfv( GL_LIGHT0, GL_POSITION, pos );

glLightfv( GL_LIGHT0, GL_SPOT_DIRECTION, dir );

// Задание функции отрисовки окна. Эта функция будет вызываться всякий

// раз, когда потребуется перерисовать окно на экране (например, когда

// окно будет развернуто на весь экран)

void CALLBACK resize( int width, int height )

// Указание части окна для вывода кадра OpenGL

glViewport( 0, 0, width, height );

// Задание типа проекции (glOrtho - параллельная, glFrustum -

// перспективная). Параметры функций определяют видимый объем

// (левая стенка - пять единиц влево, правая - пять единиц вправо,

// далее задаются нижняя стенка, верхняя, передняя и задняя)

glOrtho( -5, 5, -5, 5, 2, 12 );

// Задание позиции наблюдателя (0, 0, 5), направление луча

// зрения (на точку (0, 0, 0)), вектор, принимаемый за направление

// "вверх" (0, 1, 0) (т.е. параллельно оси Y).

gluLookAt( 0,0,5, 0,0,0, 0,1,0 );

void CALLBACK display(void)

// Очистка буфера кадра

glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

// Перенос системы координат, связанной с объектом, на 0.01

glTranslated( 0.01, 0, 0 );

// Рисование в начале координат, связанных с объектом, сферы

// радиусом 1, окрашенной в красный цвет

glColor3d( 1, 0, 0 );

// Копирование содержимого буфера кадра на экран

Программа 1.1

Имена функций OpenGL

Рисование сферы в программе 1.1 выполняется при помощи двух функций:

glColor3d( 1, 0, 0 );

Функция glColor3d() устанавливает текущий цвет, а auxSolidSphere() рисует сферу единичного радиуса с центром в начале координат.

Цвет в режиме RGBA (режим был задан в функции main()) задается четырьмя числами в диапазоне от 0 до 1: красная компонента, синяя, зеленая и прозрачность. В программе 1.1 прозрачность не нужна, поэтому вызывается вариант функции glColor() с тремя параметрами. Значение четвертого параметра, прозрачности, по умолчанию равно единице (1 – абсолютно непрозрачный материал, 0 – абсолютно прозрачный).

OpenGL была разработана для языка Си, а не Си++, поэтому вместо перегруженных полиморфных функций в этой библиотеке реализованы наборы функций с похожими именами, в которых условно обозначено количество параметров функции. Имена полиморфных функций OpenGL выбраны согласно следующему правилу:

Имя функции[n=число параметров][тип параметров]

Тип параметров обозначается одной из английских букв:

'b' – байт со знаком (char или GLbyte)

's' – короткое целое (short или GLshort)

'i' – целое (int или GLint)

'f' – вещественное (float или GLfloat)

'd' – вещественное с двойной точностью (double или GLdouble)

'ub' – беззнаковый байт (unsigned char или GLubyte)

'us' – беззнаковое короткое целое (unsigned short или GLushort)

'ui' – беззнаковое целое (unsigned int или GLuint)

'v' – массив из n параметров указанного типа

Имя glColor3d() означает, что у функции есть три параметра типа double. Например, есть еще функция glColor3i() с тремя параметрами типа int. Для целочисленных типов значение цветовой компоненты приводится к диапазону [0, 1] путем деления переданного значения на максимальное значение данного типа. Ниже приведены три поясняющих примера:

glColor3dv(array); // Цвет задается массивом типа double

glColor3ub(200, 100, 0); // Преобразование 200/256,100/256,0/256

glColor3d(0.25, 0.25, 0); // темно-желтый

glColor3ub(0, 100, 0); // темно-зеленый

glColor3ub(0, 0, 255); // ярко-синий

Системы координат

В OpenGL используются три системы координат: левосторонняя, правосторонняя и оконная. Первые две системы являются трехмерными и отличаются друг от друга направлением оси z: в правосторонней она направлена на наблюдателя, а в левосторонней – от наблюдателя внутрь экрана. В большинстве случаев используется правосторонняя (мировая) система координат. Левосторонняя система применяется только для задания параметров проекционного преобразования. Отображение проекции трехмерной сцены производится в двумерной оконной системе координат, связанной с окном на экране.

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

1) установка штатива и наведение фотоаппарата (видовое преобразование);

2) размещение фотографируемых объектов (модельное преобразование);

3) выбор объектива и/или настройка увеличения (проекционное преобр.);

4) выбор размера печатаемой фотографии (оконное преобразование).


Рис. 1.2. Аналогия между фотоаппаратом и OpenGL.


Рис. 1.3. Порядок выполнения преобразований координат вершины объекта.

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

Матрицы преобразований

В OpenGL различные преобразования объектов сцены описываются с помощью матриц размера 4x4. Есть три типа матриц: видовая, проекционная и текстурная. Видовая матрица описывает преобразования объекта в мировых координатах: параллельный перенос, масштабирование и поворот. Проекционная матрица задает вид проекции трехмерных объектов на плоскость экрана (в оконные координаты), а текстурная матрица управляет наложением текстуры на объект.

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

void glMatrixMode(GLenum mode)

Параметр mode принимает значения GL_MODELVIEW, GL_PROJECTION или GL_TEXTURE.

Значения элементов текущей матрицы можно задать в явном виде функцией:

void glLoadMatrix[f d](GLtype* m)

где m указывает на 16-ти элементный массив типа float или double. В нем сначала хранится первый столбец матрицы, затем второй, третий и четвертый.

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

Для матриц каждого типа в OpenGL есть отдельный стек. Для видовых матриц его глубина равна, как минимум, 32, для двух других типов матриц – минимум 2.

Для умножения текущей матрицы на другую матрицу справа используется функция:

void glMultMatrix[f d](GLtype* m)

где m является указателем на матрицу размером 4x4. Однако чаще для изменения матриц в OpenGL удобно пользоваться специальными функциями, которые по значениям параметров преобразований создают нужную матрицу и перемножают ее с текущей. Чтобы сделать текущей созданную матрицу, надо перед вызовом этих функций вызывать glLoadIdentity().

Теперь кратко рассмотрим преобразования, применяемые для отображения трехмерных объектов сцены в окно приложения (рис. 1.3).

Читайте также: