Подключение Glut к Visual Studio
Привет. Итак, работать с OpenGL проще и много примеров с использованием библиотеки GLUT, поэтому ее и загружаем в первую очередь — нам нужны бинарники, собранные под Win32 — загружаем их отсюда http://user.xmission.com/~nate/glut.html, файл glut-3.7.6-bin.zip (117 KB)
После распаковываем, и можно скопировать папку к папке проекта. Далее остается настроить свойства проекта, для этого заходим в меню Project — Properties. Заходим в раздел C/C++, находим пункт Additional Include Directories — это дополнительные папки, в которых Visual Studio будет искать заголовочные файлы (.h). Добавляем в список директорию, в которой лежит glut.h
Затем переходим в раздел Linker и там также добавляем дополнительные директории для поиска lib файлов (указываем путь до папки с glut32.lib)
Теперь нужно еще указать, что необходимо линковать саму библиотеку glut32.lib. Это делается в разделе Linker — Input, Additional Dependencies. В нем просто указываем имя либ-файла glut32.lib.
На этом настройки закончены и можно приступать к примеру (взято отсюда):
#include «stdafx.h»
#include
void Display() <
glClear(GL_COLOR_BUFFER_BIT);
glFlush();
>
void Initialize() <
glClearColor(0.8, 1.0, 0.6, 1.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-200.0, 200.0, -200.0, 200.0, -5.0, 5.0);
>
int main(int argc, char ** argv) <
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(400, 400);
glutInitWindowPosition(100, 200);
glutCreateWindow(«Our first GLUT application!»);
glutDisplayFunc(Display);
Initialize();
glutMainLoop();
return 0;
>
Проект должен удачно скомпилироваться. Для запуска требуется еще скопировать glut32.dll в папку с exe. При запуске на экране будет одно консольное окно и одно OpenGl окно салатового цвета.
После этого рекомендую попробовать проделать тоже самое, но с библиотекой freeglut, т.к. она является намного новее той, что я привел выше. Вам нужно загрузить ее, потом распаковать архив, перейти в директорию \freeglut-2.8.0\freeglut-2.8.0\VisualStudio\2010, откуда запустить файл проекта, обновить до версии 2012 и собрать проект в Release сборке или Debug.
После сборки проекта у вас lib файл и dll будет доступен в \freeglut-2.8.0\lib\x86\Debug. А h-файл в \freeglut-2.8.0\include.
В пример нужно заменить include на
#include
Не получается подключить библиотеку OpenGL
Не могу никак подключить библиотеку OpenGL Я уже куда только не сувала эту библиотку в разные папки, у меня эта библиотека уже по всему компьютеру. Но вопрос у меня такой: Почему VS ищет библиотеку с названием freeglutd.lib. Если у меня везде она называется freeglut.lib! Может в этом ошибка? Где в VS посмотреть где он ищет файл и вообще почему он ищет файл с таким названием?
Отслеживать
задан 15 янв 2021 в 10:02
1 1 1 бронзовый знак
d — от слова «дебажный». В дебажных билдах библиотеки с суффиксом d, в релизных — без. Подробнее не знаю.
подключение openGL в Visual Studio 7.1
не знаю, куда прописать openGL-ные бибилиотеки (glu32.lib и т.д.) в проект, чтобы линковался. Подскажите, плз!
в Link и пропиши
так а где именно в линк?
project->properties->linker
а дальше куда?
project->properties->linker->additional library directories
#pragma comment(lib, «имя библиотеки»)
всем спасибо!
вроде все либы, которые нужно было подключить, подключила (opengl32.lib glaux.lib glu32.lib). Но выдается ошибка
hartriView.obj : error LNK2019: unresolved external symbol "private: int __thiscall
ChartriView::SetWindowPixelFormat(struct HDC__ *)" (?SetWindowPC@AA@@Z)
referenced in function "public: int __thiscall ChartriView::OnCreate(struct tagCREATESTRUCTA *)"
(?C@QAEHPAUtagCRE@@Z)
может, подскажете, что еще нужно подключить?
project->properties->linker->additional library directories
сюда dll прописываюцца ,а
в коде программы
#pragma comment(lib, «имя библиотеки»)
Дело не в либах. В тексте сообщения об ошибке всё написано. У тебя в функции
intChartriView::OnCreate( LPCREATESTRUCT lpCreateStruct )
вызывается функция
int ChartriView::SetWindowPixelFormat(HDC hDC)
. Она объявлена в h файле, но её реализации, что-то типа
int ChartriView::SetWindowPixelFormat(HDC hDC)
int m_GLPixelIndex;
PIXELFORMATDESCRIPTOR pfd;
pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);
pfd.nVersion = 1;
pfd.dwFlags = PFD_DRAW_TO_WINDOW |
PFD_SUPPORT_OPENGL |
PFD_DOUBLEBUFFER;
pfd.iPixelType = PFD_TYPE_RGBA;
pfd.cColorBits = 32;
pfd.cRedBits = 8;
pfd.cRedShift = 16;
pfd.cGreenBits = 8;
pfd.cGreenShift = 8;
pfd.cBlueBits = 8;
pfd.cBlueShift = 0;
pfd.cAlphaBits = 0;
pfd.cAlphaShift = 0;
pfd.cAccumBits = 64;
pfd.cAccumRedBits = 16;
pfd.cAccumGreenBits = 16;
pfd.cAccumBlueBits = 16;
pfd.cAccumAlphaBits = 0;
pfd.cDepthBits = 32;
pfd.cStencilBits = 8;
pfd.cAuxBuffers = 0;
pfd.iLayerType = PFD_MAIN_PLANE;
pfd.bReserved = 0;
pfd.dwLayerMask = 0;
pfd.dwVisibleMask = 0;
pfd.dwDamageMask = 0;
m_GLPixelIndex = ChoosePixelFormat( hDC, &pfd);
if(m_GLPixelIndex==0) // Let's choose a default index.
m_GLPixelIndex = 1;
if(DescribePixelFormat(hDC,m_GLPixelIndex,sizeof(PIXELFORMATDESCRIPTOR&pfd)==0)
return 0;
>
if (SetPixelFormat( hDC, m_GLPixelIndex, &pfd)==FALSE)
return 0;
return 1;
>
похоже нету в cpp файле. Проверь там. И есть такое чувство, что ты пользуешься сырцами из книжки Игоря Тарасова по основам OGL и делаешь это невнимательно. А может я не прав.
да, вы правы.
Эта ф-ция была объявлена, но почему-то нигде не описана.
Про книгу Тарасова слышу в первый раз, так что код не оттуда.
Большое спасибо
Как подключить opengl в visual studio 2019
Сложность работы с OpenGL , как и с любой достаточно продвинутой технологией, состоит в том, что до написания первой строчки кода, рисующей что-либо на экране, требуется создать необходимые объекты, установить формат пиксела, проинициализировать вспомогательные буферы и т.д. Т.е. сообщить OpenGL , что, где и как мы собираемся рисовать.
Во многих книгах первая глава, размером в несколько десятков страниц посвящена подробному разбору интеграции OpenGL в систему. Человеку, который хочет изучать графику, это обычно кажется невероятно скучным. Часто такое решение не является кроссплатформенным, в то время, как многие программы для научной визуализации создаются под Linux .
Решением в данной ситуации является использование библиотеки GLUT . Она берет на себя работу по созданию окна, инициализации OpenGL , обработки сообщений от мыши и клавиатуры. Более того, используя библиотеку GLUT , такие функции, как включение аппаратного сглаживания, делаются в несколько строк кода.
Прим. Существуют достаточно большие и сложные приложения, предназначенные для научной визуализации, созданные с использованием библиотеки GLUT . Так что эта библиотека используется не только в учебных целях, но и в ряде реальных продуктов, построенных на технологии OpenGL .
Установка GLUT
GLUT не идет по умолчанию в системе и в среде разработки. Вам потребуется найти и скачать последнюю версию по ссылке: GLUT Downloads . Скопируйте *. dll файлы в папку system , находящуюся в директории c Windows . Файлы *. lib положите в папку lib Visual C ++, файл glut . h в папку Include\gl .
Прим. Версию 3.6 можно скачать по ссылке: glutdlls36.zip
К примеру, файлы могут располагаться таким образом:
C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Lib
C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\gl
Код шаблона
#include «engine.h»
GLvoid Engine::SetProjectionMatrix(GLvoid) <
glMatrixMode(GL_PROJECTION); // Действия будут производиться с матрицей проекции
glLoadIdentity(); // Текущая матрица (проекции) сбрасывается на единичную
glFrustum(-1, 1, -1, 1, 3, 10); // Устанавливается перспективная проекция
>
GLvoid Engine::SetModelviewMatrix(GLvoid) <
glMatrixMode(GL_MODELVIEW); // Действия будут производиться с матрицей модели
glLoadIdentity(); // Текущая матрица (модели) сбрасывается на единичную
glTranslatef(0.0, 0.0, -8.0); // Система координат переносится на 8 единиц вглубь сцены
glRotatef(30.0, 1.0, 0.0, 0.0); // и поворачивается на 30 градусов вокруг оси x,
glRotatef(70.0, 0.0, 1.0, 0.0); // а затем на 70 градусов вокруг оси y
>
GLvoid Engine::Resize(GLsizei width, GLsizei height) <
if (height == 0)
<
height = 1;
>
glViewport (0, 0, width , height ); // Устанавливается область просмотра
Height = height;
Width = width;
SetProjectionMatrix();
SetModelviewMatrix();
>
GLvoid Engine::Init(GLvoid) <
glClearColor(0.2f, 0.5f, 0.75f, 1.0f ); // Устанавливается синий фон
glClearDepth( 1.0f ); // Устанавливается значение для
// заполнения буфера глубины по умолчанию
glEnable(GL_DEPTH_TEST); // Включается тест глубины
glDepthFunc(GL_LEQUAL); // Устанавливается значение, используемое
// в сравнениях при использовании
// буфера глубины
glShadeModel(GL_SMOOTH); // Включается плавное затенение
glEnable(GL_LINE_SMOOTH); // Включается сглаживание линий
glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); // Выбирается самый качественный
// режим сглаживания для линий
glEnable(GL_BLEND); // Включается смешение цветов, необходимое
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // для работы сглаживания и задается
// способ смешения
>
GLvoid Engine::Draw(GLvoid)
<
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Очищается буфер кадра и буфер глубины
glPushMatrix(); // Запоминается матрица модели
glColor3f(1.0f, 1.0f, 1.0f ); // Задается текущий цвет примитивов
glutWireCube( 2.0f ); // Рисуется проволочный куб со стороной 2
glPopMatrix(); // Восстанавливается матрица модели
>
Подробные комментарии помогут вам разобраться в данном модуле, но все функции, так или иначе, будут рассмотрены подробнее в последующих статьях.
Итак, шаблон создан. Последующие статьи будут базироваться на нём. Когда нам потребуется реагировать на действия пользователя, ввод с использованием библиотеки GLUT будет рассмотрен в отдельной статье.
