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


Фотография

OBJ: Виртуальные трехмерные модели [OpenGlasses]

виртуальная реальность модель очки opencomputers openglasses 3d obj

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 39

#1 Оффлайн   Totoro

Totoro
  • Хранители Кода
  • Сообщений: 1 740
  • Уровень сигнала: 0,27%
  • В игре: 2 час. 13 мин.

Награды

                                      

Отправлено 29 Август 2015 - 15:22

*
Популярное сообщение!

Библиотека для загрузки трехмерных моделей в формате OBJ и вывода их на очки OpenGlasses.

(Формат OBJ - один из самых широко распространенных форматов моделей. Практически все пакеты трехмерного моделирования его поддерживают. Помимо этого, большое количество готовых моделей можно найти в интернете.)

 

Исходный код:

http://pastebin.com/JyK7KTCQ

 

Используя несложный интерфейс, вы легко можете сделать что-то вроде этого:

 

2015-08-29_12.46.39.png

 

2015-08-29_13.46.28.png

 

Единственный минус - скорость отрисовки, которая возврастает пропорционально количеству полигонов. Череп на скриншоте состоит приблизительно из 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.

Результат выполнения будет выглядеть примерно так:

2015-08-29_13.57.50.png

 

 

P.S.

Модели с большим количеством полигонов будут мерцать, так как очень сильно увеличат расход энергии на терминал очков. На сервере рекомендуется использовать менее полигональные модели. А в сингле - отредактировать файл конфигурации мода OpenGlasses и снизить расход энергии.


Сообщение отредактировал Totoro: 29 Август 2015 - 18:44


#2 Онлайн   LeshaInc

LeshaInc
  • Пользователи
  • Сообщений: 1 212
  • Уровень сигнала: 14,55%
  • В игре: 117 час. 41 мин.
  • ГородЛуна

Награды

                       

Отправлено 29 Август 2015 - 16:01

Круто конечно... Только зачем? Зачем обычному игроку 3D модели у двора? Ему бы ресов накопать, да мобов поубивать.

А так, прога хорошая.



#3 Оффлайн   Fingercomp

Fingercomp
  • Гуру
  • Сообщений: 2 006
  • Уровень сигнала: 158,17%
  • В игре: 1279 час. 4 мин.

Награды

                                               

Отправлено 29 Август 2015 - 16:11

Кодят в первую очередь для удовольствия)


  • Totoro и Asummonster это нравится

#4 Оффлайн   Totoro

Totoro
  • Автор темы
  • Хранители Кода
  • Сообщений: 1 740
  • Уровень сигнала: 0,27%
  • В игре: 2 час. 13 мин.

Награды

                                      

Отправлено 29 Август 2015 - 16:18

Круто конечно... Только зачем? Зачем обычному игроку 3D модели у двора? Ему бы ресов накопать, да мобов поубивать.

А так, прога хорошая.

 

Откуда такой пессимистичный настрой?  :)

 

Зачем?

1) Круто.

2) Для личного удовольствия, которое я получил в процессе написания и созерцания результатов.

3) Для красоты. Парочку моделей можно поставить например на спавне. И тогда у него будет две ипостаси - обычная и виртуальная, не видимая без очков. )

4) Круто.


  • Alex, Fingercomp, Asummonster и еще 1 это нравится

#5 Онлайн   LeshaInc

LeshaInc
  • Пользователи
  • Сообщений: 1 212
  • Уровень сигнала: 14,55%
  • В игре: 117 час. 41 мин.
  • ГородЛуна

Награды

                       

Отправлено 29 Август 2015 - 17:44

Кодят в первую очередь для удовольствия)

Не могу не согласиться)



#6 Оффлайн   hugl

hugl
  • Пользователи
  • Сообщений: 10
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Отправлено 29 Август 2015 - 18:48

извините, я два дня как изучаю данный мод. подскажите пожалуйста как запустить программу? пошагово если не трудно. 



#7 Оффлайн   Totoro

Totoro
  • Автор темы
  • Хранители Кода
  • Сообщений: 1 740
  • Уровень сигнала: 0,27%
  • В игре: 2 час. 13 мин.

Награды

                                      

Отправлено 29 Август 2015 - 18:51

извините, я два дня как изучаю данный мод. подскажите пожалуйста как запустить программу? пошагово если не трудно. 

 

Сингл или сервер? Есть ли доступ к сейву мира? Это важно, потому что от этого зависит как ты будешь загружать файл с моделью.



#8 Оффлайн   hugl

hugl
  • Пользователи
  • Сообщений: 10
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Отправлено 29 Август 2015 - 19:00

сингл естественно)


в общем модель я загрузил, ввел pastebin get JyK7KTCQ obj (где obj я ввел просто так, как бы свое название программы) и все...дальше не знаю что делать



#9 Оффлайн   Totoro

Totoro
  • Автор темы
  • Хранители Кода
  • Сообщений: 1 740
  • Уровень сигнала: 0,27%
  • В игре: 2 час. 13 мин.

Награды

                                      

Отправлено 29 Август 2015 - 19:03

Ну тогда все немного проще.

 

1) (Желательно. Чтобы модели не моргали) Редактируешь конфиг мода OpenGlasses. Снизь энергопотребление и повысь объем буфера.

2) Скопируй модель OBJ на жесткий твоего компьютера.

3) Скопируй, или скачай мою библиотеку (команда pastebin get JyK7KTCQ obj.lua, если есть интернет-плата)

4) Напиши свою программу. Для теста возьми пример из первого поста, только замени в нем название файла.

5) Все сохрани, и запусти свою программку-тест.



#10 Оффлайн   hugl

hugl
  • Пользователи
  • Сообщений: 10
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Отправлено 29 Август 2015 - 19:13

Свои программы мне писать еще долеко...я даже lua толком не знаю



#11 Оффлайн   hugl

hugl
  • Пользователи
  • Сообщений: 10
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Отправлено 29 Август 2015 - 19:30

когда запускаю obj.lua ничего не происходит (вообще)

а когда запускаю это(я изменил wolf,obj на cat,obj короче свою модель и закинул я ее в world/opencomputers/мой ж.диск) то консоль исчезает и появляется какой то чат что ли...незнаю что это, когда пишу что нибудь(любое сообщение) то оно дублируется 

 

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())



#12 Оффлайн   Totoro

Totoro
  • Автор темы
  • Хранители Кода
  • Сообщений: 1 740
  • Уровень сигнала: 0,27%
  • В игре: 2 час. 13 мин.

Награды

                                      

Отправлено 29 Август 2015 - 19:58

когда запускаю obj.lua ничего не происходит (вообще)

а когда запускаю это(я изменил wolf,obj на cat,obj короче свою модель и закинул я ее в world/opencomputers/мой ж.диск) то консоль исчезает и появляется какой то чат что ли...незнаю что это, когда пишу что нибудь(любое сообщение) то оно дублируется 

 

Саму библиотеку (obj.lua) запускать и не надо. Ее надо использовать через программу.

 

Ты наверное не прилинковал очки. Очки из мода OpenGlasses кликнуть ПКМ по терминалу очков (блок такой, с зеленым узором). А потом надеть, вместо шлема.

 

Из программы убери строку setScale(0.01). Модель волка у меня была очень большой. 

Строку setPosition тоже можно убрать.

Когда запускается программа, там ничего нажимать не надо. Просто жди, и смотри где-то возле блока-терминала очков. Должна начать отрисовываться модель.

Когда дорисуется, на компьютере появится сообщение про число вокселей и полигонов.


Сообщение отредактировал Totoro: 29 Август 2015 - 19:59


#13 Оффлайн   hugl

hugl
  • Пользователи
  • Сообщений: 10
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Отправлено 29 Август 2015 - 23:49

 

что я только не сделал... и очки включил и комп перезагрузил...может что то не так делаю...



#14 Оффлайн   Totoro

Totoro
  • Автор темы
  • Хранители Кода
  • Сообщений: 1 740
  • Уровень сигнала: 0,27%
  • В игре: 2 час. 13 мин.

Награды

                                      

Отправлено 30 Август 2015 - 00:42

что я только не сделал... и очки включил и комп перезагрузил...может что то не так делаю...

 

Я сделал все, что было в моих силах, и более не властен над твоей судьбой. Теперь тебе може помочь только Он. Я скрещу за тебя пальцы. Аминь.


Сообщение отредактировал Totoro: 30 Август 2015 - 00:43

  • Kartze это нравится

#15 Оффлайн   hugl

hugl
  • Пользователи
  • Сообщений: 10
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Отправлено 30 Август 2015 - 01:39

Я сделал все, что было в моих силах, и более не властен над твоей судьбой. Теперь тебе може помочь только Он. Я скрещу за тебя пальцы. Аминь.

:D может у меня модель слишком кривая? 



#16 Оффлайн   hugl

hugl
  • Пользователи
  • Сообщений: 10
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Отправлено 30 Август 2015 - 03:56

Как окозалось все прекрасно работало только вот 1 нюанс... в майне лупы нет =_= зачем мне нанокошка

6db576d284af.png


  • Fingercomp, cloud и Kartze это нравится

#17 Оффлайн   evgkul

evgkul
  • Пользователи
  • Сообщений: 369
  • Уровень сигнала: 0,6%
  • В игре: 4 час. 49 мин.

Награды

     

Отправлено 30 Август 2015 - 05:35

scale выстави


добавь setScale(10)



#18 Оффлайн   SergOmarov

SergOmarov
  • Пользователи
  • Сообщений: 564
  • Уровень сигнала: 0,32%
  • В игре: 2 час. 36 мин.

Награды

     

Отправлено 30 Август 2015 - 06:28

Как окозалось все прекрасно работало только вот 1 нюанс... в майне лупы нет =_= зачем мне нанокошка

6db576d284af.png

:smile3: Выглядит здорово))


  • Fingercomp, Asummonster, davial и еще 1 это нравится

#19 Оффлайн   Totoro

Totoro
  • Автор темы
  • Хранители Кода
  • Сообщений: 1 740
  • Уровень сигнала: 0,27%
  • В игре: 2 час. 13 мин.

Награды

                                      

Отправлено 30 Август 2015 - 12:24

Как окозалось все прекрасно работало только вот 1 нюанс... в майне лупы нет =_= зачем мне нанокошка

 

:D Конечно же ловить наномышей!


Сообщение отредактировал Totoro: 30 Август 2015 - 12:24

  • Fingercomp, LeshaInc, Asummonster и 3 другим это нравится

#20 Оффлайн   SergOmarov

SergOmarov
  • Пользователи
  • Сообщений: 564
  • Уровень сигнала: 0,32%
  • В игре: 2 час. 36 мин.

Награды

     

Отправлено 30 Август 2015 - 12:45

Скиньте модель этой киски, плиз)



#21 Оффлайн   hugl

hugl
  • Пользователи
  • Сообщений: 10
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Отправлено 30 Август 2015 - 14:28

Интересно а можно было бы сделать так что бы модели имели разные цвета а не залитые сплошными 



#22 Оффлайн   SergOmarov

SergOmarov
  • Пользователи
  • Сообщений: 564
  • Уровень сигнала: 0,32%
  • В игре: 2 час. 36 мин.

Награды

     

Отправлено 30 Август 2015 - 14:30

Можно)



#23 Оффлайн   hugl

hugl
  • Пользователи
  • Сообщений: 10
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Отправлено 30 Август 2015 - 14:41

Хотелось бы...кстати большие модели не отрисовываются пишет нет памяти... 4 по 3.5 установил все равно не хватает



#24 Оффлайн   Totoro

Totoro
  • Автор темы
  • Хранители Кода
  • Сообщений: 1 740
  • Уровень сигнала: 0,27%
  • В игре: 2 час. 13 мин.

Награды

                                      

Отправлено 30 Август 2015 - 14:55

Хотелось бы...кстати большие модели не отрисовываются пишет нет памяти... 4 по 3.5 установил все равно не хватает

 

Программа загружает в память информацию о всех вершинах и полигонах. В принципе можно оптимизировать, выкинув лишние таблицы, но это не сильно увеличит размер модели.

 

Что касается раскраски, тут все не просто. Текстуры реализовать не выйдет, в силу технических причин.

Можно сделать окраску различных частей модели в разный цвет, при условии, что эти части представляют собой отдельные меши в самой модели. В принципе.

Ну и наконец, можно реализовать что-то вроде фейкового "самозатенения" по полигонам. (Смотреться будет немного "угловато" =) Примерно так: http://i.stack.imgur.com/o90EZ.png только треугольники вместо квадратов) И повысит расход оперативной памяти и время загрузки модели.


Сообщение отредактировал Totoro: 30 Август 2015 - 14:58


#25 Оффлайн   CrazyGreen

CrazyGreen
  • Пользователи
  • Сообщений: 14
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Отправлено 30 Март 2016 - 14:52

Я не совсем понял, как загружать модели?



#26 Оффлайн   Totoro

Totoro
  • Автор темы
  • Хранители Кода
  • Сообщений: 1 740
  • Уровень сигнала: 0,27%
  • В игре: 2 час. 13 мин.

Награды

                                      

Отправлено 30 Март 2016 - 17:34

Я не совсем понял, как загружать модели?

 

Тебе надо залить файлик obj на жесткий OC-компьютера.

 

Если у тебя есть доступ к сейву - просто поищи папку с диском и скопируй файл туда.

Если ты играешь на сервере и доступа к сейву мира нет - залей модельку куда-нибудь в интернет, получи на нее прямую ссылку и скачай на OC-компьютер командой wget.


  • CrazyGreen это нравится

#27 Оффлайн   CrazyGreen

CrazyGreen
  • Пользователи
  • Сообщений: 14
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Отправлено 31 Март 2016 - 10:19

Тебе надо залить файлик obj на жесткий OC-компьютера.

 

Если у тебя есть доступ к сейву - просто поищи папку с диском и скопируй файл туда.

Если ты играешь на сервере и доступа к сейву мира нет - залей модельку куда-нибудь в интернет, получи на нее прямую ссылку и скачай на OC-компьютер командой wget.

Спасибо



#28 Оффлайн   Xytabich

Xytabich
  • Пользователи
  • Сообщений: 69
  • Уровень сигнала: 26,07%
  • В игре: 210 час. 48 мин.
  • ГородКазань

Награды

           

Отправлено 08 Октябрь 2016 - 00:41

Почти удалось сделать вертексное текстурирование(ну, в данном случае полигональное), но треугольники просвечивают если созданы позже тех, что перед ними :( Можно чисто теоретически отключать невидимые полигоны, но вот насчет производительности такой штуки остаются вопросы.

Любезно сп****в позаимствовав у разрабов MineOS библиотечку по чтению PNG, получилось нечто такое:
 

kJf6rTfIT4E.jpg

 

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

 

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

P.S.S. как менять размер изображения? :smile14:

 

Чуть не забыл, если кому интересно, вот код: 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)

Сообщение отредактировал Xytabich: 08 Октябрь 2016 - 10:47

  • Zer0Galaxy, Totoro, Fingercomp и 2 другим это нравится

#29 Оффлайн   Fingercomp

Fingercomp
  • Гуру
  • Сообщений: 2 006
  • Уровень сигнала: 158,17%
  • В игре: 1279 час. 4 мин.

Награды

                                               

Отправлено 08 Октябрь 2016 - 07:24

У разрабов MineOS ты ничего не воровал. Та либа написана вообще не им. Как и другие две.

 

Но результат зато красивый :)


  • qwertyMAN это нравится

#30 Оффлайн   Xytabich

Xytabich
  • Пользователи
  • Сообщений: 69
  • Уровень сигнала: 26,07%
  • В игре: 210 час. 48 мин.
  • ГородКазань

Награды

           

Отправлено 08 Октябрь 2016 - 10:48

Совсем забыл добавить описание, ну теперь есть оно :D

 

У разрабов MineOS ты ничего не воровал. Та либа написана вообще не им. Как и другие две.

 

Не знаю к сожалению, как называть тех кто создал, по этому как проще так и описал))


Сообщение отредактировал Xytabich: 08 Октябрь 2016 - 10:51






Темы с аналогичным тегами виртуальная реальность, модель, очки, opencomputers, openglasses, 3d, obj

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных