Xytabich
-
Публикации
143 -
Зарегистрирован
-
Посещение
-
Победитель дней
25
Сообщения, опубликованные пользователем Xytabich
-
-
Вся функция должна выполняться в цикле, но в функции есть команда, которая выполняется один раз, помимо другого
А зачем огород городить? Можно же просто перед циклом воткнуть print('Привет').
-
я имею в виду что бля меня все файлы имеют одно и тоже наполнение - байты
а то, текстовый он или нет зависит от того как я его читаю
я написал это, да бы уточнить что в ОС вполне можно работать с фалами как с бинарными)
никто мне например не мешает прочитать абстрактно текстовый файл (txt) как бинарный, а абстрактно бинарный (png например) как текстовый)
Тут вся соль в хранении информации, а не в способе её чтения. Даже если ты прочтешь png в текстовом режиме, как ты поймешь что там за картинка?
P.S. Перечитав, понял что ты не понимаешь что такое формат(хотя, может и понимаешь). Но с википедии:
Формат файла, формат данных — спецификация структуры данных, записанных в компьютерном файле.
-
я вообще не вижу разници в фарматах файлов, для меня они все одинаковые) Для меня есть разница только в том как и читать)) Соответственно и в OC для меня любой файл может быть как текстовым так и бинарным)
Не ну допустим у тебя есть текстовый файл описывающий картинку, весит он 3мб, и есть бинарный, весящий 300кб. Что ты выберешь?
-
А нормали?

Очочки нормали не поддерживают (сначала цель на них была), но можно модуль нормалей добавить на этот случай))
-
Я так понял, он для OpenGlasses и поддерживает анимашки.На самом деле этот формат не только для очочков, он для хранения геометрических данных, ну и прочего хлама
P. S. Автору настоятельно рекомендую залить свои программы в репозиторий :PМне лень

-
я так понимаю это чтото из серии "мегакрутой формать" 3д моделей для OpenGlasses? но я так и не понял в чес его преймущество)
не, это скорее из серии "пихай все в него", ибо мне лень придумывать что то ещё, буду все туда пихать))
Вообще для себя формат, но хтож знает, может кому то ещё сгодится
-
Я ничерта не понял, но зато на картинки глянул. Прикольная вещь.
Ну, картинки дело такое, их и по другому делать можно))
-
По поводу ошибок, которые с большой вероятностью будут
с моими кривыми руками- просьба прислать стактрейс, ну или его скрин. И, возможно когда-нибудь, я исправлю это ошибку. -
Всем привет! Сравнительно недавно стал использовать очки дополненной реальности из 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 }На этом, надеюсь, все. Всем желаю воплощения своих
фантазий на тему фетишейидей.-
6
-
Оффтоп
Где то я уже это видел такую тему... возможно это был даже я
-
Сэр, моё воспитание не позволяет мне пилить таких кавайных существ. :P
Зато мне позволит *ньяхаха*
жаль на скайтече нет чатбокса, даже не знаю как управлять ею
-
Оно
незакончено! Добавил анимацию и возможность поворота модели(немного баговано)
Итак, функции:
setRotation(x,y,z) - поворачивает объект на указанное кол-во градусов(euler), при повороте почему-то размер модели немного уменьшается
loadFrame(string:filename) - добавляет новый кадр анимации, обратите внимание, в анимацию добавляются только те вершины, которые отличаются от основной модели. Кадр загружается после анимации!setFrame(index):boolean - устанавливает целевой кадр, если индекс равен нулю, устанавливается значение модели. Возвращает установлен ли кадр
getFramesNum():number - возвращает количество кадров
animate(t) - интерполирует(смешивает, анимирует) позицию точек от текущей к целевой, t=0-1
setPosition/setRotation/setScale теперь работают при загруженной модели
Вот оно само:http://pastebin.com/QJr3u6fa
Код для примера:local obj = dofile('atobj.lua') local com = require('component') local glasses = com.glasses glasses.removeAll() obj.load('f1.obj') obj.loadFrame('f2.obj') obj.setScale(0.025) obj.setPosition(0, 1, 0) obj.setColor(1, 1, 1, 0.5) obj.draw(glasses) obj.setFrame(1) local t = 0 local s = true while true do obj.animate(t) obj.setRotation(0,t*90,0) if s then t = t+0.1 if t >= 1 then t = 1 s = false end else t = t-0.1 if t <= 0 then t = 0 s = true end end os.sleep(0.1) endP.S. Totoro, теперь пили фею, и мне не забудь скинуть

-
3
-
-
А может и не угас ещё

В принципе по той логике что я описал вышел такой вот тентакль
:


К сожалению при лагах модель может сломаться на мгновение, что печально...
Версия не окончательная, выяснилось что узнать положение треугольников нельзя, придется писать костыль для сохранения их положения. В связи с этим не будет надобности указывать начальный и конечный кадр анимации, указывая конечный кадр, будет браться текущее положение треугольников.
-
-
@@Totoro, интересная мысля слушай, яб хотел такую фею^^
вот только насчет того дойдут ли руки до анимации не знаю, весь энтузиазм спустил на текстурирование)) Хотя, если будет время и не изменит память, попробую реализовать задуманное -
@@Totoro, задумывал реализовывать анимацию?
Есть у меня идейка, как сделать это по производительнее, отталкиваться буду от текущей программы:
- Первым делом загружается основная модель(+ текстуры, если необходимо), при отрисовке треугольники добавляются в таблицу
- Методом addFrame(filename) добавляется новый кадр анимации в виде того же объекта, но с измененными координатами вершин. В методе идет поиск номеров измененных вершин и полигонов, которые затем заносятся в таблицу кадра.
- Методом setFrames(f1, f2) устанавливаются два кадра, между которыми будет вестись интерполяция, при этом заполняется таблица с начальным и конечным положением вершин модели
- Методом animate(t) идет интерполяция выбранных кадров, t=0-1
Примерно так
-
Совсем забыл добавить описание, ну теперь есть оно
У разрабов MineOS ты ничего не воровал. Та либа написана вообще не им. Как и другие две.Не знаю к сожалению, как называть тех кто создал, по этому как проще так и описал))
-
Почти удалось сделать вертексное текстурирование(ну, в данном случае полигональное), но треугольники просвечивают если созданы позже тех, что перед ними
Можно чисто теоретически отключать невидимые полигоны, но вот насчет производительности такой штуки остаются вопросы.Любезно
сп****впозаимствовав у разрабов MineOS библиотечку по чтению PNG, получилось нечто такое:

Карта текстур (у меня "палитра"):

P.S. насчет нехватки энергии, дело решается множественным втыкиванием аккумуляторов в округе, и соответственно зарядке их от нескольких источников.
P.S.S. как менять размер изображения?

Чуть не забыл, если кому интересно, вот код: http://pastebin.com/Znkbt1H3
Необходимые библиотеки: PNGImage(для него deflatelua и crc32lua)
Добавленные/измененные методы:
loadTexture(string:filename) - загружает текстуру модели в формате png. Можно использовать полупрозрачные текстуры. Необходимо загружать перед моделью.
usePalette(boolean:use)(по умолчанию true) - при ложном значении смешивает цвета с текстуры исходя из uv координат модели, иначе берет первый попавшийся цвет(рекомендуется помещать развертку в текстуру вида "палитра"). Необходимо ставить нужное значение так же перед загрузкой модели.
setColor/getColor(r,g,b,a) - теперь используют четвертый параметр в виде прозрачности объекта, так же установленный цвет перемножается на цвета текстуры.Код используемый в картинке выше:
local obj = require('tobj.lua') local com = require('component') local glasses = com.glasses glasses.removeAll() obj.loadTexture('palette.png') obj.load('object.obj') obj.setScale(0.1) obj.setPosition(0, 1, 0) obj.setColor(1, 1, 1, 1) obj.draw(glasses)-
4
-
-
Может для создания самой модели использовать Techne? а раскрашивать в программе можно
-
Эх ну ок

-
lol Flan's может добавлять такие штуки, ставишь на блок пулеметик и "садишься" за него, вот тебе и турелька.П.С. Есть какой-то вроде модик на пулеметные турели, если он блоки не разрушает, то можно его поставить. Но работает ли он на сервере - вопрос.
-
Не ну так не интересно, я люблю вертолетики и самолетики

-
Так какая разница что будут ракеты? Ладно если бы они приват снимали на разрушенной территории, а так просто гриферство, я так считаю.
-
Думаю задумка с ICBM не очень, так как ракеты рассчитаны на разрушение ландшафта и я не думаю что люди согласятся на то что бы их дома разрушили ракетой.

Проект "ОС для всех"
в Программирование
Опубликовано:
Тут загвоздка в том, что это никому, по сути, не надо. Даже если будет подобная программа, пользоваться ей будут от силы пара человек, так как что бы делать даже самые простые программы - надо думать. Учитывая, что даже программистам лень придумывать какой-то функционал (я не говорю об энтузиастах, которые в лоб расшибутся но сделают), что уж говорить о игроках которые хотят только покрасоваться, мол "А я вот что могу!".