Как стать автором
Обновить
231
29.1
Всеволод @torkve

Пользователь

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

Краткий курс компьютерной графики, аддендум: ambient occlusion

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

Official translation (with a bit of polishing) is available here.




В кратком курсе компьютерной графики, что я предоставил вашему рассмотрению пару недель назад, мы пользовались методами локального освещения. Что это значит? Это значит, что интенсивность освещения каждой точки мы выбирали независимо от её соседей.

Модель освещения Фонга — классический пример локального выбора:



Финальная интенсивность складывается из трёх слагаемых: окружающее освещение, постоянное значение для всех точек сцены. Диффузное освещение и блики зависят от вектора нормали к данной точке и направления света, но не зависят от геометрии остальной части сцены. Давайте подумаем, а почему, собственно, окружающее освещение было выбрано постоянным для всей сцены?
Читать дальше →
Всего голосов 29: ↑29 и ↓0+29
Комментарии7

Краткий курс компьютерной графики: пишем упрощённый OpenGL своими руками, статья 6 из 6

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

Содержание основного курса




Улучшение кода






Official translation (with a bit of polishing) is available here.




Shadow mapping


Ну вот наш краткий курс подходит к концу, задача на сегодня — научиться отрисовывать тени (внимание, просчёт полутеней — это отдельная тема):



Как всегда, код доступен на гитхабе
Читать дальше →
Всего голосов 68: ↑65 и ↓3+62
Комментарии20

Краткий курс компьютерной графики: пишем упрощённый OpenGL своими руками, статья 5 из 6

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

Содержание основного курса




Улучшение кода






Official translation (with a bit of polishing) is available here.




Пришла пора веселья, давайте для начала смотреть размер текущего кода:
  • geometry.cpp+.h — 218 строк
  • model.cpp+.h — 139 строк
  • our_gl.cpp+.h — 102 строки
  • main.cpp — 66 строк


Итого 525 строк. Ровно то, что я обещал в самом начале курса. И заметьте, что отрисовкой мы занимаемся только в our_gl и main, а это всего 168 строк, и нигде мы не вызывали сторонних библиотек, вся отрисовка сделана нами с нуля!
Я напоминаю, что мой код нужен только для финального сравнения с вашим работающим кодом! По-хорошему, вы всё должны написать с нуля, если следуете этому циклу статей. Очень прошу, делайте самые безумные шейдеры и выкладывайте в комментарии картинки!!!


Читать дальше →
Всего голосов 103: ↑98 и ↓5+93
Комментарии41

Краткий курс компьютерной графики: пишем упрощённый OpenGL своими руками, статья 3.1 из 6

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

Содержание основного курса


Улучшение кода



Общение вне хабра

Если у вас есть вопросы, и вы не хотите задавать их в комментариях, или просто не имеете возможности писать в комментарии, присоединяйтесь к jabber-конференции 3d@conference.sudouser.ru

Данная статья написана в тесном сотрудничестве (спасибо создателям XMPP) с haqreu, автором данного курса.Мы начали масштабный рефакторинг кода, направленный на достижение максимальной компактности и читаемости. Мы сознательно пошли на отказ от ряда возможных и даже очевидных оптимизаций для получения максимально доступного для понимания кода учебных примеров.
P. S haqreu буквально на днях выложит статью о шейдерах!
Познавательного чтения!
Всего голосов 51: ↑43 и ↓8+35
Комментарии41

Краткий курс компьютерной графики: пишем упрощённый OpenGL своими руками, статья 4б из 6

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

Содержание курса




Улучшение кода






Official translation (with a bit of polishing) is available here.




Сегодня мы заканчиваем с ликбезом по геометрии, в следующий раз будет веселье с шейдерами!
Чтобы не было совсем скучно, вот вам тонировка Гуро:



Я убрал текстуры, чтобы было виднее. Тонировка Гуро очень проста: добрый дяденька-моделёр дал нам нормальные вектора к каждой вершине объекта, они хранятся в строчках vn x y z файла .obj. Мы считаем интенсивность освещения для каждой вершины треугольника и просто интерполируем интенсивность внутри. Ровно как мы делали для глубины z или для текстурных координат uv!

Кстати, если бы дяденька-моделёр был не таким добрым, то мы могли бы посчитать нормали к вершине как среднее нормалей граней, прилегающих к этой вершине.

Текущий код, который сгенерировал эту картинку, находится здесь.
Читать дальше →
Всего голосов 80: ↑77 и ↓3+74
Комментарии57

Краткий курс компьютерной графики: пишем упрощённый OpenGL своими руками, статья 3 из 6

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

Содержание курса



Улучшение кода






Official translation (with a bit of polishing) is available here.




А что потом? Я разобрал весь материал!



В статьях 7 и 8 мы поговорим о программировании непосредственно под OpenGL. Есть ненулевая вероятность получить краткий курс OpenCL/CUDA в статьях 9+.

Удаление невидимых поверхностей


Знакомьтесь, это мой друг z-buffer головы абстрактного африканца. Он нам поможет убрать визуальные артефакты отбрасывания задних граней, которые у нас оставались в прошлой статье.



Кстати, не могу не упомянуть, что эта модель, которую я использую в хвост и в гриву, была любезно предоставлена замечательным Vidar Rapp.

Мы её можем использовать исключительно в рамках обучения рендерингу. Это очень качественная модель, с которой я варварски обошёлся, но я обещаю вернуть ей глаза!
Читать дальше →
Всего голосов 90: ↑89 и ↓1+88
Комментарии63

Краткий курс компьютерной графики: пишем упрощённый OpenGL своими руками, статья 4a из 6

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

Содержание курса



Улучшение кода






Official translation (with a bit of polishing) is available here.




Построение перспективного искажения


Четвёртая статья будет разбита на две, первая часть говорит про построение перспективного искажения, вторая про то, как двигать камеру и что из этого следует. Задача на сегодня — научиться генерировать вот такие картинки:



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

Краткий курс компьютерной графики: пишем упрощённый OpenGL своими руками, статья 2 из 6

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

Содержание курса



Улучшение кода






Official translation (with a bit of polishing) is available here.




Update:


Внимание, статья 4в даёт новую, более простую версию растеризатора.

Давайте знакомиться, это я.



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

В прошлый раз мы нарисовали проволочную сетку трёхмерной модели, в этот раз мы зальём полигоны. Точнее, треугольники, так как OpenGL практически любой полигон триангулирует, поэтому ни к чему разбирать сложный случай. Напоминаю, что этот цикл статей создан для самостоятельного программирования. Время, которое я здесь привожу — это не время чтения моего кода. Это время написания вашего кода с нуля. Мой код здесь только для того, чтобы сравнить ваш (рабочий) код с моим. Я совсем не являюсь хорошим программистом, поэтому ваш код может быть существенно лучше моего. Любая критика приветствуется, любым вопросам рад.

Пожалуйста, если вы следуете этому туториалу и пишете свой код, выкладывайте его на github.com/code.google.com и им подобные и давайте ссылки в комментариях! Это может хорошо помочь как и вам (другие люди могут чего посоветовать), так и будущим читателям.
Читать дальше →
Всего голосов 119: ↑116 и ↓3+113
Комментарии122

Краткий курс компьютерной графики: пишем упрощённый OpenGL своими руками, статья 1 из 6

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

Содержание курса



Улучшение кода






Official translation (with a bit of polishing) is available here.




Постановка задачи


Цель этого цикла статей — показать, как работает OpenGL, написав его (сильно упрощённый!) клон самостоятельно. На удивление часто сталкиваюсь с людьми, которые не могут преодолеть первоначальный барьер обучения OpenGL/DirectX. Таким образом, я подготовил краткий цикл из шести лекций, после которого мои студенты выдают неплохие рендеры.

Итак, задача ставится следующим образом: не используя никаких сторонних библиотек (особенно графических) получить примерно такие картинки:



Внимание, это обучающий материал, который в целом повторит структуру библиотеки OpenGL. Это будет софтверный рендер, я не ставлю целью показать, как писать приложения под OpenGL. Я ставлю целью показать, как сам OpenGL устроен. По моему глубокому убеждению, без понимания этого написание эффективных приложений с использованием 3D библиотек невозможно.
Читать дальше →
Всего голосов 198: ↑196 и ↓2+194
Комментарии120

Мой удобный дом

Время на прочтение14 мин
Количество просмотров309K
Относительно недавно здесь был текст про домашнюю автоматику, а в комментариях один товарищ высказал идею, о которой я тоже думаю очень-очень давно. Суть в том, что автоматика должна работать так, чтобы этого, по возможности, вообще не было заметно.

То есть, умный дом — это дом, который может все. А удобный дом — это дом, который все, что может, делает сам.

Давайте сначала я просто похвастаюсь тем, что умеет мой дом сейчас, а вы решите, имеет ли смысл читать про мой местами горький (а местами очень даже ничего) опыт дальше, ок?
Читать дальше →
Всего голосов 161: ↑160 и ↓1+159
Комментарии97

Умный дом (Самое начало) — ч.2

Время на прочтение8 мин
Количество просмотров77K
image
Это продолжение статьи: Умный дом (Самое начало) — ч.1

В прошлой статье я писал о том что такое умный дом и с чего начать при его создании. Теперь я постараюсь описать техническую часть: железо и ПО. На всякий случай напомню дорогому читателю, что это не HOW to, а обзорный материал, потому конкретных решений и code-вставок для копипаста тут скорей всего не будет. Технологий и методов решения поставленной инженерной задачи очень много и описать все в моих статьях не получится.

Вся информация написана с упором на личный опыт, никаких «диванных» домыслов.
Читать дальше →
Всего голосов 18: ↑6 и ↓12-6
Комментарии21

Настройка своего сервера синхронизации Firefox Sync

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

Firefox Sync, это служба, которая позволяет пользователям переносить полностью свою историю, пароли, закладки, открытые вкладки и даже дополнения между различными устройствами, на которых установлен браузер Firefox, как для десктопной версии, так и для Android.

Firefox Sync реализуется двумя сущностями — сервисом авторизации (Firefox account API) и сервером синхронизации (Firefox Sync).

Давно возникла идея настроить свой сервер для синхронизации паролей, закладок и прочих радостей жизни. По роду деятельности, не очень доверяю публичным сервисам, таким, как LastPass или Google Account. На мой взгляд, приватные данные должны храниться на своем сервере.

Ну да хватит лирики, приступим к настройке.
Читать дальше →
Всего голосов 34: ↑32 и ↓2+30
Комментарии40

Операция «посредник» или доставка товаров из США — проще, надежнее, дешевле

Время на прочтение5 мин
Количество просмотров96K
Все мы знаем, что большинство гаджетов дешевле купить в США, чем у нас на родине, и особенно это относится к различным новинкам, цены на которые у нас просто взлетают к небесам! Так же всем известно, что самые «вкусные» предложения на eBay и в интернет магазинах США обычно имеют доставку US only и соответственно не доступны для нас. В этой статье я попытаюсь рассказать про еще один способ исправить это недоразумение. Конечно все более-менее опытные интернет-покупатели знают о посредниках, которые предоставляют услугу mail forwarding — тоесть пересылку посылок. Происходит это так — вы заказываете доставку товара на адрес в США, который вам выдал посредник, он получает посылку и пересылает ее вам, беря за это небольшую комиссию. Известные посредники это Shipito, Ebaytoday, Бандеролька и т.д. их достаточно много и все они предлагают набор услуг — пересылка, объединение нескольких посылок в одну, наоборот — разделение крупной посылки на несколько мелких и тд. Берут обычно фиксированную плату за каждую посылку + оплату за дополнительные услуги. Стоимость самой пересылки обычно рассчитывается по тарифам USPS и этой же службой отправляют посылку вам. Я же хочу рассказать про еще одну компанию — Meest.us, которая осуществляет пересылку посылок (среди различных других услуг) но в принципе ее работы есть некоторые интересные особенности.
Читать дальше →
Всего голосов 52: ↑44 и ↓8+36
Комментарии59

Презентация средствами HTML5

Время на прочтение3 мин
Количество просмотров14K
image
Обратил внимание, что в настоящее время программисты Google начали использовать новую форму представления своих презентаций.

Типичный пример, еще пример — мы видим фреймы, эффекты, изображения, общий стиль.

Несложный поиск привел к удобному шаблону, который при своей простоте позволяет создавать неплохие презентации с легко внедряемыми элементами
Читать дальше →
Всего голосов 114: ↑110 и ↓4+106
Комментарии40

Джентльменский набор интернет шоппера: Shipito + ProfitBid + TrackChecker

Время на прочтение9 мин
Количество просмотров43K
На волне постов ненависти к Почте России легко прослеживается тот факт, что все большее количество людей покупают товар из заграниц. Тем самым не желая переплачивать Российским барыгам-ритейлерам подрывая политику государства в области импортозамещения. И я один из них.
Однако много препятствий чинит православным Россиянам виртуальный шоппинг, самое трудное из которых — страна проживания. К сожалению наша отчизна классифицируется большинством онлайн магазинов как страна третьего мира, не иначе, а поэтому и прямой доставки туда нам не видать.
Выходом из этого казуса, очевидно, является mail forwarding сервис.
Итак в данной статье речь пойдет о
  • нововведениях в сервисе-посреднике — Shipito
  • Сервисе, который возвращает процент с покупок на ebay.com/ca/uk, Amazon, Skype, GoDaddy — Profitbid
  • Наконец-то созданном юзером MetalFan отличном софте (полностью бесплатном) для отслеживания почтовых отправлений всех почтовый сервисов TrackChecker
  • Небольшом списке интересных магазинов


PS. В топике присутствуют мои реферральные ссылки.
PS2. Трафик.
Читать дальше
Всего голосов 114: ↑93 и ↓21+72
Комментарии68

Я хочу работать в Google! Телефонное интервью (часть 1)

Время на прочтение4 мин
Количество просмотров31K
Привет Хабр! Давно не писал. Да это и понятно. Защита диссертации, получение PhD, а сейчас ещё и активный поиск работы — всё это занимает очень много драгоценного времени. Но разговор сегодня пойдёт не о том. Хотелось бы поделиться с Вами, уважаемые хабралюди, ресурсами и описанием процесса подготовки к телефонному техническому интервью с Гуглом, первый технический этап которого я уже прошёл, и теперь готовлюсь ко второму, который будет в пятницу.
Читать дальше →
Всего голосов 207: ↑182 и ↓25+157
Комментарии99

Разбираем протокол новых датчиков Noolite

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

Привет!

На прошлой неделе компания Ноотехника выпустила два первых датчика — движения и температуры и влажности для своей линейки дистанционного управления светом Noolite.
К сожалению, работа с датчиком температуры и влажности с помощью родного USB-приёмника от Ноотехники не поддерживается, только через их Ethernet-шлюз.

В нашем контроллере для домашней автоматизации Wiren Board Smart Home есть встроенный универсальный приёмопередатчик на частоту 433MHz, с помощью которого можно работать с многими устройствами. Это значит, что WB Smart Home может работать с устройствами Noolite напрямую, без использования USB-приёмников и передатчиков Ноотехники.

Впрочем, чтобы работать со сторонними устройствами, для начала обычно требуется реверс-инжиниринг (т.е. взлом) протокола радио-обмена.
Протокол Noolite, используемый в блоках управления освещением, мы вскрыли и разобрали в одной из предыдущих статей.

В этой статье мы расскажем про реверс-инжиниринг протокола датчика PT111, обновлённую информацию об устройстве протокола Noolite вообще, а также покажем, как работа с датчиками выглядит в WB Smart Home.

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

Динамические деревья

Время на прочтение8 мин
Количество просмотров36K
Перед прочтением статьи рекомендую посмотреть посты про splay-деревья (1) и деревья по неявному ключу (2, 3, 4)

Динамические деревья (link/cut trees) мало освещены в русскоязычном интернете. Я нашел только краткое описание на алголисте. Тем не менее эта структура данных очень интересна. Она находится на стыке двух областей: потоки и динамические графы.

В первом случае динамические деревья позволяют построить эффективные алгоритмы для задачи о поиске максимального потока. Улучшенные алгоритмы Диница и проталкивания предпотока работают за и соответственно. Если вы не знаете, что такое поток, и на лекциях у вас такого не было, спешите пополнить свои знания в Кормене.

Второй случай требует небольшого введения. Динамические графы — это активно развивающаяся современная область алгоритмов. Представьте, что у вас есть граф. В нем периодически происходят изменения: появляются и исчезают ребра, меняются их веса. Изменения нужно быстро обрабатывать, а еще уметь эффективно считать разные метрики, проверять связность, искать диаметр. Динамические деревья являются инструментом, который позволяет ловко манипулировать с частным случаем графов, деревьями.

Перед тем, как нырнуть под кат, попробуйте решить следующую задачу. Дан взвешенный граф в виде последовательности ребер. По последовательности можно пройти только один раз. Требуется посчитать минимальное покрывающее дерево, используя памяти и времени. По прочтении статьи вы поймете, как легко и просто можно решить эту задачу, используя динамические деревья.
Читать дальше →
Всего голосов 54: ↑52 и ↓2+50
Комментарии5

Практическое применение DNSSEC

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


В статье описываются недостатки существующей структуры DNS, полный процесс внедрения DNSSEC на примере доменов .com и .org, процедура создания валидного самоподписанного SSL-сертификата подписанного с помощью DNSSEC.

Читать дальше →
Всего голосов 76: ↑75 и ↓1+74
Комментарии31

Строим свой Gmail с куртизанками и преферансом

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

Вместо предисловия


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

Итак, в этой статье я расскажу о том, как я поднимал и настраивал на своем сервере почту, календарь, контакты, RSS-аггрегатор и, в качестве бонуса, хранилище файлов.

Читать дальше →
Всего голосов 155: ↑135 и ↓20+115
Комментарии139

Информация

В рейтинге
270-й
Откуда
Москва, Москва и Московская обл., Россия
Зарегистрирован
Активность