Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 3D-программирование

3D-программирование Вопросы, касающиеся программирования 3D мира

Ответ
 
Опции темы
Старый 27.01.2007, 22:56   #46
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений
(для 15,675 пользователей)
Стрелка Re: help B3D-anime

Цитирую себя:
Народ, а кто-нить знает, как сделать зависимость скорости проигрывания анимации от частоты кадров в секунду?
Цитирую Stalnoy_Gvozd':
Мне тоже ето весьма интересно
А я разобрался! Чтоб вы немучились, пишу как это сделать:
Кароче, вот мои рассуждения.
1. Измерить время от одного рендера до другого.
Сначала нуно узнать точное время (желательно Московское, но и системное время сойдёт) и чем точнее - тем лучше. Системный таймер измеряет время с точностью до 1 милисекунды, нам этого хватит. Создаём переменную, где будет указано в ремя ДО рендера:
Global: BeforeRender
И после рендера:
Global BeforeRender, AfterRender
И узнать их значения. Команду
BeforeRender = Millisecs()
пишем в цикле ДО команды
RenderWorld
А команду
AfterRender= Millisecs
после.
Потом вычисляем разницу:
Elapsed = AfterRender - BeforeRender
Эту команду пишем в цикле перед командой Untill
Да, кстати, переменную Elapsed нуно объявить в блоке переменных:
Global BeforeRender, AfterRender, Elapsed
После этого пишем саму программу. И теперь если нужно передвинуть объект, то мы пишем не число, а число*Elapsed:
If KeyDown(200) MoveEntity cub,0,0,0.1*Elapsed
If KeyDown(208) MoveEntity cub,0,0,-0.1*Elapsed
If KeyDown(203) MoveEntity cub,-0.1*Elapsed,0,0
If KeyDown(205) MoveEntity cub,0.1*Elapsed,0,0

Вот теперь работать буит на любой машине без глюков (даже если тормозит, то замедления не случится)
Кстати, с анимацией всё точно так же. Нужно умножать на Elapsed скорость проигрывания анимации
Привожу полный код проги:
Global BeforeRender, AfterRender, Elapsed
Graphics3D 1280,1024,32,1
BackBuffer()
light=CreateLight()
timer=CreateTimer(300)
;таймер-ограничитель fps. Число в скобках - максимальное fps.
;Здесь, в общем-то ограничитель не нужен,
;почему я его тут поставил читай ниже
cam=CreateCamera()
cub=CreateCube()
PositionEntity cub,0,-10,20
BOT=LoadAnimMesh("01.B3D")
ScaleEntity BOT,.05,.05,.05
PositionEntity BOT,0,1,20

LoadAnimSeq BOT,"01.B3D"
PointEntity cam,bot

Repeat
BeforeRender = MilliSecs()
If KeyDown(200) MoveEntity cub,0,0,0.05*Elapsed
If KeyDown(208) MoveEntity cub,0,0,-0.05*Elapsed
If KeyDown(203) MoveEntity cub,-0.05*Elapsed,0,0
If KeyDown(205) MoveEntity cub,0.05*Elapsed,0,0
If KeyDown(57) And AnimSeq=0 Animate BOT,1,.02*Elapsed,1,0
WaitTimer(timer) ; Процедура ограничения fps. Уберёшь эту команду -
;ограничения не буит.
UpdateWorld()
RenderWorld()
Font=LoadFont("Arial cyr",30,True)
SetFont(Font)
Color 0,255,0
Text 640,50,"Стрелки - управление кубиком",True,True
Text 640,75,"Пробел - начало анимации",True,True
Text 640,100,"Escape - выход",True,True
AfterRender = MilliSecs()
Flip 0
Elapsed = AfterRender - BeforeRender
Until KeyHit(1)

End


Я вставил ограничитель кадросекунд специально чтобы вы могли убедиться: работа программы не зависит от FPS, сами ставьте любые значения и проверяйте.
Вместо файла 01.b3d возьмите любой .b3d-шный файл, переименуйте в 01.b3d и закиньте в папку с прогой.
Хе-хе. Не так уж всё и сложно. Между прочим, я всё сам сделал и прописал, у знакомых на форуме тока команды спрашивал. Насчёт ограничения FPS. Ограничить - тоже вариант, но есть причины, по которым его не следует использовать:
1. Если машина мощная, то почему бы не использовать её потенчиал, делая столько fps, скоко этоа машина может выдавать. А если поставим ограничение в 30 кадров (хотя машина может выдать и 70), то пользователь не обрадуется да и самому неприятно.
2. Если же машина наоборот слишком слабая, то кол-во кадров в секунду упадёт и упадёт скорость работы самой игры (если мы можем поставить максимальное fps, то минимальное уже не ограничишь - не тянет машина и всё тут), так как скорость работы игры зависит от fps. Снижается fps => снижается скорость работы игры.
Надеюсь, понятно всё объяснил. А вот с моим стабилизатором при любом fps на любой машине работать будет с одинаковой скоростью. Почитай там код, разберёшься как модели свои вставлять и т.д.
И, чуть не забыл. Использовать ограничитель fps следует если вы делаете простенькую игрушку нетребовательную к ресурсам компа. (т.к. стабилизатор тормозит сильнее чем ограничитель). Поставишь ограничение в 30 кадров - и этого хватит чтоб сыгарть в простенькую аркаду. Для серьёзных проектов пользуйся ограничителем.

Хух.... Выложился на полную катушку. Кто тут админ? За хорошие, полные и досканальные ответы тут не полагается, скажем, звёздочек под аватаром или там смена статуса (Достал меня статус "Any Key'щик", хочу "АК-47")? Лана, я ж прикольнулся. (Но было бы приятно)
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**

* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена

(Offline)
 
Ответить с цитированием
Старый 27.01.2007, 23:36   #47
Черный крыс
 
Сообщений: n/a
Re: help B3D-anime

Способ который ты пытался реализовать - называется "Дэльта-тайминг"....причем, он у тебя весьма криво реализован.... - делается твоя билеберда двумя строчками....

dt#=(MilliSecs()-LastFrame)*0.4
LastFrame=MilliSecs()
Этим все сказано...
 
Ответить с цитированием
Старый 28.01.2007, 00:29   #48
Diplomat
Дэвелопер
 
Регистрация: 07.09.2005
Сообщений: 1,519
Написано 66 полезных сообщений
(для 164 пользователей)
Re: help B3D-anime

2 Diablo1909: Какой коефициент забавный: 0.4... А главное- жОсткая константа. Собственно, 0.4- это ответ на Главный Вопрос Вселенной, только почему он столь императивно закреплен в вышеприведенном коде?
Почему именно 0.4? Ведь "03"- звучит символичнее, а "0.5"- ближе сердцу русского человека...
(Offline)
 
Ответить с цитированием
Старый 28.01.2007, 01:00   #49
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений
(для 15,675 пользователей)
Подмигивание Re: help B3D-anime

Товарищ Диабало, вот у меня как раз всё хоть и длинне зато некоряво. У меня происходит тока одно вычисление в самом начале, а потом уже готовое значение подставляется куды нуно. А у тебя скоко раз используется значение это, стоко же раз и выполняется вычисление, хотя значение, по идее, одно.
Если кто-то скажет, что в этом я не прав, очень интересно послушать
Кстат, не тебя ли я встречал в форумах GamesAnatomy и если да, то не знаешь, что у них с сервером?
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**

* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена

(Offline)
 
Ответить с цитированием
Старый 28.01.2007, 09:18   #50
ЛысыЙ_Чук-Иванчук
Дэвелопер
 
Регистрация: 19.03.2006
Сообщений: 1,241
Написано 10 полезных сообщений
(для 17 пользователей)
Re: help B3D-anime

Кстат, не тебя ли я встречал в форумах GamesAnatomy и если да, то не знаешь, что у них с сервером?
Батарея села-Заряжают
(Offline)
 
Ответить с цитированием
Старый 28.01.2007, 09:24   #51
Stalnoy_Gvozd'
ПроЭктировщик
 
Регистрация: 30.09.2006
Сообщений: 141
Написано 3 полезных сообщений
(для 5 пользователей)
Re: help B3D-anime

Хех! Да ну? Честно говоря это я у жо давно сделал, но всё равно спасибо за просвещение еще не просвященных прохожих етой темы.
Я как раз таки объясняю
"...недавно решил сделать дельтатайминг, дык как толькотормоза спадают, и при этом уже была запущена какая либо анимация, эта самая анимация соответсно ускоряется..."

Проблема как-раз в Animate BOT,1,.02*Elapsed,1,0
если в первом кадре были тормоза, то к примеру Elapsed=10,
при етом если в следующем кадре вдруг фпс возросло, то Elapsed=1,
НО при етом анимация продолжает проигрываться как Animate BOT,1,.02*10,1,0

Вот это я и пытался сказать.
(Offline)
 
Ответить с цитированием
Старый 28.01.2007, 11:34   #52
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений
(для 15,675 пользователей)
Смущение Re: help B3D-anime

НО при етом анимация продолжает проигрываться как Animate BOT,1,.02*10,1,0
Ну енто уж извини, никак не исправишь. Да лана, такие скачки производительности очень редкие. Кстати насчёт корявости проги. Тут я немного ступил, моно обойтись без переменной AfterRender:
Global BeforeRender, Elapsed
Graphics3D 1280,1024,32,1
BackBuffer()
light=CreateLight()
timer=CreateTimer(300)
cam=CreateCamera()
cub=CreateCube()
PositionEntity cub,0,-10,20
BOT=LoadAnimMesh("01.B3D")
ScaleEntity BOT,.05,.05,.05
PositionEntity BOT,0,1,20

LoadAnimSeq BOT,"01.B3D"
PointEntity cam,bot

Repeat
BeforeRender = MilliSecs()
If KeyDown(200) MoveEntity cub,0,0,0.05*Elapsed
If KeyDown(208) MoveEntity cub,0,0,-0.05*Elapsed
If KeyDown(203) MoveEntity cub,-0.05*Elapsed,0,0
If KeyDown(205) MoveEntity cub,0.05*Elapsed,0,0
If KeyDown(57) And AnimSeq=0 Animate BOT,1,.02*Elapsed,1,0
WaitTimer(timer)
UpdateWorld()
RenderWorld()
Font=LoadFont("Arial cyr",30,True)
SetFont(Font)
Color 0,255,0
Text 640,50,"Стрелки - управление кубиком",True,True
Text 640,75,"Пробел - начало анимации",True,True
Text 640,100,"Escape - выход",True,True
Flip 0
Elapsed = Millisecs() - BeforeRender
Until KeyHit(1)

End
А так всё такое же. И вовсе некорявое
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**

* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена

(Offline)
 
Ответить с цитированием
Старый 28.01.2007, 13:16   #53
Stalnoy_Gvozd'
ПроЭктировщик
 
Регистрация: 30.09.2006
Сообщений: 141
Написано 3 полезных сообщений
(для 5 пользователей)
Re: help B3D-anime

А можно как нибудь показывать определенный кадр анимации вручную?
Допустим вывести кадр 12.5 и тп.
(Offline)
 
Ответить с цитированием
Старый 28.01.2007, 13:31   #54
Diplomat
Дэвелопер
 
Регистрация: 07.09.2005
Сообщений: 1,519
Написано 66 полезных сообщений
(для 164 пользователей)
Re: help B3D-anime

1. ABTOMAT : Во-первых, твоё виденье философской сути дельта-тайминга действительно несколько необычно и отдает трансцендентальной философией. Давай лучше оставаться в границах диалектики и не строить необоснованных теорий?

2. ABTOMAT : Во-вторых, код Diablo1909 используется как раз всего единожды за проход цикла (почему ты, решил, что может быть иначе?), и единственная его прямая ошибка, это нелепая константа "0.4".

3. Stalnoy_Gvozd' : Цитирую русскую версию Хелпа:
UpdateWorld [anim_speed#]
Параметры
anim_speed# (необязательно) - значение скорости анимации. По умолчанию равно 1.
Определение
Анимирует все объекты в мире, и производит проверку столкновений.
Необязательный параметр anim_speed# позволяет менять скорость анимации всех объектов сразу. Значение 1 это проигрывание анимаций с их настоящей скоростью, значение 2 анимирует объекты с удвоенной скоростью, и так далее.
Для лучшего результата эта команда должна вызываться один раз за цикл, перед вызовом команды RenderWorld.
P.S. Люди! Будьте бдительны! (с)
(Offline)
 
Ответить с цитированием
Старый 28.01.2007, 22:04   #55
Stalnoy_Gvozd'
ПроЭктировщик
 
Регистрация: 30.09.2006
Сообщений: 141
Написано 3 полезных сообщений
(для 5 пользователей)
Re: help B3D-anime

Неимоверное спасибо!
Далее бдю!
(Offline)
 
Ответить с цитированием
Старый 28.01.2007, 22:47   #56
ЛысыЙ_Чук-Иванчук
Дэвелопер
 
Регистрация: 19.03.2006
Сообщений: 1,241
Написано 10 полезных сообщений
(для 17 пользователей)
Re: help B3D-anime

Неимоверное спасибо!
Далее бдю!
ХМ, я думал то что написал Diplomat знают все
(Offline)
 
Ответить с цитированием
Старый 29.01.2007, 15:55   #57
Vyacheslav
ПроЭктировщик
 
Регистрация: 03.01.2007
Сообщений: 133
Написано одно полезное сообщение
(для 4 участников)
Re: help B3D-anime

Еще раз к вопросу об анимациях...
А как сделать следующее:
Например, у нас есть 3 анимации - .b3d файла

Итак:

pers\mesh=LoadAnimMesh("creature_stand.b3d")

pers\Body=FindChild(pers,"Body")

Animate pers\Body

А что, если надо еще анимационные последовательности, к примеру:

LoadAnimSeq (pers\mesh,"creature_move.b3d")
LoadAnimSeq (pers\mesh,"creature_attack.b3d")

Как проигровать pers\Body ? Ведь для него будет только одна анимационная последовательность...
Т.е. Animate pers\Body,1,1,1,10 уже не катит... А в любом случае нужно искать чайлды, а то только бипед не нуждается в этом.

Т.е как сделать, чтобы pers\Body=FindChild(pers,"Body") можно было использовать для проигрывания нескольких аним. последовательностей?
(Offline)
 
Ответить с цитированием
Старый 14.01.2010, 02:02   #58
Si-Jey
AnyKey`щик
 
Регистрация: 03.06.2009
Сообщений: 9
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: help B3D-anime

Привет всем, прочитал всю ветку-но так и не разобрался.
Имеется модель человека со скелетом (biped),открываю файл анимации(.bip) и модель начинает двигаться-все ОК.Но после экспорта в b3d(все галки поставлены) и ее анимации-анимируется лишь скелет,а модель стоит на месте-такое же наблюдается и в Preview Пипилайна анимируется только скелет модели.
Хелпа по Пипилайну нет.
Обьясните пожалуйста как заставить двигаться саму модель в блице?
Уже не стоит обьяснять,я разобрался-у меня привязка скелета к модели основано на модификаторе Physique,который Пипилайн не поддерживает.
Часть цитаты из экспортного окна:
"Skinned Meshes:
Skin, Max Bones and Biped are supported (NOT Physique)
Only bones referenced in the Skin modifier are exported
Blitz3d supports up to 256 bones per object
"

Последний раз редактировалось Si-Jey, 14.01.2010 в 03:10.
(Offline)
 
Ответить с цитированием
Старый 14.01.2010, 02:54   #59
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений
(для 15,675 пользователей)
Ответ: help B3D-anime

Обьясните пожалуйста как заставить двигаться саму модель в блице?
http://forum.boolean.name/showthread.php?t=7338
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**

* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена

(Offline)
 
Ответить с цитированием
Старый 30.01.2010, 18:59   #60
Darksoul
AnyKey`щик
 
Аватар для Darksoul
 
Регистрация: 30.01.2010
Сообщений: 4
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: help B3D-anime

Хочу возродить тему.
Прошу кирпичами не кидать!
Вопрос такой. У меня чувак сделаный в Максе, экспортирован через B3d pipelin в один фаил Меша, и несколько файлов анимации(run, walk, walkw, stand - чувак бежит, чувак идет, чувак идет с оружием, чувак стоит.)
Все согласно рекомендациям этого форума.
Однако ж при переключении анимации, возникают некоторые непонятности. После перехода с анимации "бега" на "стоит" руки персонажа, которые должны деражть оружие, кудато смещаются, в зависимости от момента переключения. Такое ощущение, что блитз запаминает позицию некоторых костей и переносит в следущую анимацию... Обьяснить трудно. прикрепляю проект, Посмотрите пожалуйста, может у кого есть соображения по этому поводу... Если проблемы с руками(моими), не ругайтесь, обьясните.
Вложения
Тип файла: rar anim-trabl.rar (715.6 Кб, 398 просмотров)
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Anime jimon Болтовня 65 27.01.2007 00:15


Часовой пояс GMT +4, время: 04:01.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com