Библиотека для загрузки трехмерных моделей в формате 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 и снизить расход энергии.