Rgb lighting rust что такое
Улучшения Underwater Labs
С момента выпуска Underwater Labs мы внимательно следим за вашими отзывами. Большинство отзывов касалось высокой плотности добычи и отсутствия взаимодействия с игроками. Мы сократили количество лабораторий на карте с 6 до 3, убрали появление красных и синих карточек-ключей, кроме того, ящики с добычей больше не будут появляться, пока игроки находятся поблизости.
Чтобы соответствовать уменьшенному общему количеству подводных лабораторий на карте, мы увеличили минимально допустимый размер для каждой подводной лаборатории. Вы больше не найдете подводных лабораторий размером всего в пару комнат, поэтому все они стоит посетить.
Многие из вас наверняка заметили, что вода лунного бассейна была пуленепробиваемой. Это был непреднамеренный эффект из-за сложности работы с объемами резьбы по воде, и теперь он исправлен.
Говоря о лунных лужах, в микс была добавлена версия размером с человека, чтобы обеспечить больше точек входа в лаборатории.
Наконец, мы устранили ряд небольших сбоев в процедурной генерации, которые могли вызвать перекрытие коридора, айсберга и растительности.
Субмарины
StorageBoth типа подводной лодки теперь имеют хранения с 12 слотами.
Торпеды: Надводная торпеда была удалена из-за того, что игроки разбили лагерь под водой с минимальным риском или без него. Торпеды по-прежнему могут быть запущены по надводным целям путем всплытия подводной лодки и стрельбы стандартной торпедой.
Кислородные подводные лодки теперь также должны всплывать на поверхность каждые десять минут, будь то на поверхности океана или в лунном бассейне. В противном случае через десять минут вы начнете медленно получать урон.
В рамках реализации этого изменения я немного переработал кислородный интерфейс, и теперь вы также можете видеть, сколько времени у вас осталось от водолазного баллона.
Другое: Задний пассажир в сдвоенном сабвуфере теперь может полностью развернуться. Сигналы сонара появляются только для других работающих подлодок, а не для каждой подлодки, припаркованной на чьей-то базе. А подлодки перестают двигаться намного быстрее, когда кто-то спешивается, а это означает, что они не убежат от вас, если вы случайно слезете под водой.
Подводные лодки теперь получают дополнительный урон от пуль.
Магазин в рыбацкой деревне В рыбацких деревнях был добавлен индивидуальный магазин, в котором можно найти все ваши рыболовные снасти.
Основные улучшения и исправления
Остров Гравис Остров Гравис работает последний месяц на официальных серверах Facepunch, вот списки изменений карты:
Интеграция RGB
Для людей с оборудованием Razer и / или SteelSeries мы добавили некоторые эффекты клавиатуры RGB для различных состояний в игре.
Кроме того, для тех, кто любит RGB и пользовательские привязки, есть консольная команда, которая заставит ваши RGB мигать пользовательским цветом столько, сколько вы пожелаете. Следующее будет мигать фиолетовым в течение 0,2 секунды: rgbeffects.pulse 255,0,255 0,2
Обновление NVIDIA Reflex
В мае мы добавили поддержку Nvidia Reflex, которая снизила задержку системы до 38%, но теперь это число еще больше с выпуском Обновление Reflex SDK 1.5.
С сегодняшнего дня по 9 сентября 18:00 для стримеров Rust Twitch доступны дропы по UTC Twitch. Вы можете заработать особые и уникальные скины, просто наблюдая за вашими любимыми стримерами Rust Twitch.
Мы объединились с Blazed, Jewer, Eltk, CNDBLOOD, Terpsicat, Elxocas, Agustabell212, Silithur, Ricoy23 и Kira, чтобы предложить вам особые уникальные дропы, которые можно заработать, только просматривая их каналы.
В течение последних 24 часов кампании Rust Twitch все выпадения будут перемещены в категорию общих.
Как работает RGB-подсветка в компьютерных комплектующих и периферии
Содержание
Содержание
Разноцветная подсветка проникла во все виды компьютерных комплектующих: от клавиатур и мышек до блоков питания и SSD. Но что это и как она работает? Давайте разбираться.
Начнем немного издалека. Человеческий глаз имеет три вида рецепторов: по одному для красного, синего и зеленого цвета (части спектра, если точнее). Основываясь на этих знаниях (почти), была разработана RGB-модель представления/описания цвета, по заглавным буквам трех основных цветов: Red — красный, Green — зеленый, Blue — синий.
Смешивая эти цвета друг с другом в различных пропорциях, можно получить большое количество разнообразных цветов и оттенков.
Чем создается RGB-подсветка?
Но вернемся к нашей «радуге». Все видели индикаторы на различной технике — выключения/выключения на телевизоре, портов, режимов работы на модемах и роутерах и т. д. Свечение обеспечивают одноцветные светодиоды. Но в какой-то момент этого оказалось мало. Нужна была возможность одним элементом воспроизводить больше цветов, чем один фиксированный оттенок. Решение было найдено — RGB-светодиоды.
Что же такое RGB-светодиоды и какие они бывают?
Что представляет собой одноцветный светодиод (СД, LED)? Это полупроводниковый прибор, преобразующий электрический ток непосредственно в световое излучение.
Углубляться в физику процессов мы не будем, достаточно знания того, что мы подаем ток — получаем свет.
Для создания разноцветных светодиодов была взята за основу RGB-цветовая модель. Конструкция такого светодиода проста — внутри него, на подложке, находятся три независимых кристалла, каждый из которых отвечает за свой цвет. Они накрыты общей линзой.
Подавая ток на каждый светодиод, мы заставляем его испускать свет определенного цвета, а «смешивая» цвета, можно добиться различного цвета свечения. Так, например, на максимальной интенсивности всех трех мы получим белый цвет.
RGB-светодиоды выпускаются в разных типах корпусов:
Источники питания и контроллеры управления
Для того, чтобы светодиод заработал, нам нужно как минимум подать на него питание, а как максимум — как-то управлять и задавать его цвет.
К питанию светодиодов предъявляются определенные требования. Так, для нормальной работы им требуется источник постоянного стабилизированного тока, обычно напряжением 3-5 Вольт.
Подача повышенного напряжения (т.н. форсирование) приведет не только к увеличению яркости, но и к быстрой деградации, уменьшению светового потока и/или выходу из строя.
Поэтому в качестве источников питания применяются «драйверы» (стабилизируют ток) и блоки питания (стабилизируют напряжение, реже — и то, и другое). Первые применяются для питания отдельных светодиодов и светодиодных матриц, а вторые — для светодиодных лент, где уже установлена микросхема драйвера или балансный резистор.
Источники питания для светодиодов со стабилизацией по току обеспечивают постоянный выходной ток в некотором диапазоне выходного напряжения. Источники со стабилизацией по напряжению формируют постоянное выходное напряжение при токе нагрузки, не превышающем максимально допустимого значения. Некоторые источники питания имеют комбинированный режим стабилизации, при этом до достижения номинального значения тока осуществляется стабилизация по напряжению, а при дальнейшем увеличении нагрузки поддерживается стабильный выходной ток.
Итак, поскольку мы имеем фактически три элемента в одном, ими надо управлять. Есть несколько разновидностей распиновки таких светодиодов.
В первых двух случаях корпус диода имеет 4 вывода, а в последнем — шесть.
Управлять каждым из трех (красный, синий, зеленый) элементов светодиода можно несколькими путями, но наиболее часто в данный момент применяется метод широтно-импульсной модуляции (ШИМ).
Для этого используются специальные контроллеры, которые могут не только включать и отключать каждый из трех цветов, но и регулировать их яркость, получая нужный цвет путем смешения основных цветов. Также такие контроллеры могут иметь функцию управления с пульта или телефона.
Если не требуется раздельное управление большим количеством светодиодов, это достаточно хорошее решение. Но, допустим, у вас есть 10 светодиодов и вы хотите сделать эффект змейки или волны. Делать 10 независимых каналов затратно, а при последовательном соединении диодов мы сможем управлять сразу всеми чипами одного цвета.
Исправить такое положение дел призваны модели со встроенным микрочипом — драйвером управления RGB-светодиодом. Также их называют адресными (ARGB).
Такие светодиоды имеют 4 и более вывода, позволяют подключать большое количество LED и управлять отдельно каждым светодиодом. Соединяются светодиоды последовательно, питаются от стабилизатора напряжения, а управляются микроконтроллером.
Контроллер по последовательному интерфейсу передает на светодиоды информацию о заданном цвете в виде цифрового кода (последовательности бит). Первый светодиод считывает первые n-бит информации, а остальное передает дальше к следующему. Второй СД делает то же самое, и таким способом вся цепочка получает данные о заданном цвете.
Какое количество цветов могут воспроизвести RGB-светодиоды?
Доступно 16,7 млн цветов. Знакомая фраза? Если вас всегда интересовало, почему именно такое число, то все и просто, и сложно одновременно.
На практике для хранения информации о цвете каждой точки в модели RGB обычно отводится по 8 бит на один цвет или 24 бита на все три. Таким образом, каждый из трех цветов может принимать значение в диапазоне от 0 до 255 (всего 2 в 8 степени = 256 значений). Где 0 — отсутствие свечения, а 255 — максимальная яркость.
В результате можно получить 256 х 256 х 256 = 16 777 216 цветов, смешивая цвета в различных пропорциях и изменяя яркость каждой составляющей. Это можно представить в виде куба, где любая точка внутри него будет иметь определенный цвет и координаты.
С другой стороны, это лишь только теория. Восприятие цвета человеком — достаточно сложная вещь. Здесь много как индивидуальных, так и общих особенностей, сформированных в процессе эволюции. Так, например, глаз по-разному реагирует на разные длины волн (собственно цвета). Кроме того, существует такая особенность, как метамери́я, благодаря которой, в общем-то, мы можем воспринимать солнечный свет и свет от RGB-светодиодов как белый оттенок.
Также количество цветов может отличаться из-за несовершенства драйвера, где для кодирования каждого цвета может применяться не восемь, а пять бит. Следовательно, и количество доступных цветов будет меньше.
Применение RGB-подсветки в компьютерной технике
Основное применение в подсветке вообще и в компьютерной сфере в частности нашли именно SMD RGB LED. Подсветка настолько широко проникла в компьютерные девайсы, что уже прочно с ними ассоциируется и становится трудно сказать, где производители ее еще не применили.
Как видите, мир компьютерных комплектующих и периферии, дополненных RGB-подсветкой, очень велик. Посмотреть обзоры таких товаров можно на страницах Клуба ДНС.
Пишем свой упрощенный OpenGL на Rust — часть 1 (рисуем линию)
Наверное, мало кто на хабре не в курсе, что такое Rust — новый язык программирования от Mozilla. Уже сейчас он привлекает много интереса, а недавно наконец вышла первая стабильная версия Rust 1.0, что знаменует собой стабилизацию языковых возможностей. Мне всегда импонировали системные ЯП, а уж идея системного языка, предлагающего безопасность превосходящую языки высокого уровня, заинтересовала еще больше. Захотелось новый язык попробовать в деле и, заодно, интересно провести время, программируя что-нибудь увлекательное. Пока думал, что бы такого на расте написать, вспомнился недавний цикл статей про компьютерную графику, который я лишь бегло просмотрел. А очень интересно было бы попробовать все-таки написать все эти красивости самостоятельно. Вот так и родилась идея этого хобби-проекта, а также данной статьи.
Поскольку в оригинальной статье тщательно разжевываются все нюансы, касающиеся программирования непосредственно графической составляющей, то я в своем цикле статей буду сосредотачиваться главным образом на том, что касается непосредственно Rust’а. Постараюсь описать те грабли, на которые довелось наткнуться, а также как решал возникающие проблемы. Расскажу о личных впечатлениях от знакомства с языком. И, конечно, упомяну список ресурсов, которыми пользовался при разработке. Итак, кому интересно, добро пожаловать под кат.
Предупреждение: статья написана с позиции новичка и описывает тупые ошибки новичка. Если вы профи раста, возможно, посмотрев на мои потуги, вы захотите меня больно огреть чем-нибудь тяжелым. В таком случае рекомендую воздержаться от ее чтения.
Here is the Rust, which i hope to get at the end. (игра слов, Rust по-английски «ржавчина»)
Подготовка
Описывать установку компилятора, я не буду, там все достаточно очевидно. Установочный пакет с официального сайта установился на моей Ubuntu 14.04 парой команд. Следует лишь отметить, что есть репозиторий для Ubuntu, используя который также теоретически можно установить Rust. Однако у меня с этим репозиторием не задалось. Почему-то Rust устанавливался, но без Cargo. Synaptic даже не показывал Cargo в списке доступных пакетов. Rust без Cargo — это довольно бессмысленная штуковина, так что указанный PPA я не использовал.
Итак, как и всегда, знакомство с новым языком мы начинаем с Hello World. Создадим файл main.rs:
Результат запуска этого в консоли очевиден:
Код можно писать с использованием Gedit. Расцветка синтаксиса Rust для этого редактора может быть найдена по следующей ссылке. Сразу она не заработала, но в трекере был багрепорт, который объяснял причину проблемы. Простенький pull request решил проблему, поэтому сейчас у вас должна расцветка заработать без лишних плясок с бубном.
Первая же ссылка в Google привела меня на сайт проекта Rust-SDL2 — привязки к SDL2 для Rust. Чтобы задействовать эту библиотеку добавляем в конец cargo.toml следующее объявление зависимости:
Это добавляет в проект т. н. контейнер (crate) sdl2. Для компиляции библиотека использует заголовочные файлы SDL, поэтому надо не забыть их установить. В Ubuntu 14.04 это делает команда:
После этого команда cargo build успешно соберет нам проект со всеми необходимыми зависимостями.
Эксперименты с SDL
Всю функциональность, связанную со взаимодействием с SDL (или же другой графической библиотекой в перспективе), я решил вынести в отдельный класс — canvas.rs. Поначалу просто для проверки работы библиотеки я скопировал туда содержимое теста из репозитория Rust-SDL2, собираясь на основе его впоследствии написать готовый класс.
Тут у меня были первые грабли. Оказалось, что любое объявление extern crate package_name в библиотеке должно быть также продублировано в main.rs приложения. Потребовалось время, чтобы разобраться в этом, но после всех мучений, у меня наконец получился проект, который вы можете увидеть в снапшоте на github.
В итоге в файле canvas.rs был такой код:
Этот код выводит вот такое вот замечательное окошко:
Пишем код
Стоит отметить, что до этого мой процесс разработки неплохо характеризовался словами «Stack Overflow Driven Development». Я просто дергал разные куски кода из разных мест и компоновал их вместе даже не зная синтаксиса языка. Это типичный для меня способ изучения нового языка или технологии — просто начать писать код. К различным ресурсам же я обращаюсь как к справочнику, чтобы понять, как сделать конкретный нужный мне кусочек. Нужен цикл, прочитать статью про циклы в языке. Нужно IoC, нагуглить хороший ответ на Stackoverflow. Ну вы поняли. Большинство языков и технологий довольно похожи, поэтому проблем при подобном подходе не возникает. Можно начать сразу программировать, даже еще толком не зная язык. С Rust такой номер не прошел. Язык довольно своеобразен и уже на попытке понять, как сделать класс или объект, произошел затык. В книге раста не было статей с названием Classes/Objects/Constructors и т. п. Стало понятно, что сначала придется немного подучить матчасть. Поэтому, чтобы составить общее впечатление о синтаксисе языка, были пройдены уроки Guessing Game и Dining Philosophers из официальной документации Rust’а. Она на английском, стоит отметить существование перевода на русский. Правда тогда я еще этого не знал, читал на языке оригинала.
В общем после этого, работа пошла. Хотя еще пришлось повоевать с системой владения и заимствования Rust. Официальная документация отмечает, что этот этап проходит каждый новичок, но ободряет нас тем, что по мере практики код можно будет писать легко и непринужденно, привыкнув к ограничениям, накладываемым компилятором. Во вступлении говорится, что сложность обучения — цена, которую приходится платить за безопасность без накладных расходов. Конкретно проблема была в том, что в методе new(), создающем структуру, поля вновь созданной структуры необходимо проинициализировать несколькими объектами из SDL, чтобы потом использовать их в методах структуры. Если я пытался проинициализировать поле ссылкой, компилятор ругался, что не может сделать изменяемое заимствование ( error: cannot borrow data mutably in a `&` reference ). Вот в таком коде:
Компилятор жаловался, что не может заимствовать неизменяемое поле renderer как изменяемое ( error: cannot borrow immutable field `self.renderer` as mutable ). Ларчик открывался просто. Оказывается в Rust все поля в структуре рассматриваются как изменяемые или неизменяемые в зависимости от того, была ли передана сама структура в метод как изменяемая или неизменяемая. Таким образом правильный код таков:
Как видите, здесь я изменил сигнатуру метода point.
Теперь еще немного о граблях:
Были большие сложности в работе с кодом, взаимодействующим с библиотекой Rust-SDL2. У нее есть документация, но там пока мало чего сказано, а существование некоторых методов вообще умалчивается. Например о методе sdl2::init() в документации ничего. Словно его и не существует. Система автоматического вывода типов Rust упрощает и ускоряет написание кода, но она же сыграла со мной и злую шутку, когда мне понадобилось понять, какой же тип возвращает вызов sdl2::init().video().unwrap(), потому-что этот результат надо было сохранить в поле в структуре, а там тип указывается явно всегда. Пришлось читать исходники библиотеки, хотя чуть позже я нашел и менее трудоемкий выход. Просто указываешь у поля любой произвольный тип, Rust при компиляции ругается на несоответствие типов, выводя в сообщении об ошибки тип, который должен быть. Вуаля!
В других участках кода все упоминания lifetime можно убрать.
Думаю, кому-то мои мытарства могут показаться экспериментами обезьяны с гранатой. Но я вас предупреждал.
Пишем линию
Дальше пошло проще, потому-что серьезного взаимодействия с библиотекой Rust-SDL2 уже не требовалось. Ее неочевидный и недокументированный, местами даже недоделанный API был постоянным источником трудностей. Всякая арифметика и управляющие конструкции в Rust не слишком отличаются от других ЯП. Поэтому линия была написана всего за несколько часов (в отличии от нескольких дней на предыдущих этапах). И то большая часть работы была из-за того, что я решил не реализовывать готовый алгоритм, а написать свой, используя уравнение прямой y=kx+b, как основу, а все остальные формулы выведя самостоятельно. Вот такая функция у меня получилась в итоге:
Знаю, она у меня страшненькая, длинная, неэффективная. Но зато своя — родная. 🙂 Я почти сразу пришел к тому, чтобы писать целочисленную версию, не используя вещественную арифметику. В Rust нет неявных преобразований типов, а явные получаются очень многословными. Поэтому от идеи написать сначала вещественную версию я отказался. Много кода, а ее потом все равно в итоге переписывать, чтобы она не тормозила.
В ходе написания этой портянки мне понадобилось логгирование, поскольку проверенной временем IDE для Rust пока нет. Есть несколько свежих, но я не хотел залипать на их бета(альфа?)-тесте. Если кто-то пользовался и увидел, что оно стабильно и хорошо работает, отпишитесь, пожалуйста, в комментариях. Пользоваться отладчиком из консоли мне не в радость. Да и вообще логгирование штука полезная. Стараюсь приучать себя использовать логи вместо отладчика, потому-что это помогает писать логи, по которым потом реально разобраться, в чем возникла проблема у конечного пользователя (по крайней мере, если он сумеет запустить в режиме логгирования debug).
Итак, логгирование. Для логгирования в поставке Rust есть библиотека log. Но это просто абстрактное API, а конкретную его реализацию надо выбрать самому. Я использовал env_logger, который предлагается в документации к log. Пишем следующее в cargo.toml:
Пользоваться этим набором очень просто:
Надо только не забыть, что контейнер (crate) env_logger настраивается посредством переменных окружения. Я использую следующую команду перед запуском проекта:
Это задает модулю rust_project уровень логгирования debug. Все остальные модули остаются с уровнем по умолчанию, поэтому лог при запуске программы не засоряется всяким отладочным мусором от cargo или sdl. Итог работы на этом этапе можно увидеть в срезе репозитория. При запуске наша программа выводит вот такую вот красоту: