Как стать автором
Обновить
2
0
Родион @MicroSDA

Разработчик освобожденный

Отправить сообщение

Суперсовременный OpenGL. Часть 1

Время на прочтение7 мин
Количество просмотров42K


Всем привет. Все кто хоть немного разбирался в теме OpenGL знают, что существует большое количество статей и курсов по этой теме, но многие не затрагивают современный API, а часть из них вообще рассказывают про glBegin и glEnd. Я постараюсь охватить некоторые нюансы нового API начиная с 4-й версии. Ссылка на вторую часть статьи
Читать дальше →
Всего голосов 53: ↑52 и ↓1+51
Комментарии25

7 расширений для VS Code, установив которые, вы не захотите выходить из редактора

Время на прочтение4 мин
Количество просмотров49K
…Даже простейшие инструменты могут давать людям возможность делать великие дела.
Биз Стоун, «Решайся! Заряд на создание великого от основателя Twitter»

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



Многие программисты используют в наши дни Visual Studio Code. Этот редактор кода поддерживает установку расширений. Существует столько подобных расширений, что можно говорить о том, что возможности настройки VS Code практически безграничны.

Но на Visual Studio Marketplace, на площадке, где публикуются расширения для VS Code, опубликовано просто невероятное количество расширений. А это значит, что программистам сложно находить именно то, что им действительно пригодится. Если некое расширение показалось кому-то полезным, то оно, вполне возможно, принесёт пользу и другим людям. Поэтому я расскажу здесь о 7 расширениях для VS Code, которые способны значительно облегчить работу программиста. Всё это — бесплатные расширения. Любой может свободно их загружать и использовать.
Читать дальше →
Всего голосов 72: ↑49 и ↓23+26
Комментарии64

Типы struct, union и enum в Modern C++

Время на прочтение9 мин
Количество просмотров155K

Язык C++ сильно изменился за последние 10 лет. Изменились даже базовые типы: struct, union и enum. Сегодня мы кратко пройдёмся по всем изменениям от C++11 до C++17, заглянем в C++20 и в конце составим список правил хорошего стиля.

Читать дальше →
Всего голосов 64: ↑62 и ↓2+60
Комментарии63

Разработка анимированных фавиконов

Время на прочтение5 мин
Количество просмотров27K
Это — первое, что ищут взглядом, когда переключаются между вкладками браузера. Только что мы дали одно из возможных описаний того, что называется «фавиконом». Пространство на экране, которое занимает ярлык вкладки веб-страницы — это гораздо более ценный ресурс, чем многие думают. Если хорошо поработать с ярлыком, то он, помимо того, что будет продолжать играть роль идентификатора страницы, может стать чем-то вроде «доски объявлений», которая сообщает о том, что именно происходит на странице.


Фавикон
Читать дальше →
Всего голосов 61: ↑56 и ↓5+51
Комментарии14

Экранирование (или что нужно знать для работы с текстом в тексте)

Время на прочтение10 мин
Количество просмотров223K
SQL инъекции, подделка межсайтовых запросов, поврежденный XML… Страшные, страшные вещи, от которых мы все бы хотели защититься, да вот только знать бы почему это все происходит. Эта статья объясняет фундаментальное понятие, стоящее за всем этим: строки и обработка строк внутри строк.
Читать дальше →
Всего голосов 76: ↑51 и ↓25+26
Комментарии115

Learn OpenGL. Урок 5.4 – Всенаправленные карты теней

Время на прочтение16 мин
Количество просмотров15K
OGL3

Всенаправленные карты теней


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

Данный же урок будет посвящён созданию динамических теней, проецирующихся во всех направлениях. Этот подход отлично подходит для работы с точечными источниками освещения, ведь они должны отбрасывать тени во всех направлениях сразу. Соответственно, данная техника называется всенаправленной картой теней.
Урок во многом опирается на материалы предыдущего урока, так что если вы еще не практиковались с обычными картами теней, стоит сделать это перед продолжением изучения этой статьи.
Читать дальше →
Всего голосов 17: ↑17 и ↓0+17
Комментарии3

Learn OpenGL. Урок 4.5 — Кадровый буфер

Время на прочтение16 мин
Количество просмотров37K
OGL3

Кадровый буфер


На текущий момент мы уже успели воспользоваться несколькими типами экранных буферов: буфером цвета, в котором хранятся значения цвета фрагментов; буфером глубины, хранящим информацию о глубине фрагментов; буфером трафарета, позволяющим отбросить часть фрагментов согласно определенному условию. Комбинация этих трех буферов зовется кадровым буфером (фреймбуфером) и хранится в определенной области памяти. OpenGL достаточно гибка, чтобы позволить нам самим создавать собственные кадровые буферы, посредством задания собственных буферов цвета и, опционально, буферов глубины и трафарета.
Читать дальше →
Всего голосов 13: ↑13 и ↓0+13
Комментарии5

C++ без new и delete

Время на прочтение15 мин
Количество просмотров88K
Привет, хабравчане!

Меня зовут Михаил Матросов, я технический менеджер в компании Align Technology. Сегодня я поработаю капитаном и немного расскажу об основах современного С++.

Работая над большим проектом, мне часто приходится смотреть чужой код и порой я вижу странное. А именно, многие даже вполне матёрые программисты на С++ могут не знать некоторых фундаментальных для языка вещей. Ну, это даже не слишком удивительно — язык такой.

Мне бы хотелось поговорить об этих основах и начну я со своей любимой темы. Будем говорить об операторах new и delete. А точнее, об их отсутствии. Я расскажу, как писать надёжный и современный код на С++ без использования операторов new и delete.

Казалось бы, тема стара как мир, Саттер и Майерс в своё время всё разложили по полочкам. Именно поэтому я не буду вдаваться в ненужные подробности, отправляя читателей к первоисточникам. Моя цель собрать информацию по вопросу в одном месте, дать соответствующие ссылки и сформулировать ёмкие рекомендации.

Статья будет интересна в первую очередь начинающим разработчикам и регулярам, но я уверен, что и опытные программисты узнают для себя что-то новое.


Изображение взято с сайта behappy.me
Читать дальше →
Всего голосов 59: ↑59 и ↓0+59
Комментарии134

Learn OpenGL. Урок 5.10 – Screen Space Ambient Occlusion

Время на прочтение18 мин
Количество просмотров19K
OGL3

SSAO


Тема фонового освещения была затронута нами в уроке по основам освещения, но лишь вскользь. Напомню: фоновая составляющая освещения – суть постоянная величина, добавляемая во все расчеты освещения сцены для имитации процесса рассеяния света. В реальном же мире свет испытывает множество переотражений с разной степенью интенсивности, что приводит к столь же неравномерной засветке косвенно освещенных участков сцены. Очевидно, что засветка с постоянной интенсивностью не очень правдоподобна.

Одним из видов приближенного расчета затенения от непрямого освещения является алгоритм фонового затенения (ambient occlusion, AO), который имитирует ослабление непрямого освещения в окрестности углов, складок и прочих неровностях поверхностей. Такие элементы, в основном, значительно перекрываются соседствующей геометрией и потому оставляют меньше возможностей лучам света вырваться наружу, затемняя данные участки.

Ниже представлено сравнение рендера без и с использованием алгоритма AO. Обратите внимание на то, как падает интенсивность фонового освещения в окрестности углов стен и прочих резких изломов поверхности:


Пусть эффект и не очень заметен, но присутствие эффекта во всей сцене добавляет ей реалистичности за счет дополнительной иллюзии глубины, созданной малыми деталями эффекта самозатенения.
Читать дальше →
Всего голосов 23: ↑23 и ↓0+23
Комментарии0

Learn OpenGL. Урок 5.5 – Normal Mapping

Время на прочтение19 мин
Количество просмотров38K
OGL3

Normal Mapping


Все сцены, которые мы используем состоят из многоугольников, в свою очередь состоящих из сотен, тысяч абсолютно плоских треугольников. Нам уже удалось немного повысить реализм сцен за счет дополнительных деталей, которые обеспечивает нанесение двухмерных текстур на эти плоские треугольники. Текстурирование помогает скрыть факт того, что все объекты в сцене – всего лишь набор множества мелких треугольников. Великолепная техника, но возможности её не безграничны: при приближении к любой поверхности все одно становится ясно, что она состоит из плоских поверхностей. Большая же часть реальных объектов не является абсолютно плоской и демонстрирует множество рельефных деталей.
Читать дальше →
Всего голосов 19: ↑19 и ↓0+19
Комментарии3

Бот, играющий в Castlevania

Время на прочтение24 мин
Количество просмотров9.7K

Что это


CastlevaniaBot — это плагин для эмулятора NES Nintaco, который играет в Castlevania. Если запустить его на экране заставки, то плагин пройдёт всю игру от начала до конца. Или же можно запустить его в любом месте игры, чтобы он прошёл её часть.


В этой статье я расскажу, как создал бота, способного пройти Castlevania, и как вы можете создать нечто подобное для любой игры на NES.
Всего голосов 33: ↑32 и ↓1+31
Комментарии7

Давайте уберём кватернионы из всех 3D-движков

Время на прочтение13 мин
Количество просмотров30K
image

Для записи трёхмерных поворотов программисты графики используют кватернионы. Однако в кватернионах сложно разобраться, потому что изучают их поверхностно. Мы просто принимаем на веру странные таблицы умножения и другие загадочные определения, и используем их как «чёрные ящики», поворачивающие векторы так, как нам нужно. Почему $\mathbf{i}^2=\mathbf{j}^2=\mathbf{k}^2=-1$ и $\mathbf{i} \mathbf{j} = \mathbf{k}$? Почему мы берём вектор и превращаем его в «мнимый» вектор, чтобы преобразовать его, например $\mathbf{q} (x\mathbf{i} + y\mathbf{j} + z \mathbf{k}) \mathbf{q}^{*}$? Да кому это интересно, если всё работает, правда?

Существует способ описания поворотов под названием ротор, который относится к области и комплексных чисел (в 2D), и кватернионов (в 3D), и даже обобщается до любого количества измерений.

Мы можем создавать роторы практически полностью с нуля, вместо того, чтобы определять из ничего кватернионы и пытаться объяснить, как они работают задним числом. Это занимает больше времени, но мне кажется, что это стоит того, потому что их гораздо легче понять!

Кроме того, для визуализации и понимания трёхмерных роторов не нужно использовать четвёртое пространственное измерение.

Было бы здорово, если бы начали вытеснять использование и изучение кватернионов, заменяя их роторами. Заменить их очень просто, а код останется почти таким же. Всё, что можно делать с кватернионами, например, интерполяцию и устранение блокировки осей (Gimbal lock), можно сделать и с роторами. Но понимать мы начинаем гораздо больше.
Читать дальше →
Всего голосов 54: ↑53 и ↓1+52
Комментарии85

GUI на Golang: GTK+ 3

Время на прочтение7 мин
Количество просмотров84K

Решил я написать одно кроссплатформенное десктопное приложение на Go. Сделал CLI-версию, всё работает отлично. Да ещё и кросскомпиляция в Go поддерживается. Всё в общем отлично. Но понадобилась также и GUI-версия. И тут началось...


Golang gotk3

Читать дальше →
Всего голосов 52: ↑50 и ↓2+48
Комментарии58

Получение ссылок на аудио без VKApi

Время на прочтение3 мин
Количество просмотров43K
Данная страница будет полезной для тех, кто решил взять заказ на парсер аудио-треков VK и резко понял, что ничего не понял.

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


Знакомо?

https://m.vk.com/mp3/audio_api_unavailable.mp3?extra=AeL2rMfFyZzlD3HkyvfnvNvLx1KOqw5UDfuXCOTvttm4ts1OBJnYELvHyxvODI9fnM9YztD5A3iOyI14sxv2mNiXt3iTzdLInduXzvG9C2uVr3b5mezinfj2lJbpDhGYC25rDxbwsOPQmg1eu2Pbyxr3ntPowNLhDMrrDs8XnKu2sOuOyO8XzMf1otDmBtL6BNvllNjZx3aZuLHpq3aOBvvhzenJnZKTzKnMuwfKBI4TquffrtzKv2nymMyVDu1LzJnuwMLxwMm/BeTcserWlun3ExLVBG#AqSZntu

Если да — то вы пытались парсить мобильную версию сайта и успешно доставали ссылки. Неверные ссылки. Ссылки на 25-секундный голос, сообщающий что все идет не по плану.
Читать дальше →
Всего голосов 51: ↑49 и ↓2+47
Комментарии41

Learn OpenGL. Урок 5.9 — Отложенный рендеринг

Время на прочтение17 мин
Количество просмотров27K

В предыдущих статьях мы использовали прямое освещение (forward rendering или forward shading). Это простой подход, при котором мы рисуем объект с учётом всех источников света, потом рисуем следующий объект вместе с всем освещением на нём, и так для каждого объекта. Это достаточно просто понять и реализовать, но вместе с тем получается довольно медленно с точки зрения производительности: для каждого объекта придётся перебрать все источники света. Кроме того, прямое освещение работает неэффективно на сценах с большим количество перекрывающих друг друга объектов, так как большая часть вычислений пиксельного шейдера не пригодится и будет перезаписана значениями для более близких объектов.


Отложенное освещение или отложенный рендеринг (deferred shading или deferred rendering) обходит эту проблему и кардинально меняет то, как мы рисуем объекты. Это даёт новые возможности значительно оптимизировать сцены с большим количеством источников света, позволяя рисовать сотни и даже тысячи источников света с приемлемой скоростью. Ниже изображена сцена с 1847 точечными источниками света, нарисовання с помощью отложенного освещения (изображение предоставил Hannes Nevalainen). Что-то подобное было бы невозможно при прямом расчёте освещения:


img1

Читать дальше →
Всего голосов 28: ↑28 и ↓0+28
Комментарии12

Компрессия больших массивов простых чисел

Время на прочтение20 мин
Количество просмотров17K
песочница

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

 

Так, формат 16-разрядных беззнаковых целых при размере такой таблицы около 13 килобайт вмещает всего лишь 6542 простых числа: вслед за числом 65531 идут значения более высокой разрядности. Такая таблица годится разве что в качестве игрушки.

 

Наиболее ходовой в программировании формат 32-разрядных целых выглядит значительно солиднее — он позволяет хранить около 203 млн простых. Но такая таблица занимает уже около 775 мегабайт.

 

Еще больше перспектив у 64-разрядного формата. Однако при теоретической мощности порядка 1e+19 значений, таблица имела бы размер 64 экзабайта.


Читать дальше →
Всего голосов 55: ↑54 и ↓1+53
Комментарии58

Бот для Starcraft на Rust, C и на любом другом языке

Время на прочтение13 мин
Количество просмотров31K

StarCraft: Brood War. Как много это значит для меня. И для многих из вас. Настолько много, что я засомневался, давать ли ссылку на вики.


Как-то раз мне в личку постучался Halt и предложил выучить Rust. Как и любые нормальные люди, мы решили начать с hello world написания динамической библиотеки под Windows, которая могла бы загружаться в адресное пространство игры StarCraft и управлять юнитами.


В статье будет описан процесс поиска решений, использования технологий, приемов, которые позволят вам почерпнуть новое в языке Rust и его экосистеме или вдохновиться для реализации бота на своем любимом языке, будь то C, C++, ruby, python, e.t.c.

Ready to roll out!
Всего голосов 87: ↑86 и ↓1+85
Комментарии22

Хабрасливки: золотые посты «Хабрахабра» и Geektimes

Время на прочтение15 мин
Количество просмотров43K
Прошлый топ статей Хабра/ГТ было интересно почитать, но не всех он обрадовал: кому-то показалось удивительным, что рейтинг по количеству просмотров состоит в основном из попсовых материалов. Но идея сделать более хардкорный топ меня всё-таки захватила достаточно, чтобы попытаться отсортировать все посты Хабра и ГТ по качеству. Я по-прежнему считаю, что лучше всего с этой задачей справится нейросеть, и наверное это можно сделать уже сейчас, если потратить достаточно много времени, показывая ей разные статьи с пометкой «торт/не торт», но пока я выбрал подход чуть попроще и с использованием имеющихся данных.

У рейтинга по просмотрам есть очевидные недостатки: публичный счётчик на Хабре появился только в 2012 году, да и большая чать просмотров приходит из поиска, и это абсолютно случайные люди. Очевидно, что качество статей Хабра должны оценивать сами хабрапользователи, поэтому подборка должна быть основана на оценках постов. Для выбора «золотых постов Хабра» я использовал хорошо зарекомендовавшую себя знакомую по Dirty.ru и ещё одному ресурсу систему определения золотых постов как публикаций, не менее 98% голосов за которые положительны.

  1. «Делаем приватный монитор из старого LCD монитора», kfedorov — 1484 проголосовало, 18 отрицательно (2011)
  2. «История игрушки. Поле Чудес», PapaBubaDiop — 933 проголосовало, 10 отрицательно (2011)
  3. «Как мы искали Марс-3», Zelenyikot — 677 проголосовало, 8 отрицательно (2013)
  4. «Читаем QR код», tgx — 621 проголосовало, 9 отрицательно (2011)
  5. «Бейджи для Хабра, версия», idenisenko — 562 проголосовало, 10 отрицательно (2011)
  6. «Загадка выпадающего списка «Амазона»», atomlib — 558 проголосовало, 10 отрицательно (2013)
  7. «Как я наказал Firaxis или история о том, как перебрать бинарный движок через глушитель», Harkonnen — 551 проголосовало, 4 отрицательно (2010)
  8. «Банкомат. Некоторые особенности», UserSide — 548 проголосовало, 6 отрицательно (2014)
  9. «Взгляд изнутри: светодиодные лампочки», Tiberius — 542 проголосовало, 5 отрицательно (2011)
  10. «Самодельный трекинг посылок, или Туда и Обратно», legrus — 533 проголосовало, 1 отрицательно (2013)

Читать дальше →
Всего голосов 48: ↑39 и ↓9+30
Комментарии29

Антисобеседования

Время на прочтение11 мин
Количество просмотров142K
Я побывал на многих плохих собеседованиях, и в качестве кандидата и в качестве ведущего, и в качестве наблюдателя. В результате сформулировался крайне субъективный набор заметок о том, как стоит и как не стоит проводить собеседование разработчиков.


Собеседование — это экзамен


Ведущий — строгий учитель, а кандидат — студент. Классический сеттинг. Обычно проходит так. Спросили откуда ты, что ты, и потом пошло техническое собеседование.

Начинается с простых вопросов на раскачку, примерно таких:
Читать дальше →
Всего голосов 221: ↑206 и ↓15+191
Комментарии677

Learn OpenGL. Урок 5.6 – Parallax Mapping

Время на прочтение20 мин
Количество просмотров20K
OGL3

Parallax Mapping


Техника текстурирования Parallax Mapping по своему эффекту несколько схожа с Normal Mapping’ом, но основана на другом принципе. Схожесть в том, что, как и Normal Mapping, данная техника значительно увеличивает визуальную сложность и детализацию поверхности с нанесенной текстурой заодно создавая правдоподобную иллюзия наличия на поверхности перепадов высот. Parallax Mapping отлично работает в связке с Normal Mapping для создания весьма достоверных результатов: описываемая техника передает эффект рельефа гораздо лучше Normal Mapping, а Normal Mapping дополняет его для правдоподобной имитации динамического освещения. Parallax Mapping вряд ли можно считать техникой, прямо относящейся к методам имитации освещения, но все же я выбрал этот раздел для его рассмотрения, поскольку метод является логическим развитием идей Normal Mapping. Также отмечу, что для разбора этой статьи требуется хорошее понимание алгоритма работы Normal Mapping, в особенности понятия касательного пространства или tangent space.
Всего голосов 19: ↑19 и ↓0+19
Комментарии11
1

Информация

В рейтинге
Не участвует
Откуда
Донецк, Донецкая обл., Украина
Дата рождения
Зарегистрирован
Активность