Pull to refresh

Unlimited Detail — интересно, но есть у меня вполне конкретные сомнения…

Reading time 9 min
Views 8.5K
Working with 3D-graphics *
Несколько дней назад проскочило видео по Hacker News (и спасибо ayambit за напоминание о них на Хабре) про компанию Unlimited Detail, которая обещает сделать самые современные карточки NVidia и ATI бесполезными и рендерить сцены в миллиарды точек на обычном процессоре (CPU), без 3D ускорения(!) вообще. Превышая возможности современных видеокарт в сотни раз (тысячи, по заявлениям авторов, которые я ниже оспорю).

Если кто еще не видел:



Сначала на всякий случай о том чего это такое, а потом о том, что у меня, как у программера, сомнения вызывает, что на нетбуках без 3D карт, скоро будут в Crysis 3 играть…

(дальше очень много слов и технических деталей)
Читать дальше →
Total votes 157: ↑146 and ↓11 +135
Comments 210

learnopengl. Урок 1.1 — OpenGL

Reading time 7 min
Views 295K
Programming *C++ *
Tutorial
Translation
Здравствуйте. Несколько недель назад я начинал серию переводов статей по изучению OpenGL. Но на 4 статье один хабровчанин заметил, что мои переводы могут нарушать лицензию, по которой распространяются учебные материалы, предоставленные в исходной статье. И действительно, мои переводы нарушали лицензию. Для разрешения этой проблемы я обратился к авторам того набора уроков, но так и не смог добиться нормального ответа. По этой причине я связался с автором другого, не менее (а возможно даже и более) крутого, набора уроков по OpenGL: Joey de Vries. И он дал полное разрешение на перевод его набора уроков. Его уроки гораздо более обширные, чем прошлый набор, поэтому эти переводы растянутся на долго. И я обещаю, будет интересно. Заинтересовавшихся прошу под кат.

Также я встал на распутье: либо я опишу все основы вроде создания окна и контекста в одной статье, чтобы не плодить статьи, но в таком случае такую огромную статью не всякий осилит; либо я также как и раньше буду переводить, опираясь на иерархию оригинала. Я решил выбрать второй вариант.

На счет уроков по Vulkan: к сожалению мне тяжело сейчас написать уроки по данному API по причине скудной видеокарты на данный момент, которая просто не поддерживает Vulkan API, поэтому уроки по данному API будут только после обновления видеокарты.
Читать дальше →
Total votes 45: ↑42 and ↓3 +39
Comments 9

learnopengl. Урок 1.2 — Создание окна

Reading time 8 min
Views 136K
Programming *C++ *
Tutorial
Translation
В прошлом уроке мы разобрались с тем, что такое OpenGL. В этом уроке мы поговорим о причине необходимости использования GLFW, GLEW и CMake, а также рассмотрим как их использовать. А также освежим в памяти, разницу между статической и динамической линковкой.

Заинтересовавшихся прошу под кат.
Читать дальше →
Total votes 23: ↑21 and ↓2 +19
Comments 17

learnopengl. Урок 1.3 — Hello Window

Reading time 8 min
Views 93K
Programming *C++ *
Tutorial
В прошлом уроке мы подготовили рабочее пространство и теперь мы полностью готовы создать окно.
Данный перевод подготовлен совместно с FERusM за что ему большое спасибо.
Заинтересовавшихся прошу под кат.
Читать дальше →
Total votes 26: ↑22 and ↓4 +18
Comments 26

learnopengl. Урок 1.4 — Hello Triangle

Reading time 20 min
Views 149K
Programming *C++ *
Tutorial
Translation
В прошлом уроке мы таки осилили открытие окна и примитивный пользовательский ввод. В этом уроке мы разберем все азы вывода вершин на экран и воспользуемся всеми возможностями OpenGL, вроде VAO, VBO, EBO для того, чтобы вывести пару треугольников.
Заинтересовавшихся прошу под кат.
Читать дальше →
Total votes 24: ↑23 and ↓1 +22
Comments 8

learnopengl. Урок 1.5 — Shaders

Reading time 14 min
Views 118K
Programming *C++ *
Sandbox

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


В предыдущем уроке мы кратко коснулись темы “поверхностных шейдеров” и того, как их использовать. В данном уроке мы рассмотрим шейдеры подробнее и в частности шейдерный язык OpenGL (OpenGL Shading Language).

Total votes 24: ↑23 and ↓1 +22
Comments 13

learnopengl. Урок 1.6 — Текстуры

Reading time 15 min
Views 118K
Programming *C++ *
Tutorial
Translation

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


Читать дальше →
Total votes 26: ↑26 and ↓0 +26
Comments 6

learnopengl. Урок 1.7 — Трансформации

Reading time 17 min
Views 111K
Programming *C++ *
Tutorial
Translation

Теперь мы знаем как создавать объекты, раскрашивать их и накладывать на них текстуры, но они все еще довольно скучны, поскольку являются статическими объектами. Мы можем попробовать заставить их двигаться изменяя координаты вершин для каждого кадра, но это довольно муторно и требует процессорных вычислений. Есть гораздо более удобный способ для совершения трансформаций над объектом — это применение матриц. Но это не значит, что мы сейчас будем разговаривать про кунг фу и искусственный цифровой мир.

Total votes 32: ↑32 and ↓0 +32
Comments 5

learnopengl. Урок 1.8 — Системы координат

Reading time 17 min
Views 99K
Programming *C++ *Game development *
Tutorial
Sandbox
imageВ предыдущем уроке мы узнали о том, какую пользу можно получить от преобразования вершин матрицами трансформаций. OpenGL предполагает, что все вершины, которые мы хотим увидеть, после запуска шейдера будут в нормализованных координатах устройства (NDC — normalized device coordinates). Это означает, что x, y и z координаты каждой вершины должны быть между -1.0 и 1.0; координаты вне этого диапазона видны не будут. Обычно мы указываем координаты в диапазоне, который настраиваем самостоятельно, а в вершинном шейдере преобразовываем эти координаты в NDC. Затем, эти NDC передаются растеризатору для преобразования их в двумерные координаты/пикселы вашего экрана.
Total votes 25: ↑25 and ↓0 +25
Comments 20

learnopengl. Урок 1.9 — Камера

Reading time 18 min
Views 74K
Programming *C++ *Game development *
Tutorial

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


В этом уроке мы рассмотрим, как можно создать камеру в OpenGL. Мы обсудим камеру типа FPS (First Person Shooter), которая позволит вам свободно перемещаться в трехмерной сцене. Кроме того, мы поговорим о вводе с клавиатуры и мыши, а закончим созданием собственного C++ класса камеры.


Total votes 16: ↑16 and ↓0 +16
Comments 4

learnopengl. Урок 2.1 — Цвета

Reading time 8 min
Views 29K
Programming *C++ *Game development *
Tutorial

Перевод очередного урока с сайта learnopengl.com. Недавно обнаружил на русском Уроки по OpenGL с сайта OGLDev, но некоторые из них требуют 4 версию opengl, а примеры кода слишком зависимы от предыдущих уроков и объектно-ориентированы. Поэтому, вниманию всех интересующихся opengl'ем новичков со стареньким железом предлагаю коротенькую статью о цвете, с которой начинается вторая часть обучающего курса от Joey de Vries:

Читать дальше →
Total votes 15: ↑15 and ↓0 +15
Comments 11

learnopengl. Урок 2.2 — Основы освещения

Reading time 15 min
Views 62K
Programming *C++ *Game development *
Tutorial

Распространение света в реальном мире это чрезвычайно сложное явление, зависящее от слишком многих факторов, и, располагая ограниченными вычислительными ресурсами, мы не можем себе позволить учитывать в расчетах все нюансы. Поэтому освещение в OpenGL основано на использовании приближенных к реальности упрощенных математических моделей, которые выглядят достаточно похожими, но рассчитываются гораздо проще. Эти модели освещения описывают физику света исходя из нашего понимания его природы. Одна из этих моделей называется моделью освещения по Фонгу (Phong). Модель Фонга состоит из трех главных компонентов: фонового (ambient), рассеянного/диффузного (diffuse) и бликового (specular). Ниже вы можете видеть, что они из себя представляют:


Модель освещения Phong

Читать дальше →
Total votes 24: ↑23 and ↓1 +22
Comments 10

Learn OpenGL. Часть 2.3. — Материалы

Reading time 6 min
Views 35K
Programming *C++ *Game development *
Tutorial
Sandbox

image


Пару дней назад я наткнулся на первую статью из этой серии уроков. К сожалению, переведены только начальные уроки, а все самое интересное (SSAO, PBR, тени) только впереди. Этот курс переводили три человека (теперь четыре), и я надеюсь, что кто-то из читателей поможет с переводом остальных частей. К сожалению, я не являюсь профессиональным переводчиком, по этом в тексте могут быть ошибки разного характера. Буду рад, если вы сообщите о них. Приятного чтения!

Total votes 26: ↑26 and ↓0 +26
Comments 6

Learn OpenGL. Часть 2.4. — Текстурные карты

Reading time 7 min
Views 22K
Programming *C++ *Game development *

image


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


Читать дальше →
Total votes 18: ↑18 and ↓0 +18
Comments 1

Learn OpenGL. Урок 2.5 — Источники света

Reading time 13 min
Views 36K
Programming *C++ *Game development *
Tutorial
Sandbox
OGL3

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


Вплоть до этой статьи мы довольствовались освещением, исходящим из одной точки в пространстве. И результат был неплох, однако в реальности существует множество источников освещения с различающимся «поведением». В данном уроке рассматриваются несколько таких источников света. Умение имитировать характеристики разных источников света является еще одним инструментом обогащения создаваемых сцен.

Начнем урок с направленного источника света, затем перейдем к точечному источнику, который является развитием упомянутого простого метода освещения. В конце рассмотрим, как устроен источник, имитирующий свойства прожектора (спотлайт).
Читать дальше →
Total votes 27: ↑26 and ↓1 +25
Comments 0

learnopengl. Урок 2.6 — Несколько источников освещения

Reading time 7 min
Views 17K
C++ *Game development *
Sandbox
OGL3

Несколько источников освещения


В предыдущих уроках мы выучили довольно много об освещении в OpenGL. Мы познакомились с моделью освещения по Фонгу, разобрались как работать с материалами, текстурными картами и различными типами источника света. В этом уроке мы собираемся объединить все наши знания, чтобы создать полностью освещенную сцену с 6 активными источниками света. Мы собираемся симулировать солнце как направленный источник освещения, добавим 4 точки света, разбросанные по всей сцене, и конечно мы добавим фонарик.

В предыдущих сериях

Часть 1. Начало

  1. OpenGL
  2. Создание окна
  3. Hello Window
  4. Hello Triangle
  5. Shaders
  6. Текстуры
  7. Трансформации
  8. Системы координат
  9. Камера

Часть 2. Базовое освещение

  1. Цвета
  2. Основы освещения
  3. Материалы
  4. Текстурные карты
  5. Источники света

Читать дальше →
Total votes 11: ↑11 and ↓0 +11
Comments 1

learnopengl. Уроки 3.1 (Assimp) + 3.2 (класс Mesh)

Reading time 10 min
Views 32K
C++ *Game development *
Tutorial
OGL3

Assimp


Во всех уроках, мы, в основном, использовали нашего маленького друга — контейнер, но через некоторое время, даже наши лучшие друзья становятся немного скучными. В большом графическом приложении, обычно присутствуют много моделей, на которые намного приятнее смотреть, чем на наш статичный контейнер. Хотя, в отличие от контейнера, нам будет очень сложно, вручную, определить все вершины, нормали и текстурные координаты таких сложных моделей, как например дом или человекоподобные персонажи. Вместо этого, мы будем имортировать модели в наше приложение; модели, которые были тщательно нарисованы, в 3D редакторах, таких как Blender, 3DS MAX или Maya.


Эти, так называемые инструменты 3D моделирования, позволяют художникам создавать сложные модели и применять текстуры к ним с помощью процесса, который называется текстурная развертка (uv-mapping). Инструменты автоматически генерируют все вершинные координаты, вершины нормалей и текстурные координаты, экспортируя их в файл модели. Таким образом, художники имеют обширный набор инструментов для создания высококачественных моделей, не заботясь о технических деталях. Все технические аспекты спрятаны в экспортируемом файле. Мы, как программисты графики, должны позаботится об этих технических деталях.
Читать дальше →
Total votes 10: ↑10 and ↓0 +10
Comments 1

Learn OpenGL. Урок 3.3 — Класс 3D-модели

Reading time 12 min
Views 37K
Programming *C++ *Game development *
Tutorial
Translation
OGL3

Класс 3D-модели


Ну что ж, пора закатать рукава и погрузиться в дебри работы с кодом загрузки и преобразования данных Assimp! Задача урока – создать еще один класс, представляющий собой целую модель, содержащую множество полигональных сеток, а также, возможно, состоящую из нескольких подобъектов. Здание с деревянным балконом, башней и, например, плавательным бассейном все равно будет загружено как единая модель. С помощью Assimp мы подгрузим данные и преобразуем их во множество объектов типа Mesh из прошлого урока.
Читать дальше →
Total votes 19: ↑19 and ↓0 +19
Comments 3

Learn OpenGL. Урок 4.1 — Тест глубины

Reading time 10 min
Views 32K
Programming *C++ *Game development *
Tutorial
Translation
OGL3

Буфер глубины


В уроке, посвящённом системам координат, мы выполнили рендер трехмерного контейнера с использованием буфера глубины, что позволило предотвратить ошибочный вывод граней, находящихся позади других. В этом уроке мы пристальнее взглянем на буфер глубины (или z-буфер) и хранимые в нем значения, а также узнаем как конкретно проходит проверка находится ли фрагмент позади других.
Читать дальше →
Total votes 18: ↑18 and ↓0 +18
Comments 3

Learn OpenGL. Урок 4.3 — Смешивание цветов

Reading time 11 min
Views 27K
Programming *C++ *Game development *
Tutorial
Translation
OGL3

Смешивание цветов


Смешивание в OpenGL (да и других графических API, прим. пер.) является той техникой, которую обычно связывают с реализацией прозрачности объектов. Полупрозрачность объекта подразумевает, что он не залит одним сплошным цветом, а сочетает в себе в различных пропорциях оттенок своего материала с цветами объектов, находящихся позади. Как пример, можно взять цветное стекло в окне: у стекла есть свой оттенок, но в итоге мы наблюдаем смешение оттенка стекла и всего того, что видно за стеклом. Собственно, из этого поведения и возникает термин смешивание, поскольку мы наблюдаем итоговый цвет, являющийся смешением цветов отдельных объектов. Благодаря этому, мы можем видеть сквозь полупрозрачные объекты.
Читать дальше →
Total votes 14: ↑14 and ↓0 +14
Comments 0