Поиск по сайту
Результаты поиска по тегам 'obj'.
Найдено 1 результат
-
Библиотека для загрузки трехмерных моделей в формате 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 и снизить расход энергии.
- 39 ответов
-
- 18