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=5311)

AndruXa 15.12.2007 21:58

Грузить модели по ходу игры
 
Появилась вот у меня "больная идея" - грузить модели по ходу игры, тоесть реализовывать например смену оружия.:-D Знаю, вам смешно, а вопсчем-то почему-бы и нет. Я пробовал делать такое чудо с текстурами, все работает на ура, поди и с 3д прокатит. Сделать это я планирую так:
Global aa
Global Gun = loadmesh(aa)
Цикл:
if keyhit(2) then aa="mech1.b3d"
if keyhit(3) then aa="mech2.b3d"
Вроде правильно все, а не работает, ошибку выдает... эту, ну которая Memmory...

ABTOMAT 15.12.2007 22:24

Re: Грузить модели по ходу игры
 
Блин, ну вот крутанёшь колёсико, и на долю секунды тормоз. Крайне неприятно, сособенно когда много оружия надо прокрутить.

Данил 15.12.2007 22:28

Re: Грузить модели по ходу игры
 
Цитата:

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

эти "маленькие" задержки.. бррр...
зло...

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

Bagration 15.12.2007 22:28

Re: Грузить модели по ходу игры
 
Цитата:

Сообщение от AndruXa
Появилась вот у меня "больная идея" - грузить модели по ходу игры, тоесть реализовывать например смену оружия.:-D Знаю, вам смешно, а вопсчем-то почему-бы и нет. Я пробовал делать такое чудо с текстурами, все работает на ура, поди и с 3д прокатит. Сделать это я планирую так:
Global aa
Global Gun = loadmesh(aa)
Цикл:
if keyhit(2) then aa="mech1.b3d"
if keyhit(3) then aa="mech2.b3d"
Вроде правильно все, а не работает, ошибку выдает... эту, ну которая Memmory...

Мдяя, ну и способ. :4to: Не легче ли грузить медиа по уровням. Я лично так делаю: создаю глобалку с названием обьекта, но не гружу его, а потом создаю функцию где происходит загрузка. И когда надо ее вызываю. Тока ВНИМАНИЕ! Вызывать загрузку надо ВНЕ главного цикла или что бы вызывалась в цикле но один раз, скажем после определенного флага.

ЛысыЙ_Чук-Иванчук 15.12.2007 22:34

Re: Грузить модели по ходу игры
 
Цитата:

Сообщение от AndruXa
Появилась вот у меня "больная идея" - грузить модели по ходу игры, тоесть реализовывать например смену оружия.:-D Знаю, вам смешно, а вопсчем-то почему-бы и нет. Я пробовал делать такое чудо с текстурами, все работает на ура, поди и с 3д прокатит. Сделать это я планирую так:
Global aa
Global Gun = loadmesh(aa)
Цикл:
if keyhit(2) then aa="mech1.b3d"
if keyhit(3) then aa="mech2.b3d"
Вроде правильно все, а не работает, ошибку выдает... эту, ну которая Memmory...

Global aa$= "Pyk_1.b3d"
Global Gun = loadmesh(aa)


If KeyHit(2) LoadPyk("Pyk_1.b3d")
If KeyHit(3) LoadPyk("Pyk_2.b3d")



Function LoadPyk(name_pyk$)
If name_pyk<> aa
FreeEntity Gun
Gun= LoadMesh(name_pyk)
aa= name_pyk
endif
end Function

:)

AndruXa 15.12.2007 22:35

Цитата:

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

Цитата:

Global aa$= "Pyk_1.b3d"
Global Gun = loadmesh(aa)


If KeyHit(2) LoadPyk("Pyk_1.b3d")
If KeyHit(3) LoadPyk("Pyk_2.b3d")



Function LoadPyk(name_pyk$)
If name_pyk<> aa
FreeEntity Gun
Gun= LoadMesh(name_pyk)
aa= name_pyk
endif
end Function
А вот ето спасибо, все вроде понял, а можешьеще объяснить почему как я написал не работает с моделями, а с текстурами все окей

jimon 15.12.2007 22:38

Re: Грузить модели по ходу игры
 
ну у меня в игре (в jAqua) зделана опциональная
динамическая подгрузка ресурсов, если ресурс вызывается
то он загружается, если не юзается - сам выгружается
тоесть реально в памяти висит 10% картинок

ничего особенного в етой системе не вижу
как же тогда в играх делается загрузка уровней ;)

ЛысыЙ_Чук-Иванчук 16.12.2007 00:53

Re: Грузить модели по ходу игры
 
2 Jimon- Думаю над этип иму пока рано дуать- главно чтобы удолять не забывал;)!

kortesfil 16.12.2007 08:51

Re: Грузить модели по ходу игры
 
Действительно зачем грузить модели по ходу игры, не понимаю.

johnk 16.12.2007 12:02

Re: Грузить модели по ходу игры
 
Идея, в принципе, не больная, но только не для такого случая. Но на блице подгрузку лучше не использовать.

H@NON 16.12.2007 12:13

Re: Грузить модели по ходу игры
 
А вот есть какой-нить способ использовать второй канал для подгрузки?, ну знаете наверное как в ГТА, пока чел перемещается по городу, то ресурсы параллельно грузяться не тормозя процесс игры. Может как-нить через сторонние длл реализуется и вообще это возможно сделать для блитца с его ДиректИксом 7?

ЗыЖ особо не ругайте, просто заинтересовал вопрос.

moka 16.12.2007 12:16

Re: Грузить модели по ходу игры
 
H@NON, это называеться грузить отдельным потоком. Хм, вроде были какие-то либы по этому поводу.

johnk 16.12.2007 12:31

Re: Грузить модели по ходу игры
 
Цитата:

Может как-нить через сторонние длл реализуется и вообще это возможно сделать для блитца с его ДиректИксом 7?
Тупо создаешь еще один поток. Вот подключить как такое блицу - не понятно. Написание либы, создающей поток, чтоб управление блицу еще и отдавалось - возможно, но не избежать многочисленных МАВов. Или у меня просто опыта мало :-[

HolyDel 16.12.2007 13:32

Re: Грузить модели по ходу игры
 
В вартиче юниты грузятся по мере надобности.
еслибы я сразу грузил, скажем 300 юнитов, 80% из которых даже в игре учавствовать не будут, то ето, думаю, вызвало бы массу негативных эммоций.
Кстати, юниты не выгружаются на следующую карту, поетому грузить уже меньше приходится.

avel 14.01.2008 23:07

Ответ: Грузить модели по ходу игры
 
Цитата:

Появилась вот у меня "больная идея" - грузить модели по ходу игры...
эээээээ... а нафиг? о_0
нет, если это уровень, или там, юниты, как у HolyDel'а то да - это разумно. но для смены оружия - ИМХО бред.

FDsagizi 14.01.2008 23:21

Ответ: Грузить модели по ходу игры
 
грузить модели по ходу нормальное дело.
в Блиц3Д нельзя грузить объект через отдельный поток(это не излечимо)

ЗЫ\ на опыте проверял, 60к грузяться и глазом не успеешь моргнуть. но тут дело не в моделях(на счет анимации невкурсе) а текстурах, при таком методе нада обязательно юзать ДДС, да и вообще его нада обязательно юзать!

IGR 14.01.2008 23:48

Ответ: Грузить модели по ходу игры
 
avel +1
Андрюха, на этом сильно не с экономиш !! ;)

FrankH 15.01.2008 00:28

Ответ: Грузить модели по ходу игры
 
ДДС - отстой, портит качество и слабо жмет пустоты..

Halk-DS 16.01.2008 03:22

Ответ: Грузить модели по ходу игры
 
А чё такое ДДС
А как пишется тег ОФФТОПА на форуме ???

Raiter 16.01.2008 04:10

Ответ: Грузить модели по ходу игры
 
Цитата:

А чё такое ДДС
.DDS - свободный к использованию графический формат. В основном заточен под DX. Под OpenGL юзать без специального загрузчика не выйдет. Формат поддерживает 1D,2D,3D, CubeMap текстуры, компрессию DXT, MipMap уровни.

Цитата:

А как пишется тег ОФФТОПА на форуме ???
Вот так: [ offtop] [ /offtop]. Только без пробелов ;)

avel 16.01.2008 07:49

Ответ: Грузить модели по ходу игры
 
Raiter я с ддс форматом, вроде, знаком, но строчку
Цитата:

Формат поддерживает 1D,2D,3D
чего-то непонял... поясни.

johnk 16.01.2008 08:45

Ответ: Грузить модели по ходу игры
 
Это была цитата. Тут имелось в виду уже дальнейшее разделение для задачи. 3Д - имелось в виду, что в качестве текстуры для модели, 2Д - рисунок, а 1Д - используется в шейдерах.

jimon 16.01.2008 09:13

Ответ: Грузить модели по ходу игры
 
Цитата:

Сам DDS НЕ МОЖЕТ влиять на качество картинки ВООБЩЕ, т.к. это формат хранения изображения в некотором формате. Звучит хитро, но на самом деле все просто - само изображение может быть в форматах RGB, RGBA, DXT1 и т.д., но "контейнер" в виде DDS для всех один.
По качеству может бить те же DXTn, а не DDS, но и JPG сжимает не без ухудшения картинки, т.к. тоже относится к методам сжатия с потерями. К тому же, декомпрессится DXTn быстрее JPG (хотя бы потому, что это делает сама видеокарта при семплинге), да и видео памяти занимает меньше (все потому же, что понимается видеокартой).
если руки кривые то все остальное читаем там же
http://www.gamedev.ru/code/forum/?id=16880

HolyDel 16.01.2008 10:44

Ответ: Грузить модели по ходу игры
 
текстура может быть одномерной, двумерной, трехмерной а такэе кубемапой.
народ, юзайте dds, его не зря придумали.
+ возможность нарисовать каждый уровень мипмапа, тоже очень полезно может быть.
+ экономится видеопамять.
+ вариант с одним битом на альфу очень хорош для всяких маск.

короче - сплошные плюсы, минус - у меня ну очень долго сохраняет фотошоп dds рисунок.

FDsagizi 16.01.2008 15:30

Ответ: Грузить модели по ходу игры
 
Цитата:

Сообщение от HolyDel (Сообщение 74505)
минус - у меня ну очень долго сохраняет фотошоп dds рисунок.

Самый большой минус это размер, но от того что его размер больше к пример jpg в 3-8 раз, скорость загрузкий больше раз в 10-20.

jimon 16.01.2008 23:43

Ответ: Грузить модели по ходу игры
 
FDsagizi
загрузка быстрее ... потому что сразу заганяется в видеокарту
а так надо пережимать в тот же dxt

Genius 17.01.2008 23:58

Re: Грузить модели по ходу игры
 
Вот выкладываю свой код смены и т.д оружия!

Код:

Graphics3D 800,600,32,2
SetBuffer BackBuffer()
Type Shot
Field alpha#,num
End Type
;камера
cam=CreateCamera ()

;Пистолет МАКАРОВА
gun1=LoadAnimMesh("weapons\pm\model.b3d")
PositionEntity gun1,0,-10,0
ScaleEntity gun1,.5,.5,.5
RotateEntity gun1,-90,0,-180
LoadAnimSeq gun1, "weapons\pm\idle.b3d"
LoadAnimSeq gun1, "weapons\pm\shot.b3d"
LoadAnimSeq gun1, "weapons\pm\reload.b3d"
Animate gun1, 1,.3, 1
EntityParent gun1,cam
;Пистолет КОЛЬТ
gun2=LoadAnimMesh("weapons\colt\model.b3d")
PositionEntity gun2,0,-10,0
ScaleEntity gun2,.5,.5,.5
RotateEntity gun2,-90,0,-180
LoadAnimSeq gun2, "weapons\colt\idle.b3d"
LoadAnimSeq gun2, "weapons\colt\shot.b3d"
LoadAnimSeq gun2, "weapons\colt\reload.b3d"
Animate gun2, 1,.3, 1
EntityParent gun2,cam
;AK 47
gun3=LoadAnimMesh("weapons\ak74\model.b3d")
PositionEntity gun3,0,-10,0
ScaleEntity gun3,.5,.5,.5
RotateEntity gun3,-90,0,-180
LoadAnimSeq gun3, "weapons\ak74\idle.b3d"
LoadAnimSeq gun3, "weapons\ak74\shot.b3d"
LoadAnimSeq gun3, "weapons\ak74\reload.b3d"
Animate gun3, 1,.3, 1
HideEntity gun3
HideEntity gun3
HideEntity gun3
EntityParent gun3,cam
;Наличие оруий у игрока
gun1_pickup=1
gun2_pickup=1
gun3_pickup=1
;каоличество патронов у оружий
gun1_patron=42
gun2_patron=20
gun3_patron=96
;Патронов в обойме у оружий
gun1_magazin=12
gun2_magazin=8
gun3_magazin=30
;звуки
pistol_shot=LoadSound("shot.ogg")
reload=LoadSound("reload.ogg")
;необходимая переменная
relaod_delay_gun1=0
relaod_delay_gun2=0
relaod_delay_gun3=0
;ВЫбранное оружие
gun_select=1
While Not KeyHit(1)
MHIT=MouseHit(1)
RELOAD_KEY=KeyHit(19)
MDOWN=MouseDown(1)
;апдейт огонька
For s.shot =Each shot
s\alpha#=s\alpha#=-.001
EntityAlpha s\num,s\alpha#
If s\alpha#=<0 Then
FreeEntity s\num :Delete s
EndIf
Next
;Востановление анимации дыхания!!!
If relaod_delay_gun1=0 And relaod_delay_gun2=0 And relaod_delay_gun3=0  Then player_dblxanie=player_dblxanie+1
If player_dblxanie=>200 Then player_dblxanie=1
If player_dblxanie=190 Then Animate gun1, 1,.3, 1
If player_dblxanie=190 Then Animate gun2, 1,.3, 1
If player_dblxanie=190 Then Animate gun3, 1,.3, 1
If relaod_delay_gun1>0 Then relaod_delay_gun1=relaod_delay_gun1-1
If relaod_delay_gun2>0 Then relaod_delay_gun2=relaod_delay_gun2-1
If relaod_delay_gun3>0 Then relaod_delay_gun3=relaod_delay_gun3-1
;АПДЕЙТ ПИСТОЛЕТА(GUN1)//////////////////////////////
;перезарядка пистолета
If gun_select=1 And gun1_patron>0 And gun1_magazin=0 And RELOAD_KEY=1 And gun1_pickup=1 Then
If gun1_patron>12 Then  gun1_magazin=12
If gun1_patron<12 Then
 gun1_magazin=gun1_patron
 gun1_patron=0
 EndIf
 PlaySound reload
 Animate gun1, 3,.65,3
relaod_delay_gun1=140
EndIf
;стрельба из пистолета
If gun_select=1 And MHIT=1 And gun1_magazin>0  And gun1_pickup=1 And relaod_delay_gun1=0  Then
If gun1_patron>0 Then gun1_patron=gun1_patron-1
gun1_magazin=gun1_magazin-1
PlaySound  pistol_shot
Animate gun1, 3,1, 2
;огонек у писотлета
s.shot = New shot
s\num=LoadSprite ("shot.jpg",1)
PositionEntity s\num,-12,-20,88
ScaleSprite  s\num,20,20
RotateSprite s\num,Rnd(360)
s\alpha#=.6
EndIf
;АПДЕЙТ ПИСТОЛЕТА(GUN1)//////////////////////////////
;АПДЕЙТ ПИСТОЛЕТА(GUN2)//////////////////////////////
;перезарядка пистолета
If gun_select=2 And gun2_patron>0 And gun2_magazin=0 And RELOAD_KEY=1 And gun2_pickup=1 Then
If gun2_patron>8 Then  gun2_magazin=8
If gun2_patron<8 Then
 gun2_magazin=gun2_patron
 gun2_patron=0
 EndIf
 PlaySound reload
 Animate gun2, 3,.65,3
relaod_delay_gun2=110
EndIf
;стрельба из пистолета
If gun_select=2 And MHIT=1 And gun2_magazin>0  And gun2_pickup=1 And relaod_delay_gun2=0  Then
If gun2_patron>0 Then gun2_patron=gun2_patron-1
gun2_magazin=gun2_magazin-1
PlaySound  pistol_shot
Animate gun2, 3,1, 2
;огонек у писотлета
s.shot = New shot
s\num=LoadSprite ("shot.jpg",1)
PositionEntity s\num,-12,-20,88
ScaleSprite  s\num,20,20
RotateSprite s\num,Rnd(360)
EntityParent s\num,cam
s\alpha#=.6
EndIf
;АПДЕЙТ ПИСТОЛЕТА(GUN2)//////////////////////////////
;АПДЕЙТ АВТОМАТА(GUN3)//////////////////////////////
;ZOOM(ПРИКОЛ)!!!!!
gun3_zoom=0
gun3_zoom=MouseDown(2)
If gun_select=3 And gun3_zoom=1 Then PositionEntity gun3,5.5,-.25,-11
If gun_select=3 And gun3_zoom=0 Then PositionEntity gun3,0,-10,0
;необходимо для звука(чтоб не зациклевался)
GUN3_LOOPSOUND=GUN3_LOOPSOUND+1
If GUN3_LOOPSOUND>8 Then GUN3_LOOPSOUND=1
;перезарядка автомата
If gun_select=3 And gun3_patron>0 And gun3_magazin=0 And RELOAD_KEY=1 And gun3_pickup=1 Then
If gun3_patron>30 Then  gun3_magazin=30
If gun3_patron<30 Then
 gun3_magazin=gun3_patron
 gun3_patron=0
 EndIf
 PlaySound reload
 Animate gun3, 3,.55,3
relaod_delay_gun3=190
EndIf
;стрельба из автомата
If gun_select=3 And MDOWN=1 And GUN3_LOOPSOUND=1 And  gun3_magazin>0  And gun3_pickup=1 And relaod_delay_gun3=0  Then
If gun3_patron>0 Then gun3_patron=gun3_patron-1
gun3_magazin=gun3_magazin-1
PlaySound  pistol_shot
Animate gun3, 3,1, 2
;огонек у автомата
s.shot = New shot
s\num=LoadSprite ("shot.jpg",1)
PositionEntity s\num,-7,-19,88
ScaleSprite  s\num,30,30
RotateSprite s\num,Rnd(360)
EntityParent s\num,cam
s\alpha#=.6
EndIf
;АПДЕЙТ АВТОМАТА(GUN3)//////////////////////////////
 

;Смена оружий
If gun_select=1  And gun1_pickup=1 Then
ShowEntity gun1
HideEntity gun2
HideEntity gun3
EndIf
If gun_select=2And gun2_pickup=1 Then
ShowEntity gun2
HideEntity gun1
HideEntity gun3
EndIf
If gun_select=3And gun3_pickup=1 Then
ShowEntity gun3
HideEntity gun1
HideEntity gun2
EndIf
If KeyHit(2)=1 Then gun_select=1
If KeyHit(3)=1 Then gun_select=2
If KeyHit(4)=1 Then gun_select=3

If KeyDown( 205 )=True Then TurnEntity cam,0,-1,0
If KeyDown( 203 )=True Then TurnEntity cam,0,1,0
If KeyDown( 208 )=True Then MoveEntity cam,0,0,-0.05
If KeyDown( 200 )=True Then MoveEntity cam,0,0,0.05
 

UpdateWorld
RenderWorld

;ТЕКСТ
If gun_select=1 Then  Text 10,500,"выбранное оружие: МАКАРОВ"
If gun_select=1 Then
Text 10,530,"патронов:"+gun1_magazin+"/"+gun1_patron
EndIf
If gun_select=2 Then  Text 10,500,"выбранное оружие: КОЛЬТ"
If gun_select=2 Then
Text 10,530,"патронов:"+gun2_magazin+"/"+gun2_patron
EndIf
If gun_select=3 Then  Text 10,500,"выбранное оружие: КАЛАШ"
If gun_select=3 Then
Text 10,530,"патронов:"+gun3_magazin+"/"+gun3_patron
EndIf
Text 270,260,"Weapon module special for project  -  ЗОНА ОТЧУЖДЕНИЯ"
Flip
Wend



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

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