Zer0Galaxy 2 187 Опубликовано: 20 октября, 2014 (изменено) Минимальный объем информации, необходимый для кодирования цвета одного вокселя будем называть символом. Очевидно, что символ содержит два бита или число от 0 до 3. Все возможные значения одного символа (0, 1, 2, 3) будем называть алфавитом. Последовательность из нескольких символом будем называть словом. Суть предлагаемого алгоритма сжатия состоит в замене последовательности одинаковых символов XXX...X, словом XN, где X - символ, входящий в исходную последовательность, N- длина этой последовательности, выраженная символами алфавита. Длина последовательности N может принимать значения от 1 (единичный воксель) до 48х48х32=73728 (весь рисунок залит одним цветом). Поскольку длина числа N дешифратору неизвестна, основная проблема это отделить N, входящую в текущую последовательность от начала следующей последовательности. Диапазон изменения N, выраженный в двоичном виде, будет от 1 до 10010000000000000. Каждый бит числа будем кодировать одним символом. Причем, если бит не последний, кодируем его символом "0" или "1", соответственно. В случае если бит завершает слово, кодируем его символом "2", если бит равен 0, или символом "3", если бит равен 1. Поскольку N всегда начинается с бита 1 (незначащие нули не рассматриваем), этот бит при кодировании можно опустить, а при декодировании добавить. Сложность возникает только при кодировании N=1, т.к. в этом случае опускается единственный бит, входящий в N. Для того, чтобы устранить эту проблему, перед кодированием добавим к N единицу, а после декодирования - вычтем. Пример кодирования: Предположим, нам необходимо закодировать последовательность из 25-ти символов "2". 1) Первый символ, входящий в закодированное слово "2" - символ из которых состоит исходная последовательность. 2) К длине последовательности добавляем единицу 25+1=26 и представляем в двоичном виде 26(10)=11010(2) 3) Отбрасываем первую единицу - 1010 4) Кодируем каждый бит кроме последнего символами "0" или "1". Последний бит кодируем символом "2" (соответствует биту 0) В итоге получаем слово - "21012". Пять символов вместо 25-ти. Последовательность декодирования: 1) Принимаем из входного потока первый символ. Из этих символов будет состоять последовательность после декодирования. 2) Присваиваем N=1 3) Сдвигаем N влево на 1 4) Принимаем из входного потока очередной символ. 5) Если принятый символ 1 или 3, N= N+1 6) Если принятый символ 0 или 1, возвращаемся к пункту 3 7) N= N-1 8) Декодированная последовательность представляет собой последовательность из N символов, принятых в п. 1 Предложенный алгоритм сжимает последовательности длиной не менее 3. Последовательности из двух символов не сжимает. А единичные символы замещает словом из двух символов. В наилучшем случае рисунок будет сжат в 4336 раз. В наихудшем - размер увеличится вдвое. Изменено 15 июля, 2015 пользователем Zer0Galaxy 3 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Гость NC_Bob Опубликовано: 5 ноября, 2014 :fp:Правильно было бы сказать "Зачем на компьютерном сервере лаготрубы из термалки и ключ, снимающий кнопки в привате, и пчелы" Это то же, как GodusX спросил, - Рид, а зачем на сайте Вики по CC и OC. Мало того, что голограмм я вообще не видел в других модах, так это же еще выполнено ручками игроков-программистов. Голограммой можно украсить казино, банк, магазин, и прочее. Как неоновая реклама. Если синхронизировать несколько проекторов в ряд, можно бегущую строку сделать и .т.д. Пчелы всегда и к селу и к городу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Syabro 80 Опубликовано: 11 ноября, 2014 Мне лень было читать вевсю тему в поисках ответа на вопрос: А в каком формате сохранясохраняются изображения? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro 3 563 Опубликовано: 11 ноября, 2014 Поскольку я все никак не перепишу сохранение файлов с ужатием (по замечательному посту от Zer0Galaxy) , сохранение в текущей версии имеет такой формат: <9 байт - три цвета (3*3)><18432 байт - матрица голограммы (48*32*48)> Матрица хранится в слегка "упакованном" виде. Четыре вокселя в один байт. Записывается построчно, в определенном порядке. Всего выходит 19 кБ веса. Файл имеет расширение *.3d (это уже просто понты от разработчиков ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Higaran 0 Опубликовано: 11 ноября, 2014 [О старой версии - лень было листать страницы, накинулся на то что было] Поюзал в одиночке, достаточно удобно, особенно если голограма рядом и бегать не надо чтоб посмотреть. В новой версии наверно много удобней, завтра потестю. Вопрос мой в том, можно ли "понты от разработчиков формата .3d" открыть БЕЗ эдитора? тобишь не нарисовать - сохранить - загрузить - "в проэктор", А нарисовать - сохранить - использовать в других программах/разворачивать на компах БЕЗ эдитора/компах с в-картой ниже 3лвл. (Тема такая: нарисовал 5 моделек монеты, хочу чтоб эти монеты на проекторе последовательно сменяли друг друга, потом их сделаю больше, будет своего рода "эффект кручения монетки". Задача не так в том чтоб это отобразить, это не сложно. Задача использовать ваши модельки в СВОЕЙ проге! возможно? как?) З. Ы. НЕО, если так быстро развивать прогу то можно сразу в неё и moitioneditor впилить. Снять мульт, и наслаждатся своим величием. Потом устроить броадкаст музыки и через notenoughcodecs её проиграть как озвучку мульта. Холотеатр, ёмаё. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro 3 563 Опубликовано: 12 ноября, 2014 Спасибо за отзыв. Да, в последней версии удобнее рисовать. Добавлены фронтальная и боковая проекции, "призрачный" слой и еще по мелочи. Последняя версия Hologram Editor 0.60: http://pastebin.com/MYDU6tiV Для того чтобы развернуть голограмму на любом компе, используй Hologram Viewer: http://pastebin.com/ezPPXSFE Это консольная утилита. Работает на любом компьютере, с любым проектором. Синтаксис команды: show filename[.3d] [scale](Расширение 3d писать не обязательно, масштаб - тоже. По дефолту будет 1.0) Оттуда ты можешь взять функции для загрузки (loadHologram) и вывода на проектор (drawHologram). Не забудь скопировать переменные и константы, которые юзают эти функции и вспомогательные функции get, set и rgb2hex. P.S. В OpenComputers 1.4 советую ставить в комп с редактором алмазный процессор (Tier 3). Работает гораздо быстрее чем железный. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Higaran 0 Опубликовано: 12 ноября, 2014 Вот, спасибо,. Затырю функции, опробую анимацию... Ежели чего выйдет - гифку/видео предоставлю. Просто перед этим этих монет придется чуть ли не 100500 штук нарисовать, чтоб двигалось плавно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Higaran 0 Опубликовано: 12 ноября, 2014 И ещё, я ставлю белый(255,255,255) и в нем вырезаю пустоты серым(192,162,192) в редакторе они отображаются, а на голограмме цвет одинаково белый. Тоже самое с (192,192,255). Это связано с редактором или с голограммой? если с редактором то как исправить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro 3 563 Опубликовано: 12 ноября, 2014 Попробовал цвета. (192,162,192) - это получается бледно лиловый. (192,192,255) - бледно сиреневый. Оба цвета рисуются и в редакторе и на проекторе. На проекторе второй цвет слабоотличим от белого на верхних плоскостях голограммы, которые как бы освещены сверху. На боковых хорошо виден. Первый цвет без проблем отображается. Проверь свой проектор - если он первого уровня (зеленый), то не умеет отображать больше одного цвета. Тогда программа нарисует всю голограмму первой кисточкой (заменит на нее все другие). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Higaran 0 Опубликовано: 12 ноября, 2014 Проектор второго уровня. Я разобрался - голограмма должна быть в несколько слоёв чтоб было видно разницу между серым и белым. Также, (потом выложу скрин) приходится много баловатся с голограммой при игре с шейдерами ибо при seus ultra, белый становится ярко золотым источником света, откоторого может ослепнуть и Стив и ты сам. Скрины завтра. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Higaran 0 Опубликовано: 12 ноября, 2014 Ещё, часто, если допускал ошибки и стирал их ластиком то появляются эти пиксели в виде красных или белых блоков сразу после сохранения(до сохр. Всё норм, всё красиво, нажимаю Сохранить, редактор перезагружает воркспэйс с лишними точками.)Скрины приложу завтра. З.Ы. Ошибся с цветом. 192.192.192. Серый. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro 3 563 Опубликовано: 12 ноября, 2014 Проектор второго уровня. Я разобрался - голограмма должна быть в несколько слоёв чтоб было видно разницу между серым и белым. Также, (потом выложу скрин) приходится много баловатся с голограммой при игре с шейдерами ибо при seus ultra, белый становится ярко золотым источником света, откоторого может ослепнуть и Стив и ты сам. Скрины завтра. То как голограммы видны при игре с шейдерами, это уже наверное к автору мода.Это зависит от того, как именно отрисовывает свои голограммы Sangar, и как обрабатывает эти поверхности код шейдера. Ошибок при стирании не должно быть. Жду скрин. В качестве ластика надо использовать именно первую кнопку-"кисть". Я имею ввиду, если заменить другую кисть на черный - это будет черная кисть, но не ластик. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Higaran 0 Опубликовано: 13 ноября, 2014 И снова разобрался сам. Много баловался с цветами кистей. Похоже если ластик заменить на белый а потом на чёрный опять то он начинает бесится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro 3 563 Опубликовано: 13 ноября, 2014 И снова разобрался сам. Много баловался с цветами кистей. Похоже если ластик заменить на белый а потом на чёрный опять то он начинает бесится.Да, ластик не предполагалось на что-то заменять. Он по идее всегда располагается на первой кнопке, и просто делает пустоты в голограмме. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro 3 563 Опубликовано: 30 декабря, 2014 Короче, с наступающим Новым Годом, друзья P.S. Ёлка. 7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Xytabich 257 Опубликовано: 6 января, 2015 Может для создания самой модели использовать Techne? а раскрашивать в программе можно Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro 3 563 Опубликовано: 7 января, 2015 Может для создания самой модели использовать Techne? а раскрашивать в программе можно Лучше в воксельном редакторе. Например Slab6 (в котором я моделю некоторые штуки) или VoxelShop. Загвоздка в одной вещи - нужно расковырять бинарный формат этих моделей (сохраненных в файл) и написать конвертер, который перегонит модель в голограмму. В какой-то своей теме (лень искать :P ) я описывал замысловатый способ сделать это используя мой конвертер из schematic-файлов. Вкратце: 1) Создаем (или конвертируем из полигональной) воксельную модель. 2) Конвертируем в schematic (в цветную шерсть) 3) Распаковываем 4) Перегоняем с помощью моего конвертера в простой формат для голограммы Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Hikooshi 36 Опубликовано: 15 февраля, 2015 Подскажите, пожалуйста, синтаксис программы, чтобы можно было устанавливать значение каждого вокселя отдельно в текстовом виде. То есть не через интерпретатор каждый раз писать component.hologram.set(x, y, z, value), а чтобы просто было поле ввода текста, в котором как раз эти x, y, z, value и нужно было бы писать. Через pcall(io.read) не получалось, программа ругалась, что первый аргумент булевый, даже если остальные, кроме этого первого задать изначально. P.S. я не так давно начал изучать Lua Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
NEO Автор темы 541 Опубликовано: 15 февраля, 2015 os.parse Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Fingercomp 4 398 Опубликовано: 16 февраля, 2015 Подскажите, пожалуйста, синтаксис программы, чтобы можно было устанавливать значение каждого вокселя отдельно в текстовом виде. То есть не через интерпретатор каждый раз писать component.hologram.set(x, y, z, value), а чтобы просто было поле ввода текста, в котором как раз эти x, y, z, value и нужно было бы писать. Через pcall(io.read) не получалось, программа ругалась, что первый аргумент булевый, даже если остальные, кроме этого первого задать изначально. P.S. я не так давно начал изучать Lua Первый ясно-понятно, что будет булевый. Смотри аргумент 2, там сам вывод io.read. Потом парси, например, через шаблоны, описанные Zer0Galaxy. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах