В этой статье я хочу поговорить о методах смешивания растеризуемой геометрии. Классические модели смешивания полупрозрачных объектов — Alpha, Additive, Multiplicative — объединяет один и тот же принцип отрисовки: последовательно рисуем один примитив за другим, смешивая получаемые на выходе фрагментного шейдера пиксели с тем, что находится в текущем буфере. Каждый новый примитив обновляет область буфера, в которую рисуется; в случае с альфа-смешиванием объекты, которые находятся выше, заслоняют ранее отрисованные. Но что если хочется что-то сделать с группой объектов, рисуемых поверх сцены, — например, обрезать их по маске или подсветить? Тут сразу в голову приходят два решения: или внести изменения в их материал (т.е. изменить шейдер, расширить набор текстур), к примеру, добавив проекцию еще одной текстуры, которая будет отвечать за маску прозрачности. Однако если у нас много разношерстных объектов, менять каждый уникальный материал неудобно и чревато ошибками. Второй вариант — нарисовать все интересующие нас объекты в отдельный полноэкранный таргет и рисовать уже его на финальную сцену. Тут мы можем сделать с его содержимым все, что захотим, но это требует выделения лишней памяти и, что самое неприятное, — переключения рендер таргетов. Это не самая «дешевая» операция на мобильных устройствах, которую будет необходимо выполнить дважды. А если захочется вот так работать с несколькими слоями?
Пользователь
Шпаргалка по аббревиатурам C++ и не только. Часть 1: C++
20 мин
56KТуториал
Когда-то я собеседовался на должность C++ разработчика в одну приличную и даже известную контору. Опыт у меня тогда уже кое-какой был, я даже назывался ведущим разработчиком у тогдашнего своего работодателя. Но на вопросы о том, знаком ли я такими вещами, как DRY, KISS, YAGNI, NIH, раз за разом мне приходилось отвечать «Нет».
Собеседование я с треском провалил, конечно. Но упомянутые аббревиатуры потом загуглил и запомнил. По мере чтения тематических статей и книг, подготовок к собеседованиям и просто общения с коллегами я узнавал больше новых вещей, забывал их, снова гуглил и разбирался. Пару месяцев назад кто-то из коллег небрежно упомянул в рабочем чате IIFE в контексте C++. Я, как тот дед в анекдоте, чуть с печки не свалился и опять полез в гугл.
Собеседование я с треском провалил, конечно. Но упомянутые аббревиатуры потом загуглил и запомнил. По мере чтения тематических статей и книг, подготовок к собеседованиям и просто общения с коллегами я узнавал больше новых вещей, забывал их, снова гуглил и разбирался. Пару месяцев назад кто-то из коллег небрежно упомянул в рабочем чате IIFE в контексте C++. Я, как тот дед в анекдоте, чуть с печки не свалился и опять полез в гугл.
+52
Руководство новичка по эксплуатации компоновщика
32 мин
208KDavid Drysdale, Beginner's guide to linkers (http://www.lurklurk.org/linkers/linkers.html).
Цель данной статьи — помочь C и C++ программистам понять сущность того, чем занимается компоновщик. За последние несколько лет я объяснил это большому количеству коллег и наконец решил, что настало время перенести этот материал на бумагу, чтоб он стал более доступным (и чтоб мне не пришлось объяснять его снова). [Обновление в марте 2009: добавлена дополнительная информация об особенностях компоновки в Windows, а также более подробно расписано правило одного определения (one-definition rule).
Типичным примером того, почему ко мне обращались за помощью, служит следующая ошибка компоновки:
Если Ваша реакция — 'наверняка забыл extern «C»', то Вы скорее всего знаете всё, что приведено в этой статье.
Цель данной статьи — помочь C и C++ программистам понять сущность того, чем занимается компоновщик. За последние несколько лет я объяснил это большому количеству коллег и наконец решил, что настало время перенести этот материал на бумагу, чтоб он стал более доступным (и чтоб мне не пришлось объяснять его снова). [Обновление в марте 2009: добавлена дополнительная информация об особенностях компоновки в Windows, а также более подробно расписано правило одного определения (one-definition rule).
Типичным примером того, почему ко мне обращались за помощью, служит следующая ошибка компоновки:
g++ -o test1 test1a.o test1b.o
test1a.o(.text+0x18): In function `main':
: undefined reference to `findmax(int, int)'
collect2: ld returned 1 exit status
Если Ваша реакция — 'наверняка забыл extern «C»', то Вы скорее всего знаете всё, что приведено в этой статье.
+192
Обзор фантастики на Geektimes с 2009 по 2017 годы
23 мин
44KНа geektimes есть хабы «Читальный зал» (про литературу для гиков), «Научная фантастика» (про научную фантастику), «Киберпанк» (про киберпанк). Как-то так повелось, что в эти хабы всякие деятели стали публиковать свои рассказы. Причём, это не только небольшие зарисовки, для лёгкого пятничного чтения, но и этакие «мыльные оперы»: в реальном времени можно следить, как авторы пишут главы рассказов, можно сказать, «Special for GT».
Я сейчас не хочу обсуждать целесообразность подобных публикаций на техническом ресурсе (кто-то за, кто-то против, кто-то предлагает создать отдельных хаб) или соответствие статей выбранным хабам. Так получилось, что последние пару лет я непериодически читал ресурс (вновь активно «сидеть» стал где-то только в последние полгода) и мне стало интересно — а сколько же фантастики тут вообще написано?
Предлагаю вниманию небольшой обзор по становлению литературной составляющей хаба «Читальный зал», а так же список рассказов с моими краткими аннотациями.
Я сейчас не хочу обсуждать целесообразность подобных публикаций на техническом ресурсе (кто-то за, кто-то против, кто-то предлагает создать отдельных хаб) или соответствие статей выбранным хабам. Так получилось, что последние пару лет я непериодически читал ресурс (вновь активно «сидеть» стал где-то только в последние полгода) и мне стало интересно — а сколько же фантастики тут вообще написано?
Предлагаю вниманию небольшой обзор по становлению литературной составляющей хаба «Читальный зал», а так же список рассказов с моими краткими аннотациями.
+44
Игровой аппарат изнутри и снаружи. Обзор от производителя
19 мин
92KКотики, куда ж без них
Привет, меня зовут Олег, и я управляю и владею компанией которая занимается разработкой и выпуском игровых автоматов с денежным выигрышем.
Так как данная тематика слабо освещена на Хабре/GT и хотелось бы о многом рассказать, начну я все же с общей вводной статьи. Я долго думал, с какой стороны подойти к данной тематике: стандартная автобиографическая подача «как я открыл казино..» или рассказать о том, как рассчитываются барабаны и бонусы в играх, о аппаратной платформе, которая применяется в нашей индустрии, об архитектуре программ, которые мы разрабатываем, об игромании, и т.д. Но все же пусть вначале это будет мини-обзор обо всем, а я постараюсь его сделать интересным.
+71
Обзор исходного кода Quake 2
51 мин
61KПеревод
Около месяца свободного времени я уделил чтению исходного кода Quake II. Это был удивительный и поучительный опыт, потому что в движок idTech3 внесено большое изменение: Quake 1, Quake World и QuakeGL объединены в одну красивую архитектуру кода. Особенно был интересен способ, которым достигли модульности, несмотря на то, что язык программирования C не обеспечивает полиморфизма.
Quake II во многих отношениях является блестящим образцом программного обеспечения, потому что это был самый популярный (по количеству лицензий) трёхмерный движок всех времён. На его основе было создано более 30 игр. Кроме того, он ознаменовал переход игровой индустрии от программной/8-битной системы цветов к аппаратной/24-битной. Этот переход произошёл примерно в 1997 году.
Поэтому я крайне рекомендую всем, кто любит программирование, изучить этот движок. Как обычно, я вёл бесконечное количество заметок, затем подчистил их и опубликовал как статью, чтобы сэкономить вам несколько часов.
Процесс «подчистки» меня сильно увлёк: в статье теперь более 40 мегабайт видео, скриншотов и иллюстраций. Сейчас я не знаю, стоили ли мои труды того, и нужно ли публиковать в будущем необработанные заметки в ASCII, выскажите своё мнение.
+109
Выразительный JavaScript: Введение
9 мин
468KПеревод
Перевод книги Marijn Haverbeke "Eloquent JavaScript". Лицензия Creative
Commons attribution-noncommercial license. Код предоставляется под лицензией MIT.
Содержание
- Введение
- Величины, типы и операторы
- Структура программ
- Функции
- Структуры данных: объекты и массивы
- Функции высшего порядка
- Тайная жизнь объектов
- Проект: электронная жизнь
- Поиск и обработка ошибок
- Регулярные выражения
- Модули
- Проект: язык программирования
- JavaScript и браузер
- Document Object Model
- Обработка событий
- Проект: игра-платформер
- Рисование на холсте
- HTTP
- Формы и поля форм
- Проект: Paint
- Node.js
- Проект: веб-сайт по обмену опытом
- Песочница для кода
+44
Boost Signals — сигналы и слоты для C++
4 мин
55KТуториал
О чем эта статья
Сегодня я расскажу про библиотеку Boost Signals — про сигналы, слоты, соединения, и как их использовать.
Сигнал — это тип данных, который может хранить в себе несколько функций обратного вызова, и вызывать их.
Слот — это, соответственно, и есть подсоединяемые к сигналу функции.
Как уже было сказано, к одному сигналу можно подключить несколько функции, и при вызове сигнала, подключенные функции вызываются в порядке их подключения.
Похожую систему иногда называют событийной, тогда сигналы — это события, а слоты — это подписанные на определенные события обработчики.
+51
Жизнь разработчика (в картинках)
1 мин
66KВзято отсюда специально для хабра. Возможно, в некоторых из ситуаций вы узнаете себя.
Когда я показываю босу, что окончательно пофиксил баг
Когда проджект-менеджер входит в офис
Когда я показываю босу, что окончательно пофиксил баг
Когда проджект-менеджер входит в офис
+516
Нейробиология и искусственный интеллект: часть третья – представление данных и память
6 мин
74KПродолжение.
Глава 1: Нейробиология и искусственный интеллект: часть первая — ликбез.
Глава 1.5: Нейробиология и искусственный интеллект: часть полуторная – новости от Blue Brain Project.
Глава 2: Нейробиология и искусственный интеллект: часть вторая – интеллект и представление информации в мозгу.
Рис. 1
Ну что же, прописные истины закончились. Теперь переходим к спорным вещам.
Не буду описывать, как важна память для любой системы процессинга информации. Однако с человеческой памятью все очень непросто. В принципе, мы выяснили, что есть сигналы, которые путешествуют по нейронам, есть возбуждающие и ингибирующие синапсы, которые контролируют прохождение сигналов, есть нейромодуляторы, которые изменяют восприимчивость синапсов к сигналам, но каким образом это все работает вместе, что в итоге получается осмысленная когнитивная деятельность? Далеко не факт, что если собрать такую систему с миллионами нейронов, она заработает адекватно, а не как, скажем, эпилептик.
Это дает повод спекулировать об альтернативных теориях сознания, в которых берут какой-нибудь малоизученный эффект и объявляют его панацеей. Одна из таких теорий была выдвинута Р. Пенроузом и С. Хамероффом – квантовая теория сознания, основанная на теоретических предпосылках к квантовому взаимодействию тубулиновых микротрубочек, составляющих цитоскелет нейронов. Если будут желающие, могу обсудить эту теорию в отдельной главе, а пока вернемся к более проверенным теориям.
Глава 1: Нейробиология и искусственный интеллект: часть первая — ликбез.
Глава 1.5: Нейробиология и искусственный интеллект: часть полуторная – новости от Blue Brain Project.
Глава 2: Нейробиология и искусственный интеллект: часть вторая – интеллект и представление информации в мозгу.
Рис. 1
Ну что же, прописные истины закончились. Теперь переходим к спорным вещам.
Не буду описывать, как важна память для любой системы процессинга информации. Однако с человеческой памятью все очень непросто. В принципе, мы выяснили, что есть сигналы, которые путешествуют по нейронам, есть возбуждающие и ингибирующие синапсы, которые контролируют прохождение сигналов, есть нейромодуляторы, которые изменяют восприимчивость синапсов к сигналам, но каким образом это все работает вместе, что в итоге получается осмысленная когнитивная деятельность? Далеко не факт, что если собрать такую систему с миллионами нейронов, она заработает адекватно, а не как, скажем, эпилептик.
Это дает повод спекулировать об альтернативных теориях сознания, в которых берут какой-нибудь малоизученный эффект и объявляют его панацеей. Одна из таких теорий была выдвинута Р. Пенроузом и С. Хамероффом – квантовая теория сознания, основанная на теоретических предпосылках к квантовому взаимодействию тубулиновых микротрубочек, составляющих цитоскелет нейронов. Если будут желающие, могу обсудить эту теорию в отдельной главе, а пока вернемся к более проверенным теориям.
+49
Библиотека SDL — обзор
4 мин
25KВ данной статье постараюсь дать краткий обзор весьма полезной open-source библиотеки SDL (Simple DirectMedia Library) для написания кроссплатформенных мультимедийных приложений. На хабре о ней почти не упоминалось, поэтому хочу восполнить этот «пробел».
+20
Подбор книг по C#
4 мин
281KМы решили собрать в одну подборку самые, по нашему мнению, интересные книги нашего издательства, посвященные языку программирования C#. В посте собраны хорошие книги от пособий для начинающих (например, примелькавшаяся книга серии Head First) до изданий Джеффри Рихтера и Чарли Петцольда для практикующих программистов, в общем – на любой вкус по самым лучшим ценам в интернете.
+16
Как зарабатывать деньги на Android-играх
5 мин
247KИзвиняюсь за заголовок в стиле «for Dummies», но это именно то, о чем я хочу сегодня поговорить — о монетизации. В двух словах о себе: занимаюсь инди-геймдевом с 2010 года, на данный момент у меня около десятка изданных игр на Play Store с общим количеством загрузок чуть-чуть не дотягивающим до 20 млн. Я не люблю распространяться о финансовой стороне, но понимаю что в теме о деньгах, без этого никак. На КДПВ вы можете видеть мою статистику за несколько последних дней (на момент написания статьи). В общем, бывало хуже, но бывало и лучше! Цифры не из тех, что поражают воображение, но, согласитесь, довольно неплохие. Особенно, учитывая что я всего лишь любитель, клепающий игры по вечерам.
В этом топике, я попробую поделиться выводами и наработками, которые сделал за это время. На всякий случай disclaimer: мое мнение не претендует на истину и основано лишь на моем субъективном опыте. Я всегда готов поучиться у более опытных коллег, так что если я в чем-то ошибаюсь — прошу в комменты. И второе: это взгляд на геймдев с точки зрения бизнеса, если вы не разработчик, вам может не понравиться то что я скажу.
В этом топике, я попробую поделиться выводами и наработками, которые сделал за это время. На всякий случай disclaimer: мое мнение не претендует на истину и основано лишь на моем субъективном опыте. Я всегда готов поучиться у более опытных коллег, так что если я в чем-то ошибаюсь — прошу в комменты. И второе: это взгляд на геймдев с точки зрения бизнеса, если вы не разработчик, вам может не понравиться то что я скажу.
+58
Решение задачи линейной регрессии с помощью быстрого преобразования Хафа
7 мин
17KВведение
Друзья, рассмотрим нынче же задачу линейной регрессии в присутствии выбросового (некоррелированного с сигналом) шума. Эта задача часто возникает при обработке изображений (напр., при цветовой сегментации [1]), в том числе — акустических [2]. В случаях, когда координаты случайных величин можно грубо дискретизовать, а размерность задачи низка (2-3), кроме стандартных методов робастной регрессии можно воспользоваться быстрым преобразованием Хафа (БПХ) [3]. Попробуем сравнить этот последний метод по точности и устойчивости с «классическими».
Использование БПХ для линейной регрессии
Задача линейной регрессии на плоскости состоит в восстановлении линейной зависимости между двумя переменными, заданными в виде множества пар (x, y). Задавшись некоторым уровнем дискретизации координат, можно отобразить это множество на однобитном или целочисленном изображении (в первом случае мы отмечаем только факт наличия в исходных данных точки с примерно такими координатами, во втором — еще и их число). Фактически, речь идет о двумерной гистограмме исходных данных. Таким образом, неформально задача может быть сведена к поиску на изображении прямой, которая наилучшим образом описывает изображенное распределение точек.В обработке изображений в подобных случаях используется преобразование Хафа.
Преобразование Хафа является дискретным аналогом преобразования Радона и ставит в соответствие каждой прямой на изображении сумму яркостей пикселей вдоль нее (то есть одновременно вычисляет всевозможные суммы вдоль дискретных прямых). Можно ввести разумную дискретизацию прямых по сдвигам и наклонам так, чтобы параллельные дискретные прямые плотно упаковывали плоскость, а выходящие из одной точки на одном крае изображения прямые расходились по наклону на противоположном крае на целое число пикселей. Тогда таких дискретных прямых на квадрате n2 будет примерно 4 * n2. Для этой дискретизации существует алгоритм быстрого вычисления преобразования Хафа с ассимптотикой O(n2 * log n). Этот алгоритм является близким аналогом алгоритма быстрого преобразования Фурье, хорошо параллелизуется и не требует никаких операций, кроме сложения. В работе [3] можно прочитать об этом чуть больше, кроме того, там объясняется, почему преобразование Хафа от сглаженного гауссовским фильтром изображения вообще можно применять в задаче линейной регресии. Здесь же мы продемонстрируем устойчивость этого метода.
+41
Лямбда выражения теперь и в С++
3 мин
43KМногие языки программирования позволяют создавать налету локальные не именованные функции внутри выражений. К этим языкам относятся C#3.0, Python, ECMAScript и практически все функциональные языки программирования (например, Haskell и Scheme). Такие функции обычно относят к лямбда функциям, которые имеют широкое применение.
+64
Слушаем правки в wikipedia
1 мин
12KКолокольчик — дополнение, а струны — удаления.
Длина звучания зависит от того насколько большая правка.
Всем успешной пятницы!
Слушаем!
Исходники приложения доступны здесь: github.com/hatnote/listen-to-wikipedia
Длина звучания зависит от того насколько большая правка.
Всем успешной пятницы!
Слушаем!
Исходники приложения доступны здесь: github.com/hatnote/listen-to-wikipedia
+73
Математический фокус для MP3, JPEG и Гомера Симпсона
6 мин
109KПеревод
Девять лет назад я посещал курс физики в колледже, и мой профессор рассказал одну вещь, которая поразила меня. Я думаю, не будет преувеличением сказать, что это одно из наиболее широко используемых математических открытий — от оптики до квантовой физики, радиоастрономии, сжатия MP3 и JPEG, рентгеновской кристаллографии, распознавания голоса и МРТ. Этот математический инструмент называется преобразование Фурье, в честь французского физика и математика 18-го века Жозефа Фурье. Им пользовались даже Джеймс Уотсон и Фрэнсис Крик, чтобы декодировать структуру двойной спирали ДНК из рентгенограмм, произведенных Розалиндой Франклин. (Крик был экспертом по преобразованиям Фурье, он в шутку назвал свою книгу «Преобразования Фурье для орнитологов», чтобы объяснить суть Уотсону, заядлому любителю птиц).
+131
«Boost.Asio C++ Network Programming». Глава 1: Приступая к работе с Boost.Asio
15 мин
230KТуториал
Привет Хабралюди!
Это мой первый пост, поэтому не судите строго. Я хочу начать вольный перевод книги John Torjo «Boost.Asio C++ Network Programming» вот ссылка на нее.
Содержание:
Во-первых разберем что есть Boost.Asio, как его собрать, а так же несколько примеров. Вы узнаете, что Boost.Asio больше, чем сетевая библиотека. Так же вы узнаете о самом важном классе, который находится в самом сердце Boost.Asio —
Это мой первый пост, поэтому не судите строго. Я хочу начать вольный перевод книги John Torjo «Boost.Asio C++ Network Programming» вот ссылка на нее.
Содержание:
- Глава 1: Приступая к работе с Boost.Asio
- Глава 2: Основы Boost.Asio
- Глава 3: Echo Сервер/Клиент
- Глава 4: Клиент и Сервер
- Глава 5: Синхронное против асинхронного
- Глава 6: Boost.Asio – другие особенности
- Глава 7: Boost.Asio – дополнительные темы
Во-первых разберем что есть Boost.Asio, как его собрать, а так же несколько примеров. Вы узнаете, что Boost.Asio больше, чем сетевая библиотека. Так же вы узнаете о самом важном классе, который находится в самом сердце Boost.Asio —
io_service
.+42
ВУЗ для IT специалиста: взгляд изнутри
10 мин
240KЕсли вы давно закончили институт и уже сформировавшийся, матерый специалист, то вам не стоит читать дальше. Вы не узнаете из этого поста ничего нового и полезного. Может быть он вызовет у вас улыбку. Но судя по комментариям к статьям, на сайте достаточно и тех, кто еще учится или только собирается учиться на IT специальности. Для них этот пост написан и я искренне надеюсь может быть чем-то полезен.
Так сложилось, что яработаю подрабатываю в университете преподавателем на компьютерной специальности и уже много лет работаю разработчиком (фрилансером и офсерсером). Т.е. могу видеть обе стороны одной медали, имя которой — ВУЗ.
Дальше будет много букв и ни одной картинки. Кому еще интересно — прошу под кат.
Так сложилось, что я
Дальше будет много букв и ни одной картинки. Кому еще интересно — прошу под кат.
+79
Скромное руководство по прохождению интервью: часть 1
5 мин
30KТуториал
Пост подготовлен с целью помочь программистам при подготовке к собеседованиям по программированию. Здесь рассматриваются все основные темы, которые, как минимум, желательно знать перед собеседованием. Использован собственный опыт, опыт и рассказы коллег, специализированная литература.
Некоторые рассмотренные здесь темы могут вообще не пригодиться некоторым программистам, а могут и быть обязательными, решать вам. Мой совет – старайтесь как можно больше изучать темы/разделы/аспекты указанные здесь.
И так, в качестве обязательных знаний:
Некоторые рассмотренные здесь темы могут вообще не пригодиться некоторым программистам, а могут и быть обязательными, решать вам. Мой совет – старайтесь как можно больше изучать темы/разделы/аспекты указанные здесь.
И так, в качестве обязательных знаний:
- Структуры данных
- Алгоритмы и «концепции»
- Язык программирования
+94
Информация
- В рейтинге
- Не участвует
- Зарегистрирован
- Активность