Перейти к публикации
Форум - ComputerCraft
Totoro

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

Рекомендованные сообщения

Офигительно!

С меня лайк, как минимум =)

 

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

 

На самом деле это либа от TehSomeLuigi.

https://oc.cil.li/index.php?/topic/266-libpngimage-a-preliminary-library-for-decoding-encoding-png-images/

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@@Totoro, задумывал реализовывать анимацию?

Есть у меня идейка, как сделать это по производительнее, отталкиваться буду от текущей программы:

  1. Первым делом загружается основная модель(+ текстуры, если необходимо), при отрисовке треугольники добавляются в таблицу
  2. Методом addFrame(filename) добавляется новый кадр анимации в виде того же объекта, но с измененными координатами вершин. В методе идет поиск номеров измененных вершин и полигонов, которые затем заносятся в таблицу кадра.
  3. Методом setFrames(f1, f2) устанавливаются два кадра, между которыми будет вестись интерполяция, при этом заполняется таблица с начальным и конечным положением вершин модели
  4. Методом animate(t) идет интерполяция выбранных кадров, t=0-1

Примерно так

Изменено пользователем Xytabich

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@@Totoro, задумывал реализовывать анимацию?

 

Задумывал, да.

Я когда-то замышлял сделать что-то типа феи, которая за Линком летала.  :)

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

Но дальше задумок дело не пошло.

 

Если у тебя получится - будет здорово.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@@Totoro, интересная мысля слушай, яб хотел такую фею^^
вот только насчет того дойдут ли руки до анимации не знаю, весь энтузиазм спустил на текстурирование)) Хотя, если будет время и не изменит память, попробую реализовать задуманное

Изменено пользователем Xytabich

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@@Xytabich, текстурирование - это уже круто, я считаю. А там может и анимации какие всобачим.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А может и не угас ещё :)
В принципе по той логике что я описал вышел такой вот тентакль :D:

 

2ofLXcPgQ8w.jpgNZa7xiiVIb4.jpgMh14GdWanwA.jpg

 

 

К сожалению при лагах модель может сломаться на мгновение, что печально...

 

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

Изменено пользователем Xytabich

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Оно не закончено! Добавил анимацию и возможность поворота модели(немного баговано)

CCydAfakjig.jpg


 

Итак, функции:

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)

end

А теперь я пойду умирать :lazy2:


P.S. Totoro, теперь пили фею, и мне не забудь скинуть :D

Изменено пользователем Xytabich
  • Like 3

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

P.S. Totoro, теперь пили фею, и мне не забудь скинуть :D

 

Сэр, моё воспитание не позволяет мне пилить таких кавайных существ. :P

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Сэр, моё воспитание не позволяет мне пилить таких кавайных существ. :P

 

Зато мне позволит *ньяхаха*

жаль на скайтече нет чатбокса, даже не знаю как управлять ею

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×