[autism opengl] Не отрисовываются объекты, заданные в константным массивом в вершинном шейдере

Только что, спустя 40 минут поиска ошибки, сделал открытие: даже если у вас есть константный массив float’ов, хардкодом забитый в шейдер вершин, openGL ничего не отрисует, если не установлен VAO.

Т.е. в случае такой ошибки просто добавляем

glGenVertexArrays(1, &VAO);
glBindVertexArray(VAO);

Читать далее →

Вольный перевод главы «Tesselation Example — Terrain Rendering» или коротко о том, как сгенерировать ландшафт с помощью аппаратной тесселяции.

Совушка
Всем прекрасной графики!

Разбираюсь в этой теме сам и заодно помогу другим. Есть прекрасная статья, демонстрирующая реальное применение аппаратной тесселяции на различных примерах. Привожу вольный пересказ (который никак не относится к самой главе и к её содержанию, все совпадения — случайны) этой статьи о генерации ландшафта + даю некоторые ссылки, которые объясняют те или иные термины. В конце статьи будет ссылка на готовый пример. Всё, что в тексте будет курсивом или оформлено как спойлер —  это мои дополнения, которые я разжёвывал прежде всего для себя. Если кто-то читает эту статью и ему важен прежде всего её смысл — не читайте текст курсивом.

Чтобы продемонстрировать потенциал использования тесселяции, мы рассмотрим простую систему рендеринга местности, основанную на четырёхугольных патчах и displayment mapping. Displaysment map (карта сдвигов) — это текстура, которая содержит сдвиги поверхности в каждой точке. [spoiler title=’Что такое displayment mapping на примере’ style=’green’ collapse_link=’true’]Для примера — мы создали некоторую сетку, из координат которой составили некоторую плоскость. Она растянута в нашей 3D-сцене по координатам x и z. Координата y по всей поверхности — занулена. Тем самым мы получаем гладкую 2D-поверхность из квадратов. Координату y нужно как-то обработать и сделать это таким образом, чтобы на этой поверхности возникли горы и овраги, и всё это было более-менее плавно. Для этого используется карта высот (некоторая структура, хранящая значение координаты y для каждой точки плоскости) и displayment mapping, обычно, подразумевает формирование такой карты высот через текстуру, загруженную в вершинный шейдер. [/spoiler] Читать далее →

Расшифровка чёрных ящиков из habr-статьи «Процедурная растительность на OpenGL и GLSL».

itxor - рендеринг динамически-изменяемой воды с помощью шейдеров тесселяции
Тесселяция способна на прекрасные вещи. (Картинка не имеет никакого отношения к статье, кроме тесселяции. Она просто для привлечения вашего внимания)

На хабре есть прекрасная статья от 2016 года, рассказывающая как отрендерить на сцене динамическую растительность, красиво развивающуюся под действием «ветра». Там же, в самом начале статьи, приложена ссылка на github автора, и он крайне советует читать код по мере изучения материала статьи. Я же в данной статье постараюсь дать подробные комментарии к его шейдеру управления тесселяции (далее просто шейдер тесселяции) и приведу немного ссылок по тесселяции в OpenGL, которые могут оказаться полезными.

Читать далее →

Коротко об mt19937, uniform_real_distribution и генерации одномерных шумных текстур

Столкнулся с интересной темой — надо загрузить в видеопамять большое (относительно) количество шума. Под шумом понимается некоторое количество равномерно распределённых случайных чисел, иначе говоря — случайных чисел из одного интервала.

Решение известно давно, но мало где описывается, поэтому продублирую сюда с некоторыми пояснениями, на поиск которых я потратил некоторое время.

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

Читать далее →

Заметки. Решение ошибки QOpenGLFunctions_4_1_core: no such file or directory

Что произошло

Появилась ошибка

QOpenGLFunctions_4_1_core: no such file or directory

при попытке сборки проекта клонированного с git посредством qmake и make. В системе стоял как QT4, так и QT5.

В чём была проблема

Класс QOpenGLFunctions_4_1_core появился, согласно документации, в QT5, а qmake подтягивал для сборки инклюды от QT4.

Решение

Решение оказалось тривиальным, но от незнания особенностей инструментов поиски его заняли порядочно времени:

$ qmake --version
QMake version 2.01a
Using Qt version 4.8.7 in /usr/lib/x86_64-linux-gnu

$ qmake -qt=qt5 --version
QMake version 3.0
Using Qt version 5.5.1 in /usr/lib/x86_64-linux-gnu

$ QT_SELECT=qt5 qmake --version
QMake version 3.0
Using Qt version 5.5.1 in /usr/lib/x86_64-linux-gnu

За решение спасибо unix.stackexchange.com && pevik

Указатели в С++. Первая битва.

Ты че, гнида, в указателях запутался? (с)

Не понимаешь как работают указатели? Для чего они нужны? Запутался в этом потоке звездочек и амперсандов? Ты попал куда надо. Настало время дать им последний бой и разобраться раз и навсегда с ними.

Читать далее →

[Такая себе задача №1] Удали вершину и сделай из графа дерево.

На заре третьего курса приспичило мне решить задачу, которую дают курсу первому. Звучала они именно так, как описано в заголовке, но с небольшой правкой — удалить нужно одну вершину.

Как задаётся дерево, как задаётся граф, как всё это выводится — не сказано.

Цель заметки —  бери код, что я написал, если тебе нужно решить данную задачу. Я вот его в сети не нашёл, и пришлось писать. А так, может, кому-то и поможет. Пока гуглил, пришёл к выводу, что во многих университетах это задание есть на курсовую работу.

Читать далее →

Как передать данные с одной страницы на другую (из news.list в news.list)

Небольшая заметка, надеюсь, кому-то будет полезна.

Интро.

Временами приходится работать с CMS bitrix, и так как я студент 3-его курса и это моя первая работа так или иначе «около специальности», то многому я учусь. И сегодня предо мной встала такая задача:  кастомизировать определённым образом компонент news.list, и передать данные из него на другую страницу, где лежит такой же news.list. Вообще, эти 2 news.list’а реализуют подобие галереи. Почему я не использую стандартную галерею или не возьму комплексный компонент — даже не спрашивайте. Первый news.list — это аналог catalog.section.list — он просто выводит данные из инфоблока, причём специфично. В инфоблоке находятся разделы (это вроде как альбомы с видеозаписями).  В каждом разделе будет много видеозаписей. У каждого альбома задаётся preview-изображение и само-собой название. Вывести нужно было и изображение, и название, и последние 2 добавленных видео. В качестве видео выступают элементы инфоблока, лежащие в текущем разделе. У них заданы preview-картинка и ссылка на youtube-видео.

Читать далее →

Баг движка SMF. Правим обрезание заголовков, тем, топиков.

По-работе пришлось исправлять странный баг. Суть была такова: есть некий сайт, работает он на bitrix’е. Сайт крутится на сервере под управлением centOS. В одном из разделов сайта залит форумный движок SMF — типичный такой форум, без особых наворотов.

Так вот работал себе этот форумный движок на этом сервере много лет, а тут что-то произошло и появились странные баги:

  1. Обрезались title у страницы
  2. Обрезались названия тем
  3. Обрезались сами тексты топиков

Читать далее →