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

Totoro

Гуру
  • Публикации

    1 950
  • Зарегистрирован

  • Посещение

  • Победитель дней

    289

Все публикации пользователя Totoro

  1. Это не векторы из С++, это векторы из математики. Я считаю текущее название подходит.
  2. Программа загружает в память информацию о всех вершинах и полигонах. В принципе можно оптимизировать, выкинув лишние таблицы, но это не сильно увеличит размер модели. Что касается раскраски, тут все не просто. Текстуры реализовать не выйдет, в силу технических причин. Можно сделать окраску различных частей модели в разный цвет, при условии, что эти части представляют собой отдельные меши в самой модели. В принципе. Ну и наконец, можно реализовать что-то вроде фейкового "самозатенения" по полигонам. (Смотреться будет немного "угловато" =) Примерно так: http://i.stack.imgur.com/o90EZ.png только треугольники вместо квадратов) И повысит расход оперативной памяти и время загрузки модели.
  3. Я сделал все, что было в моих силах, и более не властен над твоей судьбой. Теперь тебе може помочь только Он. Я скрещу за тебя пальцы. Аминь.
  4. Саму библиотеку (obj.lua) запускать и не надо. Ее надо использовать через программу. Ты наверное не прилинковал очки. Очки из мода OpenGlasses кликнуть ПКМ по терминалу очков (блок такой, с зеленым узором). А потом надеть, вместо шлема. Из программы убери строку setScale(0.01). Модель волка у меня была очень большой. Строку setPosition тоже можно убрать. Когда запускается программа, там ничего нажимать не надо. Просто жди, и смотри где-то возле блока-терминала очков. Должна начать отрисовываться модель. Когда дорисуется, на компьютере появится сообщение про число вокселей и полигонов.
  5. Ну тогда все немного проще. 1) (Желательно. Чтобы модели не моргали) Редактируешь конфиг мода OpenGlasses. Снизь энергопотребление и повысь объем буфера. 2) Скопируй модель OBJ на жесткий твоего компьютера. 3) Скопируй, или скачай мою библиотеку (команда pastebin get JyK7KTCQ obj.lua, если есть интернет-плата) 4) Напиши свою программу. Для теста возьми пример из первого поста, только замени в нем название файла. 5) Все сохрани, и запусти свою программку-тест.
  6. Сингл или сервер? Есть ли доступ к сейву мира? Это важно, потому что от этого зависит как ты будешь загружать файл с моделью.
  7. Откуда такой пессимистичный настрой? Зачем? 1) Круто. 2) Для личного удовольствия, которое я получил в процессе написания и созерцания результатов. 3) Для красоты. Парочку моделей можно поставить например на спавне. И тогда у него будет две ипостаси - обычная и виртуальная, не видимая без очков. ) 4) Круто.
  8. Библиотека для загрузки трехмерных моделей в формате 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 и снизить расход энергии.
  9. Totoro

    Метатаблицы, Lua

    Немного не соглашусь. У неологизма "метатаблица" есть как минимум пара преимуществ, по сравнению с другими вариантами. Первое - он широко распространен (в контексте Луа). Как в английском так и в русском языке. Второе - это наиболее точный перевод термина "metatable" на русский. То что перевод так похож на оригинал - лишь облегчает понимание мануалов. Так что тут уже все решено за нас создателями языка. Термин "суб-таблица" возможно прижился бы. Но он звучит менее определенно. "Под-таблица". Это таблица-элемент? Таблица операторов? Или что-то еще? Приставка "мета-" носит в русском языке (хотя она несомненно иностранного происхождения) смысл абстрактности и обобщенности. Что вполне подходит к случаю, на мой взгляд.
  10. Totoro

    Метатаблицы, Lua

    Да, термин "таблица" рябит в глазах, особенно если это замечаешь. Однако, на мой взгляд, в статье на подобную тему это неизбежно. И уж тем более не стоит заменять термин "метатаблица" на неологизм собственного сочинения, вводя в заблуждение читающих статью новичков. Можно использовать синтаксис описания команд, подобный тому, что можно увидеть на http://ocdoc.cil.li/ И переформулировать фразы немного, чтобы избежать излишней тавтологии. Т.е. тип аргументов и какой идет куда, становится понятно из сигнатуры.
  11. Для него эта программка - прогресс. А для тебя регресс. Так что обойдешься без четвертого байта )
  12. Еще пара дней есть же. За это время я могу еще свой проект выкатить успеть. ))
  13. Ага. Паттерн можно сделать такой: "(%S+)%s*=%s*(.*)". Таким образом будут корректно парситься строки вроде name=Вася Пупкин age = 99 tab_len= 2 are_you_crazy =true Если после равно не будет текста, value примет значение "". Если добавить экранирование строк-комментариев (например знаком #), будет вообще отлично.
  14. Там стоят строки local key, value = string.match(line,"(.*)=(.*)") if value ~= nil and key == key then Т.е. считанная строка разбивается на key и value, а затем идет проверка на то что value содержит какое-нибудь значение, и key совпадает с нужным. В противном случае идет чтение строк из файла дальше. Однако key == key всегда будет равно true, потому что локальная переменная key закрывает видимость аргумента key. А также паттерн "(.*)=(.*)" не подразумевает возможности пробелов перед или после равно. Если конфиг пишет программа - это не важно, но в случаее ручной правки конфига может вызвать ошибки.
  15. Кинь скрин выполнения команды df (запускать через консоль), или команды for a, b in component.list('filesystem') do print(a, component.proxy(a).getLabel()) end (запускать из интерпретатора lua).
  16. Традиционно, временная файловая система имеет метку tmpfs. Она автоматически монтируется по адресу /tmp/. Не встречал названия ram.
  17. Можно также попробовать альтернативную пасту (англ. локализация): http://pastebin.com/bR33cXDU
  18. Totoro

    Как собрать шахтерского робота

    Неправильно заданы образцы пустой породы скорее всего.
  19. Играл как-то давно в нее. Интересная игрушка. Было прикольно писать роботов бойцов, и роботов электриков, которые заменяли другим роботам батарейки )
  20. Это суровый админский копатель. Он сетит через командный блок руду, а затем едет ее копать.
  21. Ребят, обновляйтесь до OC 1.5.13 и будет вам счастье.
  22. Глянь тут: http://lua-users.org/wiki/StringLibraryTutorial (в частности string.byte и string.char) А также тут: http://ocdoc.cil.li/api:keyboard
  23. В таком случае пиши и тестируй программу в сингле. Отключи буферизацию в конфиге OpenComputers. У тебя будет доступ к диску через папку с миром. И удобный редактор, чтобы писать. Когда закончишь тестирование - зальешь программу на сервер и будешь уже управлять роботом через сетевую карту (или как оно у тебя задумано).
  24. Глянь через df еще. P.S. Сябро. Уже 10 часов прошло. У тебя есть робот, без клавиатуры, без монитора, без инициализированной файловой системы (если я правильно понял). Нафиг он тебе нужен в таком виде? За это время ты вполне успел бы его пересобрать заново с недостающими деталями.
×
×
  • Создать...