forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Гусеница (http://forum.boolean.name/showthread.php?t=2412)

Fant 15.01.2007 13:36

Гусеница
 
У меня тут вопрос назрел! Хочу сделать гусеницу. Я ее даже сделал, но есть одно НО...она появляется из начальной точки, а хотелось бы что бы при старте программы, все элементы уже были на ходу. (то есть что бы она сразу появилась, а не постепенно, как в коде)

Код:

Graphics3D 640,480,16,2

Const UPS=60

Dim cube (12)

cam=CreateCamera()
PositionEntity cam ,10,5,-25

cube(0)=CreateCube()
HideEntity cube(0)


For  i = 1 To 12

cube(i) = CopyEntity(cube(0))


RotateEntity cube(i),0,0,0
PositionEntity cube(i),0,0,0
SetAnimKey cube(i),0

RotateEntity cube(i),0,0,0
PositionEntity cube(i),0,10,0
SetAnimKey cube(i),60

RotateEntity cube(i),0,0,0
PositionEntity cube(i),20,10,0
SetAnimKey cube(i),120

RotateEntity cube(i),0,0,0
PositionEntity cube(i),20,0,0
SetAnimKey cube(i),180

RotateEntity cube(i),0,0,0
PositionEntity cube(i),0,0,0
SetAnimKey cube(i),240


Next

For i=1 To 12
AddAnimSeq cube(i),240
Next


For i=1 To 12
Animate cube(i),1,1,0, 0+i*24
Next

l=CreateLight()

period=1000/UPS
time=MilliSecs()-period

Repeat
        Repeat
                elapsed=MilliSecs()-time
        Until elapsed
        ticks=elapsed/period
        tween#=Float(elapsed Mod period)/Float(period)
       
        For k=1 To ticks
                time=time+period

For i=1 To 12
Animate cube(i),1,1,1-AnimSeq(cube(I))
Next


                If KeyHit(1) End
                UpdateWorld       
        Next
       
        RenderWorld tween
        Flip

Forever


Fant 16.01.2007 15:20

Re: Гусеница
 
Если есть еще какой-нить будь примерно похожий на мой способ реализовать так гусеницу я только за)

Неужели никто не знает как это сделать?

Vyacheslav 16.01.2007 16:16

Re: Гусеница
 
Я пробовал сделать. По идее, это вполне возможно, но немного трудно в голове эту гусень представить =) а более того - реализовать. В Блице с key-ами туговато, не то что в nebula... Может можно как-то по-другому решить эту проблему - через готовые анимации или еще... что именно в результате требуется? Это будет игра и хочется невероятной продуктивности, или?

Diplomat 16.01.2007 16:18

Re: Гусеница
 
Полуофф:
Не восприми как навязывание мнения, но создание гусеницы [в смысле танковых траков?] из отдельных мешей- это неоптимальное решение в условно-стандартной ситуации. Иначе говоря, если вышеприведенный алгоритм с кубиками не является стилистически или техниески необходимым решением, то движущаяся гусеница с намного более высокой производительностью и, вероятно, реалистичностью, создается путем применения анимированной посредством PositionTexture текстуры траков на модели гусениц. А повторение гусеницей формы рельефа осуществляется путём управления сегментами гусеницы с помощью костей.

Fant 16.01.2007 16:20

Re: Гусеница
 
не понял я смысла слова "продуктивности"
Я знаю как НУЖНО делать гусеницу (подсказывали мне) но я хочу сденлать именно кубиками, которые крутятся вокруг оси! Посмотрю как-нить пример "небула" ?) У кого-нить еще есть варианты по этому поводу?

Fant 16.01.2007 16:22

Re: Гусеница
 
Цитата:

Сообщение от Diplomat
Полуофф:
Не восприми как навязывание мнения, но создание гусеницы [в смысле танковых траков?] из отдельных мешей- это неоптимальное решение в условно-стандартной ситуации. Иначе говоря, если вышеприведенный алгоритм с кубиками не является стилистически или техниески необходимым решением, то движущаяся гусеница с намного более высокой производительностью и, вероятно, реалистичностью, создается путем применения анимированной посредством PositionTexture текстуры траков на модели гусениц. А повторение гусеницей формы рельефа осуществляется путём управления сегментами гусеницы с помощью костей.

Такую теорию я уже слышал однажды. Не спорю - это лучший вариант, но хотелось бы именно таким извратом!
У вас случайно нет идеи как там можно....извратнуться?

Vyacheslav 16.01.2007 16:39

Re: Гусеница
 
Насчет nebula - не буду писать весь пример, потому как c exe-шником нужно париться, на это я столько времени не найду, а вот кратко, как в nebula это делается, могу сказать - это выглядит примерно так:

set start_time [/sys/servers/channel.getchannel1f "time"]

new n3dnode gus1
sel gus1
new nipol move
sel move
.setreptype "loop"
.connect txyz
.addkey3f 0 0 0 0
.addkey3f $start_time 0 0 0
.addkey3f [expr $start_time+0.5] 10 0 0
и т.д., т.е. создать необходимый список ключей с координатами
sel ..
sel ..

Я уже на nebula около 1Мб кода написал - в аркадных проектах (и в этом случае) - это отличное решение. Проблема в том, что нужно еще экзешник создавать, делать возможным использование D3D и OpenGL - хотя, разве это проблема ? - это в кое-каком роде расширенные возможности.

Fant 16.01.2007 16:47

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

Vyacheslav 16.01.2007 16:51

Re: Гусеница
 
Мне кажется, не сложнее чем в Blitz'е. Просто в nebula нужно сначала понастраивать кучу прог и т.д. - от С-студии до удобного текстового редактора. Зато потом как все легко идет! Можно в С-коде создать класс nGusenicanode, который будет иметь одинаковый свойства или через linknode - мне, например, это кажется проще, хотя, наверное, одновременно умертвляю образ "проще Блица не бывает нигде", к которому все привыкли :-)

Fant 16.01.2007 18:46

Re: Гусеница
 
Вообщем говоря более понятным языком. Как мне реализовать ЭТУ гусеницу?

Vyacheslav 16.01.2007 19:34

Re: Гусеница
 
Да, над этой задачей нужно посидеть, логически подумать. В цикле проигрывать уже не нужно - это раз. Задержку можно перед циклом поставить, подождать, чтобы немного проиграло :) , или что-то типа этого, только оптимизировать:

Код:


Graphics3D 640,480,16,2
Const UPS=60
Dim cube (12)
cam=CreateCamera()
PositionEntity cam ,10,5,-25
 
cube(1)=CreateCube()
PositionEntity cube(1),0,0,0
SetAnimKey cube(1),0
PositionEntity cube(1),0,10,0
SetAnimKey cube(1),60
PositionEntity cube(1),20,10,0
SetAnimKey cube(1),120
PositionEntity cube(1),20,0,0
SetAnimKey cube(1),180
PositionEntity cube(1),0,0,0
SetAnimKey cube(1),240
 
cube(2)=CreateCube()
PositionEntity cube(2),0,10,0
SetAnimKey cube(2),0
PositionEntity cube(2),20,10,0
SetAnimKey cube(2),60
PositionEntity cube(2),20,0,0
SetAnimKey cube(2),120
PositionEntity cube(2),0,0,0
SetAnimKey cube(2),180
PositionEntity cube(2),0,10,0
SetAnimKey cube(2),240
 
cube(3)=CreateCube()
PositionEntity cube(3),20,10,0
SetAnimKey cube(3),0
PositionEntity cube(3),20,0,0
SetAnimKey cube(3),60
PositionEntity cube(3),0,0,0
SetAnimKey cube(3),120
PositionEntity cube(3),0,10,0
SetAnimKey cube(3),180
PositionEntity cube(3),20,10,0
SetAnimKey cube(3),240
 
cube(4)=CreateCube()
PositionEntity cube(4),20,0,0
SetAnimKey cube(4),0
PositionEntity cube(4),0,0,0
SetAnimKey cube(4),60
PositionEntity cube(4),0,10,0
SetAnimKey cube(4),120
PositionEntity cube(4),20,10,0
SetAnimKey cube(4),180
PositionEntity cube(4),20,0,0
SetAnimKey cube(4),240
 
AddAnimSeq cube(1),240
AddAnimSeq cube(2),240
AddAnimSeq cube(3),240
AddAnimSeq cube(4),240
 
Animate cube(1)
Animate cube(2)
Animate cube(3)
Animate cube(4)
 
l=CreateLight()
period=1000/UPS
time=MilliSecs()-period
 
Repeat
Repeat
elapsed=MilliSecs()-time
Until elapsed
ticks=elapsed/period
tween#=Float(elapsed Mod period)/Float(period)
 
For k=1 To ticks
time=time+period
 
If KeyHit(1) End
UpdateWorld
Next
 
RenderWorld tween
Flip
Forever


HolyDel 17.01.2007 01:38

Re: Гусеница
 
хотите извращаться, пожалуйста. мну ничего лутчего чем придумал г-н Diplomat неизвестно. вот ваш пример:
Код:

Graphics3D 640,480,16,2

Const UPS=60

Dim cube (12)

cam=CreateCamera()
PositionEntity cam ,10,5,-25

cube(0)=CreateCube()
HideEntity cube(0)


For  i = 1 To 12

cube(i) = CopyEntity(cube(0))


RotateEntity cube(i),0,0,0
PositionEntity cube(i),0,0,0
SetAnimKey cube(i),0

RotateEntity cube(i),0,0,0
PositionEntity cube(i),0,10,0
SetAnimKey cube(i),60

RotateEntity cube(i),0,0,0
PositionEntity cube(i),20,10,0
SetAnimKey cube(i),120

RotateEntity cube(i),0,0,0
PositionEntity cube(i),20,0,0
SetAnimKey cube(i),180

RotateEntity cube(i),0,0,0
PositionEntity cube(i),0,0,0
SetAnimKey cube(i),240


Next

For i=1 To 12
AddAnimSeq cube(i),240
Next


For i=1 To 12
Animate cube(i),1,1,0, 0+i*24
Next

For i=1 To 500
        UpdateWorld
Next
l=CreateLight()

period=1000/UPS
time=MilliSecs()-period

Repeat
        Repeat
                elapsed=MilliSecs()-time
        Until elapsed
        ticks=elapsed/period
        tween#=Float(elapsed Mod period)/Float(period)
       
        For k=1 To ticks
                time=time+period

For i=1 To 12
Animate cube(i),1,1,1-AnimSeq(cube(I))
Next


                If KeyHit(1) End
                UpdateWorld       
        Next
       
        RenderWorld tween
        Flip

Forever

сражу скажу чо я изменил, просто поставил
Код:

For i=1 To 500
        UpdateWorld
Next

перед главным циклом. хто придумает более извращенный вариант?

Fant 17.01.2007 07:23

Re: Гусеница
 
2Vyacheslav ваш вариант интересный, хотя придется для каждого куба прописывать...
2HolyDel Так тоже можно сделать

НО

Есть две проблемки. Причем одна проблемка маленькая, а другая большая.

Первое - это как остановить эту анимацию, а потом продолжить желателно с того же места

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

Vyacheslav 17.01.2007 11:21

Re: Гусеница
 
2HolyDel: Интресеный вариант! Я только до обычной delay на тот момент додумался :) .

2Fant: Нужно определиться с тем, что нужно, а что будет лишним, потому как таким образом не получиться добавить ей управления и анимацию довольно сложно остановить, потому как придется дописывать новые кадры или прописывать анимацию заново. Немного поприкалывались с Блица, а теперь давайте попробуем сделать, кто функциональнее, а? Т.е. Fant напишите тех. задание, что нужно: ирушку типа гусеницы, какое управление и т.д.(?) И давайте померяемся силами - у кого она наиболее будет хорошо работать с наименьшим количеством строк кода, как? :super:

Diplomat 17.01.2007 12:35

Re: Гусеница
 
2 Vyacheslav :
Дальнейший флуд, являющийся по совместительству оффтопом- будет удаляться.
Если Вас интересует популяризация иных средств разработки- ставьте вопрос о создании соответствующего раздела перед администрацией.
Для доказательства своих тезисов о превосходстве по производительности и удобству, создавайте в Болтовне или Форумных Конкурсах соответствующую тему с содержанием вроде следующего:
"Вот мой тест производительности движка [встваить нужное название], использующего синтаксис языка программирования [встваить нужное название]. Всего N строк. На моей машине [подставить данные аппарата] выдает I FPS. Тест делает [описать работу] и использует [прикрепить к теме используемые ресурсы, ЕХЕ и исходники].
Пожалуйста, протестите у себя и, если возможно, постройте на используемом вами движке, в частности на Blitz3D, аналогичный тест для сравнения производительности.
Спасибо!"
А флудить- нинада. ;)


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot