Перейти к содержимому

Поиск по сайту

Результаты поиска по тегам 'графика'.

  • Поиск по тегам

    Введите теги через запятую.
  • Поиск по автору

Тип публикаций


Блоги

  • Робот Байт
  • Fingercomp's Playground
  • 1Ridav' - блог
  • Totoro Cookies
  • Блог cyber01
  • IncluderWorld
  • KelLiN' - блог
  • Крутой блог
  • eutomatic blog
  • Programist135 Soft
  • Сайт в сети OpenNet
  • PieLand
  • Очумелые ручки
  • Блог недоблоггера
  • В мире Майнкрафт
  • LaineBlog
  • Квантовый блог
  • Блог qwertyMAN'а
  • some blog name
  • Дача Игоря
  • Тут был Артур.

Форумы

  • Программирование
    • Программы
    • База знаний
    • Разработчикам
    • Вопросы
  • Игровой раздел
    • Игровые серверы
    • Предложения по улучшению игрового процесса
    • Моды и плагины
    • Жалобы на игроков
    • Ивенты
  • Общение
    • Вопрос-ответ
    • Беседка программистов
    • Беседка-флудилка
    • Шкатулка
  • Технический раздел
    • Багтрекер
    • Архив

Искать результаты в...

Искать результаты, которые...


Дата создания

  • Начать

    Конец


Последнее обновление

  • Начать

    Конец


Фильтр по количеству...

Зарегистрирован

  • Начать

    Конец


Группа


AIM


MSN


Сайт


ICQ


Yahoo


Jabber


Skype


ВКонтакте


Gtalk


Facebook


Twitter


Город


Интересы

Найдено 7 результатов

  1. Хочу поделиться с вами конвертером изображений, позволяющим использовать ограниченное пространство мониторов наиболее эффективным образом, а также библиотеками для быстрой отрисовки результата. Поддержка шрифта Брайля позволяет получать изображения размером до 320х200 визуальных точек при физическом ограничении мониторов в 160х50 символов, а алгоритм дизеринга помогает избавиться от визуальных ограничений 256-цветной палитры. Ссылка для загрузки конвертера: https://github.com/IgorTimofeev/OCIFImageConverter/raw/master/out/artifacts/ImageConverter_jar/ImageConverter.jar Команда для установки ПО для отрисовки: pastebin run ng73uZqT Практический пример: Чтобы отобразить картинку на экране, для начала ее необходимо сконвертировать и скопировать любым удобным образом на диск комьютера (напрямую в папку мира, через файловый хостинг и т.п.). В моем случае картинка называется Triss.pic: Затем напишем следующий код или запустим установившуюся программу draw.lua с аргументом "Triss.pic": local args = {...} local image = require("image") local buffer = require("doubleBuffering") -- Очищаем экранный буфер черным цветом buffer.clear(0x0) -- Загружаем и рисуем изображение в буфер buffer.image(1, 1, image.load(args[1])) -- Отрисовываем содержимое буфера в принудительном режиме buffer.draw(true)Результат не заставит себя ждать: Также привожу в качестве демонстрации несколько отрисованных изображений:
  2. По этой теме уже существует отлаженный софт, успешно используемый многими игроками. Однако на днях я заметил забавную особенность местных видеокарт, позволяющую выставлять разрешение большее, нежели получаемое через gpu.maxResolution(). К примеру, если maxResolution для видеокарты третьего уровня вернет числа 160 и 50, то никто не мешает установить разрешение, скажем, в 20x158 пикселей. При этом при проверке валидности устанавливаемого разрешения соблюдается два правила: Результирующее разрешение по числу пикселей не должно превышать результат умножения чисел, возвращаемых maxResolution. То есть для T3 GPU не более 160 * 50 = 8000. Каждый параметр разрешения, будь то ширина или высота, не должен численно превышать значение возвращаемой ширины. То есть для T3 GPU не более 160. Не знаю, баг это или фича, однако подобное грех не использовать в своих целях. К примеру, старая версия программы при вертикально-удлиненном расположении мониторов позволяла выставить разрешение лишь в 30х50 (1500 пикселей в итоге), заполняя тем самым "черные полосы". В то же время обновленная софтина, учитывающая описанные выше особенности, выдает 69x114 (7866 пикселей), максимально приближаясь к предельной отметке в 8000: Согласитесь, лишние пиксели на дороге не валяются, и, думаю, кому-то будет интересно узнать про реализацию подобного софта. Прежде всего нам требуется определить точную пропорцию мультиблочного монитора: то, как относится его ширина к высоте. Взглянем на текстуру блока: она явно состоит из мелких "квадратиков" в количестве 16 штук, причем лицевая часть монитора имеет рамку толщиной в 2 "квадратика" с каждой стороны: Эти "квадратики" мы и будем использовать для расчета пропорции, так как они позволяют идеально точно получить размеры отображающей части монитора в игровом мире. А размеры "в квадратиках" можно посчитать по формуле: число_блоков_монитора * 16 - 4 Следовательно, пропорция монитора будет считается следующим образом: local gpu = component.gpu local screen = component.proxy(gpu.getScreen()) local blockCountByWidth, blockCountByHeight = component.screen.getAspectRatio() local proportion = (blockCountByWidth * 16 - 4) / (blockCountByHeight * 16 - 4) Также не забываем, что высота каждого псевдографического пикселя при отображении в 2 раза больше его ширины, поэтому формула пропорции слегка меняется. Заодно произведем некоторые сокращения, чтобы избавиться от лишних математических операций. Все три варианта эквивалентны: local proportion = 2 * (blockCountByWidth * 16 - 4) / (blockCountByHeight * 16 - 4) local proportion = (blockCountByWidth * 16 - 4) / (blockCountByHeight * 8 - 2) local proportion = (blockCountByWidth * 2 - 0.5) / (blockCountByHeight - 0.25) После вычисления пропорции монитора можно приступить к написанию программной логики. Для начала получим максимальное разрешение видеокарты: local maxWidth, maxHeight = gpu.maxResolution() Обладая этими данными, а также взглянув на условия, описанные в начале поста, мы можем составить систему неравенств для получения итогового идеального разрешения: Помним также, что ширину мы вполне можем выразить через высоту и пропорцию монитора: width = proportion * height Подставим этот вариант в систему: Оставим высоту в левой части неравенств: Подставляем имеющиеся переменные в каждое неравенство, рисуем числовую прямую и выбираем высоту, удовлетворяющую условиям неравенства для конкретного случая. Разумеется, в программировании никаких числовых прямых нет, зато есть любимые math.min() и math.max(): local height = math.min( maxWidth / proportion, maxWidth, math.sqrt(maxWidth * maxHeight / proportion) ) -- Выражаем ширину через пропорцию local width = height * proportion Все. Разумеется, полученные значения ширины и высоты нужно округлить в меньшую сторону, дабы не кормить видеокарту дробями. Заодно добавим поддержку масштабирования, чтобы выставлять половинное или, скажем, четвертичное от идеального разрешение. Сократив код, избавившись от лишних переменных, мы получаем следующее: local component = require("component") -- Получаем масштаб в качестве первого аргумента скрипта и корректируем его значение local scale = tonumber(select(1, ...) or 1) if not scale or scale > 1 then scale = 1 elseif scale < 0.1 then scale = 0.1 end local gpu = component.gpu local blockCountByWidth, blockCountByHeight = component.proxy(gpu.getScreen()).getAspectRatio() local maxWidth, maxHeight = gpu.maxResolution() local proportion = (blockCountByWidth * 2 - 0.5) / (blockCountByHeight - 0.25) local height = scale * math.min( maxWidth / proportion, maxWidth, math.sqrt(maxWidth * maxHeight / proportion) ) -- Выставляем полученное разрешение gpu.setResolution(math.floor(height * proportion), math.floor(height)) Надеюсь, это микро-знание кому-то было полезно. Лично я очень доволен, что могу наконец запилить графонистый интерфейс для контроля реакторов на вертикальных мониках без осваивания профессии "глиномес", да и соответствующая либа для автопобора разрешения в оське пригодится.
  3. Всем известно, что видеокарты в OpenComputers, мягко говоря, не торт. Чем больше вы обращаетесь к ее методам, будь то установка цвета или символа, тем больше ваш компьютер будет тормозить при отрисовке. Поэтому ко мне пришла идея реализовать так называемую двойную буферизацию, а также несколько алгоритмов ускорения местных GPU. Подробная иллюстрированная документация, описание структуры, способы установки и несколько практических примеров доступны по ссылке: https://github.com/IgorTimofeev/DoubleBuffering
  4. Небольшая библиотека, которая иллюстрирует один из вариантов рисования графики. Плюсы: * Каждое знакоместо содержит 8 пикселей - 2х4. * Удобно рисовать инфографику даже на монохромном дисплее Минусы: * Не очень подходит для многоцветного изображения * Горизонтальные полосы через каждые четыре ряда пикселей pastebin get 5FzEuqs8 braille.lua Как вы уже наверное догадались, я использовал символы шрифта Брайля. Библиотека (скорее набросок библиотеки - расширение, всяческое допиливание и улучшение приветствуется!) поддерживает следующие операции: braille.matrix(width: number, height: number): table - создаем матрицу braille.set(matrix: table, x: number, y: number, value: number) - рисуем пиксель на матрице (1 - заполнен, 0 - пуст) braille.get(matrix: table, x: number, y: number): number - получаем пиксель braille.line(matrix: table, x1: number, y1: number, x2: number, y2: number, value: number): table - рисуем линию на матрице braille.clear(matrix: table) - чистим матрицу braille.render(matrix: table, x: number, y: number) - рисуем матрицу на экране Пример: local gpu = require('component').gpu local br = require('braille') function frame(x, y, width, height) gpu.set(x, y, '╒'..string.rep('═', width-2)..'╕') for dy = y + 1, y + height-1 do gpu.set(x, dy, '│'..string.rep(' ', width-2)..'│') end gpu.set(x, y+height, '╘'..string.rep('═', width-2)..'╛') end local matrix = br.matrix(96, 12) for x = 1, matrix.width do br.line(matrix, x, math.random(1, matrix.height), x, matrix.height) end frame(1, 1, 50, 4) gpu.setForeground(0x000000) gpu.setBackground(0xFFFFFF) br.render(matrix, 2, 2) gpu.setForeground(0xFFFFFF) gpu.setBackground(0x000000) frame(1, 6, 50, 4) br.clear(matrix) for x = 1, matrix.width do br.line(matrix, x, math.random(1, matrix.height), x, matrix.height) end br.render(matrix, 2, 7) function romb(x, y, size) br.line(matrix, x, y, x+size, y+size) br.line(matrix, x+size, y+size, x, y+size*2) br.line(matrix, x, y+size*2, x-size, y+size) br.line(matrix, x-size, y+size, x, y) end frame(1, 11, 50, 4) br.clear(matrix) romb(21,1,5); romb(36,1,5); romb(51,1,5); romb(66,1,5) br.render(matrix, 2, 12)
  5. Добрый день, игроки. Игра Cube, практически портирована с OpenOS на полноценный движок love2d. Осталось лишь генерацию комнат прикрутить и будет готова. Далее можно будет заниматься созданием предметов и прочего дополнительного материала. Вот вам для сравнения скрины игры на OpenOS и на love2d: Нововведения: Игра с плавным управлением (уже нет той пошаговости и пиксельности Возможность бега зажатием шифта Двери которые открываются на кнопку E (они со всех 4 сторон есть, но отрисовку для теста сделал только у верхней - фиолетового цвета) Гибкие настройки, такие как: ширина стен комнат, ширина прохода, размер комнат, скорость игрока, ускорение при беге и прочие переменные. То есть в случае чего можно легко настроить под себя игру. Скажу по секрету. Возможно даже будет в будущем когда нибудь добавлена прицельная стрельба мышкой и вражеские ИИ. Движок позволяет многое. И не смотрите на то что все соседние комнаты отображаются одновременно. Так происходит пока я не внедрил генерацию мира. Есть идеи по улучшению игры - пишите в комментарии. А с вами был qwertyMAN, удачи в программировании.
  6. Хочу представить вам большую библиотеку, предназначенную для работы с изображениями, созданными в нашем Фотошопе. С ее помощью можно манипулировать графикой воистину волшебным образом: изображения можно обрезать, расширять, поворачивать, отражать, инвертировать, изменять их яркость, цветовой тон, насыщенность и добавлять фотофильтры. Разрабатывали мы ее примерно год, содержит она более 1000 строк кода и удовлетворяет практически всем наши требованиям к хорошей графике в OpenComputers, если, конечно, местную графику вообще можно назвать хорошей. Начало работы Прежде всего вам потребуются два файла. Первый обеспечивает основные операции над цветом, позволяет конвертировать цвета из одной схемы в другую, а также сжимать цвета без потери качества. Второй же является самой библиотекой image и дает нам полную свободу творчества. wget https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/lib/colorlib.lua lib/colorlib.lua -f wget https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/lib/image.lua lib/image.lua -f После загрузки библиотек вы можете подключить image и начинать с ней работать. Далее мы рассмотрим различные методы, с помощью которых мы сможем манипулировать изображениями. Под описанием каждого метода будет картинка и код, демонстрирующие суть работы метода, так что проблем с пониманием возникнуть не должно. local image = require("image") Структура изображений (для общего развития) Методы работы с файлами изображений (загрузка, отрисовка, сохранение) Методы трансформирования изображений (вращение, отражение, обрезание и т.п.) Методы работы с цветом (яркость, насыщенность, тон и т.п.)
  7. Итак граждане. Последний стабильный билд геокопалки меня радует, находится сейчас на тестировании, багов пока не обнаружено. Пришло время для нового этапа(с которого по уму следовало бы начинать!) - создание сетевых функций, для вайфы и наверно параллельно для линки тоже. Задача минимум - стабильная передача статов робота по запросу: координаты, основные состояния(топливо, инструмент, процент выполнения текущей задачи). Программа максимум: Автоматизированный сетевой обмен робота со станцией, передача вышеперечисленных величин, возможность "нажать красную кнопку"(остановить робота и вернуть на базу), графическое приложение для планшета(в том числе 2д макет выполняемой задачи, например отрисовка слоя(этажа) руд, в которых оперирует робот, его положение на этой "схемокарте", указание последовательности пути(для анализа)), графическое приложение для рабочей станции(комп с голографическим проектором), функции схожи с планшетной версией, но в 3д, возможность дистанционного управления(указать новое место и запустить нужную программу). На данный момент в сетевых технологиях ОС я довольно таки нуб. Но что успел понять, если робот что то делает(именно робот, аки robot.forward()), то прервать(безопасно) его действие с помощью эвента получения сообщений и не сбить при этом весь алгоритм/функцию(а они у меня многоэтажные) не получится. Нужно действовать апосредованно, не трогая функции использующие пространство имен "robot", тоесть поменять какую то глобальную переменную, проверив которую робот задействует новые алгоритмы. Так ли это? или же существует возможность вмешаться безопасным образом?
×
×
  • Создать...