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

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

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

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

Ответ
 
Опции темы
Старый 15.01.2007, 13:36   #1
Fant
Бывалый
 
Регистрация: 05.09.2005
Сообщений: 623
Написано 4 полезных сообщений
(для 5 пользователей)
Гусеница

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

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
(Offline)
 
Ответить с цитированием
Старый 16.01.2007, 15:20   #2
Fant
Бывалый
 
Регистрация: 05.09.2005
Сообщений: 623
Написано 4 полезных сообщений
(для 5 пользователей)
Re: Гусеница

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

Неужели никто не знает как это сделать?
(Offline)
 
Ответить с цитированием
Старый 16.01.2007, 16:16   #3
Vyacheslav
ПроЭктировщик
 
Регистрация: 03.01.2007
Сообщений: 133
Написано одно полезное сообщение
(для 4 участников)
Re: Гусеница

Я пробовал сделать. По идее, это вполне возможно, но немного трудно в голове эту гусень представить =) а более того - реализовать. В Блице с key-ами туговато, не то что в nebula... Может можно как-то по-другому решить эту проблему - через готовые анимации или еще... что именно в результате требуется? Это будет игра и хочется невероятной продуктивности, или?
(Offline)
 
Ответить с цитированием
Старый 16.01.2007, 16:18   #4
Diplomat
Дэвелопер
 
Регистрация: 07.09.2005
Сообщений: 1,519
Написано 66 полезных сообщений
(для 164 пользователей)
Re: Гусеница

Полуофф:
Не восприми как навязывание мнения, но создание гусеницы [в смысле танковых траков?] из отдельных мешей- это неоптимальное решение в условно-стандартной ситуации. Иначе говоря, если вышеприведенный алгоритм с кубиками не является стилистически или техниески необходимым решением, то движущаяся гусеница с намного более высокой производительностью и, вероятно, реалистичностью, создается путем применения анимированной посредством PositionTexture текстуры траков на модели гусениц. А повторение гусеницей формы рельефа осуществляется путём управления сегментами гусеницы с помощью костей.
(Offline)
 
Ответить с цитированием
Старый 16.01.2007, 16:20   #5
Fant
Бывалый
 
Регистрация: 05.09.2005
Сообщений: 623
Написано 4 полезных сообщений
(для 5 пользователей)
Re: Гусеница

не понял я смысла слова "продуктивности"
Я знаю как НУЖНО делать гусеницу (подсказывали мне) но я хочу сденлать именно кубиками, которые крутятся вокруг оси! Посмотрю как-нить пример "небула" ?) У кого-нить еще есть варианты по этому поводу?
(Offline)
 
Ответить с цитированием
Старый 16.01.2007, 16:22   #6
Fant
Бывалый
 
Регистрация: 05.09.2005
Сообщений: 623
Написано 4 полезных сообщений
(для 5 пользователей)
Re: Гусеница

Сообщение от Diplomat
Полуофф:
Не восприми как навязывание мнения, но создание гусеницы [в смысле танковых траков?] из отдельных мешей- это неоптимальное решение в условно-стандартной ситуации. Иначе говоря, если вышеприведенный алгоритм с кубиками не является стилистически или техниески необходимым решением, то движущаяся гусеница с намного более высокой производительностью и, вероятно, реалистичностью, создается путем применения анимированной посредством PositionTexture текстуры траков на модели гусениц. А повторение гусеницей формы рельефа осуществляется путём управления сегментами гусеницы с помощью костей.
Такую теорию я уже слышал однажды. Не спорю - это лучший вариант, но хотелось бы именно таким извратом!
У вас случайно нет идеи как там можно....извратнуться?
(Offline)
 
Ответить с цитированием
Старый 16.01.2007, 16:39   #7
Vyacheslav
ПроЭктировщик
 
Регистрация: 03.01.2007
Сообщений: 133
Написано одно полезное сообщение
(для 4 участников)
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 - хотя, разве это проблема ? - это в кое-каком роде расширенные возможности.
(Offline)
 
Ответить с цитированием
Старый 16.01.2007, 16:47   #8
Fant
Бывалый
 
Регистрация: 05.09.2005
Сообщений: 623
Написано 4 полезных сообщений
(для 5 пользователей)
Re: Гусеница

да у меня исходник небулы есть, но думаю, что это неоправданно сложный вариант реализации
(Offline)
 
Ответить с цитированием
Старый 16.01.2007, 16:51   #9
Vyacheslav
ПроЭктировщик
 
Регистрация: 03.01.2007
Сообщений: 133
Написано одно полезное сообщение
(для 4 участников)
Re: Гусеница

Мне кажется, не сложнее чем в Blitz'е. Просто в nebula нужно сначала понастраивать кучу прог и т.д. - от С-студии до удобного текстового редактора. Зато потом как все легко идет! Можно в С-коде создать класс nGusenicanode, который будет иметь одинаковый свойства или через linknode - мне, например, это кажется проще, хотя, наверное, одновременно умертвляю образ "проще Блица не бывает нигде", к которому все привыкли
(Offline)
 
Ответить с цитированием
Старый 16.01.2007, 18:46   #10
Fant
Бывалый
 
Регистрация: 05.09.2005
Сообщений: 623
Написано 4 полезных сообщений
(для 5 пользователей)
Re: Гусеница

Вообщем говоря более понятным языком. Как мне реализовать ЭТУ гусеницу?
(Offline)
 
Ответить с цитированием
Старый 16.01.2007, 19:34   #11
Vyacheslav
ПроЭктировщик
 
Регистрация: 03.01.2007
Сообщений: 133
Написано одно полезное сообщение
(для 4 участников)
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
(Offline)
 
Ответить с цитированием
Старый 17.01.2007, 01:38   #12
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
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
перед главным циклом. хто придумает более извращенный вариант?
(Offline)
 
Ответить с цитированием
Старый 17.01.2007, 07:23   #13
Fant
Бывалый
 
Регистрация: 05.09.2005
Сообщений: 623
Написано 4 полезных сообщений
(для 5 пользователей)
Re: Гусеница

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

НО

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

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

А второе, что по моему мнению не реально сделать, так это сместить кубики. Ведь что делать если юзер захочет "поехать", то получается нужно смещать эту гусеницу, а тут она стоит на месте и не двигается (
(Offline)
 
Ответить с цитированием
Старый 17.01.2007, 11:21   #14
Vyacheslav
ПроЭктировщик
 
Регистрация: 03.01.2007
Сообщений: 133
Написано одно полезное сообщение
(для 4 участников)
Re: Гусеница

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

2Fant: Нужно определиться с тем, что нужно, а что будет лишним, потому как таким образом не получиться добавить ей управления и анимацию довольно сложно остановить, потому как придется дописывать новые кадры или прописывать анимацию заново. Немного поприкалывались с Блица, а теперь давайте попробуем сделать, кто функциональнее, а? Т.е. Fant напишите тех. задание, что нужно: ирушку типа гусеницы, какое управление и т.д.(?) И давайте померяемся силами - у кого она наиболее будет хорошо работать с наименьшим количеством строк кода, как?
(Offline)
 
Ответить с цитированием
Старый 17.01.2007, 12:35   #15
Diplomat
Дэвелопер
 
Регистрация: 07.09.2005
Сообщений: 1,519
Написано 66 полезных сообщений
(для 164 пользователей)
Re: Гусеница

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


Опции темы

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

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


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


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