|
Заблокирован
|
||||||
Уроки OpenGL - FAQ26.03.2015, 04:30. Показов 47342. Ответов 15
Метки нет (Все метки)
Уроки OpenGL Оглавление Предисловие Урок 1. Рисование OpenGL в окне на WinAPI Урок 2. GLUT vs WinAPI. Будь проще... Урок 3. Круг, окружность, эллипс. Рисование композиций из нескольких разных фигур Урок 4. Точка, линия, ломаная линия, кривая, замкнутая кривая. Толщина линии Урок 5. Рисование первой 3D-фигуры. Параллелепипед Урок 6. Градиентная заливка. Полноэкранный режим. Клавиша Esc Урок 7. Текстурная заливка. Загрузка текстур из BMP (урок в разработке...) Урок 8. Освещение (урок в разработке...) Предисловие Об OpenGL
OpenGL - независимый от языка программирования и платформы программный интерфейс (библиотека) для рисования двухмерной и трехмерной графики. В отличие от WinAPI GDI, в OpenGL поддерживается прозрачность Alpha (позволяющая рисовать полупрозрачные элементы), а, также разные игровые "фичи" (текстурные и градиентные заливки, туман, и др.), и, как вы уже знаете, трехмерная графика. Об этом FAQ
Если вы новичок в программировании, то, прежде чем взяться за это FAQ, изучите, хотя бы, пару книг по основам C++ и WinAPI... Все это, нам здесь пригодится... В FAQ почти не будет текста, зато, будет много кода и иллюстраций. Код - в основном, на C++ в Visual Studio, поэтому, работает, только, на Windows. "Красноглазые" могут легко его портировать, на Linux... Что нужно для OpenGL. Где скачать OpenGL. Как установить OpenGL
Прежде, чем приступить, непосредственно, к урокам, я отвечу на эти 3 вопроса, довольно часто возникающие на форумах. Для разработки на C++ под OpenGL, нужны 3 вещи: 0) ОС семейства Windows с установленной Visual Studio или Visual C++ Express. 1) Библиотека opengl32.dll. Уже входит в Windows - лежит в system32 или SysWOW64... Если не уверены (работаете с каким-то особым, или очень старым, изданием Windows) - проверьте сами... 2) Статическая библиотека opengl32.lib. Уже входит в Visual Studio. Достаточно не забывать про #pragma comment (подробнее - см. Урок 1 и следующие уроки). 3) Заголовок gl/GL.h, содержащий объявления функций OpenGL. Уже входит в Visual Studio. Достаточно не забывать про #include. Для того, чтобы работало ваше приложение на OpenGL, нужна только opengl32.dll - которая входит в Windows, поэтому, кроме EXEшника, ничего распространять не нужно. Несколько иначе обстоит дело с библиотекой GLUT... Это не часть OpenGL, а сторонняя библиотека, поэтому она не входит в ОС, ее нужно скачать для разработки, и ее нужно распространять с вашей программой... Но, об этом позже, и, в первом уроке мы ее использовать не будем. Урок 1. Рисование OpenGL в окне на WinAPI Особенности OpenGL
Система координат. Счет ведется от центра окна, а не, от левого верхнего угла. Ось Y направлена вверх. Ось X - направлена вправо. Ось Z - направлена вглубь. Единица измерения - не пиксель, а, доля (дробь от 0.0 до 0.1) отрезка от центра до верхнего края экрана (Y), до правого края экрана (X), или до бесконечности (Z). Так как такая система координат зависит от размера окна, то, при изменении размера окна, все графические примитивы, также, пропорционально изменяются в размере. См. иллюстрацию "Система координат". Формирование цвета. Каждая из составляющих цвета (R, G, B, A) лежит в диапазоне от 0.0 до 1.0, а, не от 0 до 255. 255 = 1.0. 0 = 0.0. 128 = 0.5. Отрисовка многоугольника. Многоугольник, как бы, обводится по точкам. Последовательность точек - важна. От нее зависит порядок обводки. Создадим окно на WinAPI и нарисуем в нем темно-зеленый прямоугольник с помощью OpenGL. Чтобы продемонстрировать трехмерность, реализуем поворот прямоугольника по осям X и Y на 5 градусов, при нажатии любой клавиши: Код
3
|
||||||
| 26.03.2015, 04:30 | |
|
Ответы с готовыми решениями:
15
Литература, уроки по OpenGL 3+ Дайте ссылки на уроки по OpenGL в C# Уроки создания движков и редакторов на OpenGL+delphi |
| 26.03.2015, 09:49 | |
|
Не по теме: Вот если ты покажешь скажем как можно с помощью OpenGL более менее крупное приложение Кликните здесь для просмотра всего текста
Скажем что то вроде приложение которое загружает мир из .OBJ файла можно передвигаться (WASD+mouse) имеет коллизию с этим миром тогда это чего то стоить а гайдов как рисовать "Квадрат" Over9000 в интернете....
0
|
|
| 26.03.2015, 14:12 [ТС] | |
|
Не по теме: hays, ну, здесь уже своим движком попахивает...
0
|
|
|
Заблокирован
|
|||||||||||
| 26.03.2015, 18:33 [ТС] | |||||||||||
|
Урок 2. GLUT vs WinAPI. Будь проще... О GLUT
GLUT (OpenGL Utility Toolkit) - библиотека утилит, надстройка над WinAPI, позволяющая легко и просто создать окно OpenGL и настроить его на обработку рендеринга (WM_PAINT), клавиатуры (WM_KEYDOWN), и др., не используя, WinAPI. Кроме того, библиотека GLUT является кроссплатформенной (на Windows использует WinAPI, а, на других ОС - API этих ОС), поэтому, облегчает портирование приложений с Windows - на другие ОС. В отличие от opengl32.dll, glut32.dll не входит в Windows, а, glut.h и glut32.lib - не входят в Windows SDK (Visual Studio). Но, все 3 файла (все необходимое для использования GLUT на Windows), можно скачать здесь. Файл glut32.dll помещают рядом с EXE, а, glut32.lib и glut.h - рядом с *.cpp. Основная задача GLUT - именно упрощение и укорачивание кода, обеспечение возможности не отвлекаться на посторонние моменты (например, регистрацию и созданию окна WinAPI), а, сосредоточиться на графике OpenGL... Взгляните на код... Сами увидите, что, он стал проще и понятнее... В дальнейших уроках, будет использоваться, в основном, GLUT, поскольку, он почти полностью покрывает возможности WinAPI, и значительно упрощает разработку. Сделаем то же, что и в Уроке 1, но, используя GLUT, вместо, WinAPI: Код (С++)
Сделаем то же самое и на Visual C#, новом для нашего FAQ языке. Вместо opengl32.lib (которого для C# нет), будем использовать библиотеку Tao.OpenGL, а, вместо glut.h, glut32.dll и glut32.lib - библиотеку Tao.FreeGlut. Обе библиотеки, можно скачать на официальном сайте Tao Framework. Код (Visual C#)
2
|
|||||||||||
|
Заблокирован
|
||||||
| 28.03.2015, 11:58 [ТС] | ||||||
|
Урок 3. Круг, окружность, эллипс. Рисование композиций из нескольких разных фигур Код
2
|
||||||
|
Заблокирован
|
||||||
| 01.04.2015, 04:33 [ТС] | ||||||
|
Урок 4. Точка, линия, ломаная линия, кривая, замкнутая кривая. Толщина линии Нарисуем красную линию, красную точку, белую ломанную линию, толщиной 4 пикселя, и кривую линию (формула кривой: y = x^2). Код
2
|
||||||
|
Заблокирован
|
|||||||||||
| 02.04.2015, 22:25 [ТС] | |||||||||||
|
Урок 5. Рисование первой 3D-фигуры. Параллелепипед О рисовании трехмерных фигур
Трехмерная фигура состоит из двухмерных примитивов (например, многоугольников), помещенных в трехмерном мире. Вершины примитива в трехмерном мире имеют не только X- и Y-координаты, но и, Z-координату. К примеру, если вершины передней (ближайшей к нам) грани куба - имеют Z = 0, то, вершины задней грани куба - могут иметь Z > 0, а, вершины остальных (боковых) сторон куба - будут иметь различное Z: две передние вершины каждой грани - Z = 0, а 2 задние вершины каждой грани - Z > 0). Перед рисованией 3D-фигур необходимо включить тест глубины:
Нарисуем параллелепипед с разноцветными гранями, в формациях квадрата из уроков 1-2. Код
2
|
|||||||||||
| 03.04.2015, 02:08 | |
|
0
|
|
| 03.04.2015, 03:27 [ТС] | |
|
Не по теме: snake32, спасибо, за более информативное определение теста глубины.
0
|
|
|
Заблокирован
|
|||||||||||||||||||||
| 05.05.2015, 03:24 [ТС] | |||||||||||||||||||||
|
Урок 6. Градиентная заливка. Полноэкранный режим. Клавиша Esc О градиентной заливке
Чтобы задать градиентную заливку, нужно разным вершинам полигона задать разные цвета. Если перед тем, как задавать одну из вершин через glVertex3f, вызвать glColor3f, то эта и следующая вершины, будут заданного цвета. Рассмотрим несколько разных градиентов, на примере прямоугольника. Если верхние вершины прямоугольника сделать красными, а нижние - зелеными, то прямоугольник будет залит горизонтальным красно-зеленым градиентом: верхняя часть - красная, нижняя - зеленая. Если левые вершины сделать красными, а правые - зелеными, то прямоугольник будет залит вертикальным красно-зеленым градиентом: левая часть - красная, правая - зеленая. Если все вершины сделать разноцветными, то полигон будет поделен на 4 равные части соответствующих цветов, плавно переходящие друг в друга. Получится радиальная градиентная композиция. Также, можно создать линейную градиентную композицию, если разместить дополнительные точки (вершины), на сторонах прямоугольника. О полноэкранном режиме
Функция
Обратите внимание на слово "созданное". Функция должна вызываться - после glutCreateWindow, а не до, и не взамен. Об обработке отдельных клавиш
Наши предыдущие приложения - одинаково реагировали на нажатия любых клавиш и комбинаций клавиш:
В этом уроке, мы рассматриваем полноэкранный режим. Приложение теперь не закроешь мышкой. Назначим специальную клавишу, которая будет закрывать приложение, а не, поворачивать сцену, как остальные клавиши. Конечно же, это будет клавиша Esc:
Слегка изменим программу из урока 5. Грани параллелепипеда - зальем разными градиентами, вместо монотонной заливки. Рисовать будем - в полноэкранном режиме, вместо оконного. Код
2
|
|||||||||||||||||||||
|
Заблокирован
|
||||||
| 30.11.2015, 11:06 [ТС] | ||||||
|
Урок 7. Текстурная заливка. Загрузка текстур из BMP (урок в разработке...) BMP - достаточно простой формат. Его бинарная структура, подробно описана в Википедии на русском языке, и, для большей наглядности, - может быть легко проверена экспериментальным путем, с помощью HEX-редактора. Что позволяет реализовать загрузку из него пикселей для текстуры - вручную, без каких-либо специальных библиотек. Код (в папке проекта и в папке с EXE, должен лежать файл Texture.bmp)
3
|
||||||
|
0 / 0 / 0
Регистрация: 17.04.2016
Сообщений: 3
|
||||||
| 17.04.2016, 18:29 | ||||||
|
Доброго времени суток. У меня есть программа, которая рисует различные фигуры, различными методами. Возникла проблема при попытке сделать градиентную заливку для треугольника. Задаю красный и желтый цвета вершинам треугольника, а градиент отрисовывается из красного в черный. При этом градиентная заливка линии выполняется. Вот код:
0
|
||||||
|
0 / 0 / 0
Регистрация: 17.04.2016
Сообщений: 3
|
||||||
| 17.04.2016, 18:32 | ||||||
|
Смолевич, доброго времени суток.
У меня есть программа, которая рисует различные фигуры, различными методами. Возникла проблема при попытке сделать градиентную заливку для треугольника. Задаю красный и желтый цвета вершинам треугольника, а градиент отрисовывается из красного в черный. При этом градиентная заливка линии выполняется. Вот код:
0
|
||||||
|
|
|||||||||||||||||
| 05.03.2020, 16:53 | |||||||||||||||||
|
Благодарю за уроки, Смолевич.
У меня такое замечание. В уроке Кликните здесь для просмотра всего текста
У меня при таком порядке подключения на Microsoft Visual Studio Community 2019 Версия 16.4.4 при сборке возникают ошибки неопределённых идентификаторов OpenGL и GLUT: Кликните здесь для просмотра всего текста
Если его поменять на следующий: Кликните здесь для просмотра всего текста
то есть, чтобы системные заголовки подключались первыми, и только потом локальные, то эти ошибки уходят. Предлагаю внести это в содержание урока.
0
|
|||||||||||||||||
|
Просто Икс
691 / 233 / 47
Регистрация: 15.12.2009
Сообщений: 696
|
||
| 05.03.2020, 18:25 | ||
|
Подключаемые библиотеки, как и пути к инклудам и библиотекам, указываются в настройках проекта, а в идеале в make файлах, чтобы сборка была независимой от IDE и тд. Последнее менее критично, но в жизни пригодится. Добавлено через 11 минут UPD: Советую приучать себя к СMake. Он довольно удобен и используется практически во всех проектах уже.
1
|
||
| 23.03.2020, 10:36 | |
|
0
|
|
| 23.03.2020, 10:36 | |
|
Помогаю со студенческими работами здесь
16
Создаю игру с научным уколоном на C++/opengl. Как подключить openGL и добиться кроссплатформенности (2 главы перевода книги доступно) OpenGL Programming Guide, Version 4.3, 8th Edition - OpenGL Ошибки при подключение opengl, немного не связанные с opengl Не загружается текстура в OpenGL (OpenGL + Классы) OpenGL.Урок 1. простой OpenGL-проект Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|