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

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

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

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

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

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


Блоги

  • Робот Байт
  • Fingercomp's Playground
  • 1Ridav' - блог
  • Totoro Cookies
  • Блог cyber01
  • IncluderWorld
  • KelLiN' - блог
  • Крутой блог
  • eutomatic blog
  • Programist135 Soft
  • Сайт в сети OpenNet
  • PieLand
  • Очумелые ручки
  • Блог недоблоггера
  • В мире Майнкрафт
  • LaineBlog
  • Квантовый блог
  • Блог qwertyMAN'а
  • some blog name
  • Дача Игоря
  • Путешествия Xytabich'а
  • Рецепты программирования
  • Шкодим по крупному
  • 123
  • mineOS и её удивительный мир
  • Поляна говнокода Bumer 32

Форумы

  • Программирование
    • Программы
    • База знаний
    • Разработчикам
    • Вопросы
  • Игровой раздел
    • Игровые серверы
    • Моды и плагины
    • Жалобы
    • Ивенты и конкурсы
    • Файлы
  • Общение
    • Задать вопрос
    • Обратная связь
    • Беседка
    • Шкатулка
  • Технический раздел
    • Корзина

Группы продуктов

Нет результатов для отображения.


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

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


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

  • Начать

    Конец


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

  • Начать

    Конец


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

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

  • Начать

    Конец


Группа


AIM


MSN


Сайт


ICQ


Yahoo


Jabber


Skype


ВКонтакте


Gtalk


Facebook


Twitter


Город


Интересы

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

  1. Микроконтроллеры - внешне однообразные блоки. Как на счет того, чтобы декорировать их? Иссью на гитхабе мода: https://github.com/MightyPirates/OpenComputers/issues/3216 Обсудим этот вопрос?)
  2. Всем привет! Сравнительно недавно стал использовать очки дополненной реальности из OpenGlasses для реализации своих фетишей идей. Но все не ограничилось выводом каких-то квадратов, текстиков и прочей ерунды. Я начал пихать на вывод 3D модели, но постоянно грузить obj и png файлы занимало много времени и вычислений, да и к тому же obj файлы имеют свойство очень много весить. Пришлось что то думать на этот повод, после нескольких часов в WitchCraftе некоторого времени я надумал простенький формат для хранения всей информации о модели (благо тут её не так много)... Итак, встречайте *барабанная дробь*: PAM - Polygonal Animated Model (рус. Анимированная Полигональная Модель), как ясно из названия, в файле хранится информация о полигонах и их вершинах, а так же анимаций (при желании). Хотя по идее в файле можно хранить все что угодно, но об этом позже. Формат имеет бинарную структуру файла, что значительно экономит место на диске, ну и ресурсы тоже. Структура файла достаточно проста: PAM - 3 байта, заголовок 0 - 1 байт, тип 0000 - 4 байта, количество вершин 0000 - 4 байта, количество треугольников [vartex data] - блок данных вершин {x, y, z} - 12 байт на вершину [triangle data] - блок данных треугольников {v1, v2, v3, color} - 16 байт на треугольник, цвет занимает 4 байта - r,g,b,a в зависимости от типа: -- блок вершинной анимации 0000 - 4 байта, количество кадров анимации [vertex frame data] - блок данных вершин {x, y, z}, количество вершин совпадает с основной моделью -- блок анимаций палитры 0000 - 4 байта, количество кадров анимации [palette frame data] - блог данных палитры {string color - r,g,b,a}, количество цветов совпадает с количеством треугольников Ну и прежде чем перейти к библиотеке, хотел бы рассмотреть небольшую утилиту для конвертирования obj и png файлов в этот формат - PAMPacker Скачать можно тута Использовать её достаточно просто: Запускаем прогу (кудаж без этого) Предлагается выбрать тип из списка, выбираем подходящий Вводим название модели, она сохранится в виде название.pam Вписываем название файла модели в формате obj (или exit если надо выйти из программы) Вписываем название файла текстур(палитра) модели в формате png (можно пропустить, если ничего не вводить и выбрать опцию y) В случае если выбрали формат с анимацией: Вписываем соответствующие названия файлов, и пропускаем если закончили Ну и все, собственно Для работы утилиты необходима библиотека PNGImage. Чтож, перейдем к следующей части нашего повествования. Скачать библиотеку можно тут Объект pam имеет следующие методы и свойства: Методы: load(fileName):boolean, string - загружает модель в объект, в случае успеха возвращает true, иначе возвращает false и ошибку save(fileName) - сохраняет модель loadMesh(fileName):boolean, string or number, vertexes, triangles - загружает только модель, в случае успеха возвращает true, тип модели, вершины и треугольники; иначе возвращает false и ошибку lerpVertexFrames(frame1, frame2, time):vertexes - смешивает координаты вершин из двух кадров, 0 кадр является вершинами модели, time может принимать значение 0-1 lerpPaletteFrames(frame1, frame2, time):palette - смешивает две палитры, 0 кадр является палитрой модели, time может принимать значение 0-1 Свойства: type - тип модели vertexes - вершины модели triangles - треугольники модели vertexFrames - кадры вершинной анимации paletteFrames - палитры В библиотеке присутствуют только основные методы, для загрузки моделей и их базовой анимации. Картинки для привлечения внимания, ну и заодно пример использования: Но и это ещё не все! (А вы то думали ) В библиотеке присутствует фича под названием "модули", то есть при помощи этих самых модулей можно засунуть любые данные в модель! Итак, методы и свойства модулей, присутствующие в pam: Методы, тут думаю все понятно: addModule(module):boolean removeModule(moduleName):boolean removeAllModules() Свойства: additionalModules - все добавленные модули modulesData - таблица данных модулей Структура модуля: module = { name = "module", - имя модуля, является идентификатором для доступа к данным модуля в modulesData pack = function(moduleData, pam):string, - метод запаковки(кодирования в бинарник) данных, должен возвращать строку с бинарными данными unpack = function(file, fileSize, pam):moduleData - метод распаковки(раскодирования) данных, предоставляется файловый поток, размер файла, объект pam } Вспомогательные методы pam, для работы с бинарными данными: float2str(float):string str2float(string):float number int2str(integer):string str2int(string):integer number Модуль должен иметь хотя бы один из методов запаковки/распаковки. Модуль загружается после загрузки основной модели, НО анимации загружаться не будут при добавлении хотя бы одного модуля. В модуль возможно поместить любые (какие позволит совесть) данные. При сохранении файла данных модуля, при наличии метода pack и самих данных, записываются в файл. Получить/задать данные модуля можно при помощи свойства modulesData["module"] или modulesData.module (при соответствующем идентификаторе). Пример модуля, добавляющего возможность сохранять/загружать линии в файл: linesModule = { -- line structure: vertex point 1 (number in vertexes array), vertex point 2, size, color (string(byte array) - r,g,b,a) name = "lines_module", pack = function(moduleData, pam) local data = pam.int2str(#moduleData) for n, d in pairs(moduleData) do data = data..pam.int2str(d[1])..pam.int2str(d[2])..pam.float2str(d[3])..d[4] end return data end, unpack = function(file, fileSize, pam) local size = fileSize - file:seek("cur", 0) if size < 4 then return end local count = pam.str2int(file:read(4)) if size < (count*16+4) then return end local lines = {} for i = 1, count do table.insert(lines, {pam.str2int(file:read(4)), pam.str2int(file:read(4)), pam.str2float(file:read(4)), file:read(4)}) end return lines end } На этом, надеюсь, все. Всем желаю воплощения своих фантазий на тему фетишей идей.
  3. Библиотека для загрузки трехмерных моделей в формате OBJ и вывода их на очки OpenGlasses. (Формат OBJ - один из самых широко распространенных форматов моделей. Практически все пакеты трехмерного моделирования его поддерживают. Помимо этого, большое количество готовых моделей можно найти в интернете.) Исходный код: http://pastebin.com/JyK7KTCQ Используя несложный интерфейс, вы легко можете сделать что-то вроде этого: Единственный минус - скорость отрисовки, которая возврастает пропорционально количеству полигонов. Череп на скриншоте состоит приблизительно из 9000 полигонов и отрисовывался около 5 минут. API библиотеки load(filename: string) - загружает модель из указанного файла. Расширение ".obj" указывать. draw(glasses: table) - отрисовывает модель на указанном компоненте типа "glasses". setPosition(x: number, y: number, z: number) - положение модели относительно терминала очков setScale(s: number) - масштабирование модели. 1.0 - масштаб 1 к 1. Размеры моделей могут очень варьироваться в разных OBJ файлах, поэтому подстройка масштаба вам скорее всего потребуется в любом случае. setColor(r: number, g: number, b: number) - цвет модели. Указывается числами от 0.0 до 1.0, в стандартной палитре RGB. getPosition(): table - возвращает таблицу вида {x, y, z}. Ключи полей - числа от 1 до 3. getScale(): table - возвращает масштаб модели. getColor(): table - возвращает цвет модели вида {r, g, b}. Ключи полей - числа от 1 до 3. getVertexNum(): number - возвращает число вершин модели getPolyNum(): number - возвращает число полигонов модели Пример использования local obj = require('obj') local com = require('component') local glasses = com.glasses glasses.removeAll() obj.load('wolf.obj') obj.setScale(0.01) obj.setPosition(0, 0, 5) obj.setColor(1, 1, 1) obj.draw(glasses) print('Vertex: '..obj.getVertexNum(), 'Poly: '..obj.getPolyNum()) Файл библиотеки при этом должен иметь название obj.lua. Результат выполнения будет выглядеть примерно так: P.S. Модели с большим количеством полигонов будут мерцать, так как очень сильно увеличат расход энергии на терминал очков. На сервере рекомендуется использовать менее полигональные модели. А в сингле - отредактировать файл конфигурации мода OpenGlasses и снизить расход энергии.
×
×
  • Создать...