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

neoleg 14.06.2007 16:52

Помогите приделать физику к автомобилю
 
Здравствуйте - учитываю то что мой стаж всего 4 дня (а если посчитать в часах то часов 25) самостоятельно прикрутить физику к автомобилю я не могу поэтому прошу помощи! Я нашёл на одном из порталов по блитцу физику для автомобиля:

Код:

; Simple car physics by Jeppe Nielsen 2003
Const gravity#=-0.01 ;gravity constant
Graphics3D 640,480,16,2
Const car_col=1
Const world_col=2
Collisions car_col,world_col,2,2
light=CreateLight(1)
RotateEntity light,30,20,0
plane=CreatePlane()
EntityType plane,world_col
EntityColor plane,255,0,0
For n=1 To 100
If Rnd(10)<5
sphere=CreateSphere(16)
Else
sphere=CreateCube()
EndIf
EntityType sphere,world_col
PositionEntity sphere,Rnd(-40,40),Rnd(2),Rnd(-40,40)
EntityColor sphere,Rnd(255),Rnd(255),Rnd(255)
Next
sp=CreateSphere()
ScaleEntity sp,100,100,100
FlipMesh sp
camera=CreateCamera()
CameraClsColor camera,0,0,255
car.car=carnew(0,5,0)
Repeat
TFormPoint 0,3,-5,car\e,0
dx#=(TFormedX()-EntityX(camera))*.1
dy#=(TFormedY()-EntityY(camera))*.1
dz#=(TFormedZ()-EntityZ(camera))*.1
TranslateEntity camera,dx,dy,dz
PointEntity camera,car\e
carcontrol()
carupdate()
RenderWorld()
Flip
Until KeyDown(1)
End
Type car
Field e ;entity
Field x#,y#,z# ; position in 3d-space
Field vx#,vy#,vz# ; velocity
Field ax#,ay#,az# ; acceleration
End Type
Function carnew.car(x#,y#,z#)
        c.car=New car
        c\x#=x#
        c\y#=y#
        c\z#=z#
        c\e=CreateCube()
        cube=CreateCube()
        ScaleEntity cube,0.3,0.3,0.3
        PositionEntity cube,0,0,1
        EntityParent cube,c\e
        EntityType c\e,car_col
        EntityRadius c\e,1
        PositionEntity c\e,c\x,c\y,c\z
        Return c
End Function
Function carupdate()
        For c.car=Each car
                c\vy#=c\vy#+gravity#
                c\vx#=c\vx#+c\ax#
                c\vy#=c\vy#+c\ay#
                c\vz#=c\vz#+c\az#
                c\x#=EntityX(c\e)
                c\y#=EntityY(c\e)
                c\z#=EntityZ(c\e)
                TranslateEntity c\e,c\vx,c\vy,c\vz
        Next
        UpdateWorld()
        For c.car=Each car
                ;correct velocity if collided
                c\vx=(EntityX(c\e)-c\x)
                c\vy=(EntityY(c\e)-c\y)
                c\vz=(EntityZ(c\e)-c\z)
                ;slow down due to friction
                If EntityCollided(c\e,world_col)       
                        c\vx#=c\vx*0.98
                        c\vy#=c\vy*0.98
                        c\vz#=c\vz*0.98
                EndIf
                c\ax#=0
                c\ay#=0
                c\az#=0       
        Next
End Function
Function carcontrol()
        For c.car=Each car
                If KeyDown(200)
                        TFormVector 0,0,0.02,c\e,0
                        c\ax#=TFormedX()
                        c\ay#=TFormedY()
                        c\az#=TFormedZ()
                EndIf
                If KeyDown(208)
                        c\vx=c\vx*0.99
                        c\vy=c\vy*0.99
                        c\vz=c\vz*0.99
                EndIf
                If KeyDown(57)
                        TFormVector 0,0.05,0,c\e,0
                        c\ax#=c\ax+TFormedX()
                        c\ay#=c\ay+TFormedY()
                        c\az#=c\az+TFormedZ()                               
                EndIf
                If KeyDown(203)
                        TurnEntity c\e,0,2,0
                EndIf
                If KeyDown(205)
                        TurnEntity c\e,0,-2,0
                EndIf
        Next
End Function

Скачать полную игру (18 мег)
Скачать код игры (1 кб)



Пожалуйста помогите. Мне нужно очистить код физики от созданных для демо привью объектов и оъяснить как её прикрутить в краце. :SOS:

Надеюсь что есть добрые люди которые смогут помочь - заранее спасибо!

neoleg 14.06.2007 18:01

Re: Помогите приделать физику к автомобилю
 
3 раза уже скачали а не кто не помогает =(

ЛысыЙ_Чук-Иванчук 14.06.2007 18:46

Re: Помогите приделать физику к автомобилю
 
Прошело всего 20мин :)))))))))
Тут такое дело, чтобы писать гоночки тебе необходим не 25 часовой опыт, а гораздо больше.
Ктому же физику авто лутше мутить физическим двигом!

ЗЫ\ Нужен нихилый опыт пока ты поймеш как сделать нормальную физику!
ЗЫ2\Начни просто с изучения блица!

neoleg 14.06.2007 18:51

Re: Помогите приделать физику к автомобилю
 
А что очень сложно объяснить? Мне объяснят я зпомню и в следущий рас буду делать уже сам...

Raiter 14.06.2007 19:54

Re: Помогите приделать физику к автомобилю
 
а как это у тя игра 18 метров весит, а исходник 1 кб ? :4to:

neoleg 14.06.2007 20:02

Re: Помогите приделать физику к автомобилю
 
Игра вместе с файлами 3d а исходник это тока код

Raiter 14.06.2007 20:05

Re: Помогите приделать физику к автомобилю
 
та я вродь не совсем тупой! что такое исходник догадываюсь... мне интересно чего ж ты напихал туды на 18 мб? а весь код , наверное, это и есть загрузка всякой фигни...

или ты просто ооочень тяжолые модели заюзал

neoleg 14.06.2007 20:33

Re: Помогите приделать физику к автомобилю
 
Тяжёлые модели просто! Ну так давайте не будем писать офф топ а поможем не ок? =)

Raiter 14.06.2007 20:48

Re: Помогите приделать физику к автомобилю
 
игык :4to:

а те знакомо такое слово как "производительность" ? :)

neoleg 15.06.2007 01:02

Re: Помогите приделать физику к автомобилю
 
Судя по всему никто помогать и не собирается... =(

Render 15.06.2007 01:48

Re: Помогите приделать физику к автомобилю
 
Здесь все физику машины делают на физ движках!

Raiter 15.06.2007 08:47

Re: Помогите приделать физику к автомобилю
 
А физ двиг тебе рано ешо :) Так что займись пока чем-то попроще чем сразу писать супер-мега игры... ;)

johnk 15.06.2007 08:49

Re: Помогите приделать физику к автомобилю
 
Человек хочет проЭкт, имеет право.

Raiter 15.06.2007 08:53

Re: Помогите приделать физику к автомобилю
 
Челавэг хочид адгаваридь имеед права!ь :-)

Я просто даю ему дружеский совет... Конечно скорее всего он не послушает... Но ведь у него не выйдет и он тогда подумает: "а ведь мне говорили..." и возмется уже не за очередной такой проЭкт, а за что-то более реальное ;)

johnk 15.06.2007 08:57

Re: Помогите приделать физику к автомобилю
 
Главное чтоб он сам это понял, так что от нас это не зависит.
Я тоже советую быть скромнее: хотя бы жалкое подобие физики для начала написать, а потом уже за физ. двиг браться.
Кстати:
Цитата:

Но ведь у него не выйдет
Не факт. :)

Raiter 15.06.2007 09:07

Re: Помогите приделать физику к автомобилю
 
Не факт... Это просто статистика :-)

neoleg 15.06.2007 10:12

Re: Помогите приделать физику к автомобилю
 
Нет это просто твсе зажрались =(

jimon 15.06.2007 10:47

Re: Помогите приделать физику к автомобилю
 
neoleg
мне влом тебе описывать весь код, и влом качать 18 метров
из исходника вот самое главное

Код:

Function carupdate()
        For c.car=Each car

                c\vy#=c\vy#+gravity# ;тут изменяем ускорение
                c\vx#=c\vx#+c\ax#
                c\vy#=c\vy#+c\ay#
                c\vz#=c\vz#+c\az#

                c\x#=EntityX(c\e) ; считываем позицию
                c\y#=EntityY(c\e)
                c\z#=EntityZ(c\e)
                TranslateEntity c\e,c\vx,c\vy,c\vz ;смещаем машину
        Next
        UpdateWorld()
        For c.car=Each car
                ;correct velocity if collided
                c\vx=(EntityX(c\e)-c\x) ;щитаем новое ускорение
                c\vy=(EntityY(c\e)-c\y)
                c\vz=(EntityZ(c\e)-c\z)
                ;slow down due to friction
                If EntityCollided(c\e,world_col) ;если втаранились, изменяем ускорение
                        c\vx#=c\vx*0.98
                        c\vy#=c\vy*0.98
                        c\vz#=c\vz*0.98
                EndIf
                c\ax#=0 ;збрасываем силу изменяющюю ускорение (вроде так)
                c\ay#=0
                c\az#=0       
        Next
End Function

больше чем я врятли кто-то обьяснит :)
а я обьяснил только потому что мне надоел етот флуд :)
если так дальше будете флудить - топик снесу нафиг

neoleg 15.06.2007 15:08

Re: Помогите приделать физику к автомобилю
 
Спасибо:super: Я попытался это вставить но он мне написал что тип машины не найден хотя всё есть. вот полный код:

Код:

AppTitle "CrimeLife"
Function LoadSkyBox( file$ )
m=CreateMesh()
;front face
b=LoadBrush( "texture\sky\sky_FR.jpg",49 )
s=CreateSurface( m,b )
AddVertex s,-1,+1,-1,0,0:AddVertex s,+1,+1,-1,1,0
AddVertex s,+1,-1,-1,1,1:AddVertex s,-1,-1,-1,0,1
AddTriangle s,0,1,2:AddTriangle s,0,2,3:
FreeBrush b
;right face
b=LoadBrush( "texture\sky\sky_LF.jpg",49 )
s=CreateSurface( m,b )
AddVertex s,+1,+1,-1,0,0:AddVertex s,+1,+1,+1,1,0
AddVertex s,+1,-1,+1,1,1:AddVertex s,+1,-1,-1,0,1
AddTriangle s,0,1,2:AddTriangle s,0,2,3
FreeBrush b
;back face
b=LoadBrush( "texture\sky\sky_BK.jpg",49 )
s=CreateSurface( m,b )
AddVertex s,+1,+1,+1,0,0:AddVertex s,-1,+1,+1,1,0
AddVertex s,-1,-1,+1,1,1:AddVertex s,+1,-1,+1,0,1
AddTriangle s,0,1,2:AddTriangle s,0,2,3
FreeBrush b
;left face
b=LoadBrush( "texture\sky\sky_RT.jpg",49 )
s=CreateSurface( m,b )
AddVertex s,-1,+1,+1,0,0:AddVertex s,-1,+1,-1,1,0
AddVertex s,-1,-1,-1,1,1:AddVertex s,-1,-1,+1,0,1
AddTriangle s,0,1,2:AddTriangle s,0,2,3
FreeBrush b
;top face
b=LoadBrush( "texture\sky\sky_UP.jpg",49 )
s=CreateSurface( m,b )
AddVertex s,-1,+1,+1,0,1:AddVertex s,+1,+1,+1,0,0
AddVertex s,+1,+1,-1,1,0:AddVertex s,-1,+1,-1,1,1
AddTriangle s,0,1,2:AddTriangle s,0,2,3
FreeBrush b
;bottom face
b=LoadBrush( "texture\sky\sky_DN.jpg",49 )
If b=0 b=CreateBrush (0,30,50)
s=CreateSurface( m,b )
AddVertex s,-1,-1,-1,1,0:AddVertex s,+1,-1,-1,1,1
AddVertex s,+1,-1,+1,0,1:AddVertex s,-1,-1,+1,0,0
AddTriangle s,0,1,2:AddTriangle s,0,2,3
FreeBrush b
ScaleMesh m,500,500,500
FlipMesh m
EntityFX m,1
Return m
End Function
Graphics3D 1024,768,32,1
SetBuffer BackBuffer()
lit=CreateLight()
LoadSkyBox ("data\gfx\skies\night")
cam=CreateCamera()
PositionEntity cam,0,4,0
; Ростительность
tr1=LoadMesh("model\object\exeterier\trava.3DS")
PositionEntity tr1,10,0,-9
tr2=LoadMesh("model\rast\trava2.3DS")
PositionEntity tr2,10,0,-11
gor=LoadMesh("model\gora.3DS")
PositionEntity gor,0,0.1,300
tex=LoadTexture("texture\trova.jpg")
ScaleTexture tex,5,5
EntityTexture gor,tex
; Создаём светофор
ligt=LoadMesh("model\object\exeterier\slight.3DS")
PositionEntity ligt,0,0,0
; Создаём фонари
slight=LoadMesh("model\object\exeterier\fonar2.3DS")
PositionEntity slight,-8,0,0
slight=LoadMesh("model\object\exeterier\fonar.3ds")
PositionEntity slight,4,0,-10
slight=LoadMesh("model\object\exeterier\fonar.3ds")
PositionEntity slight,4,0,-30
slight=LoadMesh("model\object\exeterier\fonar.3ds")
PositionEntity slight,4,0,-60
slight=LoadMesh("model\object\exeterier\fonar2.3DS")
PositionEntity slight,-8,0,-10
slight=LoadMesh("model\object\exeterier\fonar2.3DS")
PositionEntity slight,-8,0,-30
slight=LoadMesh("model\object\exeterier\fonar2.3DS")
PositionEntity slight,-8,0,-60
; Дома
house=LoadMesh("model\object\house1\house1.3DS")
PositionEntity house,-25,0,-30
tex=LoadTexture("texture\metal.jpg")
ScaleTexture tex,0.5,0.5
EntityTexture house,tex
office=LoadMesh("model\object\office1\office1.3DS")
PositionEntity office,16,0,-3
tex=LoadTexture("texture\metal.jpg")
ScaleTexture tex,0.5,0.5
EntityTexture office,tex
motel=LoadMesh("model\object\motel1\motel1.3DS")
PositionEntity motel,11,0.4,-25
tex=LoadTexture("texture\1.jpg")
EntityTexture motel,tex
house3=LoadMesh("model\object\house3\house3.3DS")
PositionEntity house3,25,0,14
house3=LoadMesh("model\object\house2\house2.3DS")
PositionEntity house3,25,0,14
; Мапинг
pl=LoadMesh("model\panel.3DS")
PositionEntity pl,-22,0,35
tex=LoadTexture("texture\trotuar.BMP")
ScaleTexture tex,1,1
EntityTexture pl,tex
pl=LoadMesh("model\panel.3DS")
PositionEntity pl,18,0,35
tex=LoadTexture("texture\trotuar.BMP")
ScaleTexture tex,1,1
EntityTexture pl,tex
pl=LoadMesh("model\panel.3DS")
PositionEntity pl,18,0,-8
tex=LoadTexture("texture\trotuar.BMP")
ScaleTexture tex,1,1
EntityTexture pl,tex
pl=LoadMesh("model\panel.3DS")
PositionEntity pl,18,0,-32
tex=LoadTexture("texture\trotuar.BMP")
ScaleTexture tex,1,1
EntityTexture pl,tex
pl=LoadMesh("model\panel.3DS")
PositionEntity pl,-22,0,-8
tex=LoadTexture("texture\trotuar.BMP")
ScaleTexture tex,1,1
EntityTexture pl,tex
kat=LoadMesh("model\object\exeterier\kat.3DS")
tex=LoadTexture("texture\trees.jpg")
PositionEntity kat,14,0.2,-9.5
ScaleTexture tex,-0.5,-0.5
EntityTexture kat,tex
box=LoadMesh("model\object\exeterier\recl_box.3DS")
tex=LoadTexture("texture\trees.jpg")
PositionEntity box,-22,0,-8
ScaleTexture tex,-0.5,-0.5
EntityTexture box,tex
; Player
car=LoadMesh("model\car\honda.3DS") ; Создаём авто
Function carupdate()
        For c.car=Each car

                c\vy#=c\vy#+gravity# ;тут изменяем ускорение
                c\vx#=c\vx#+c\ax#
                c\vy#=c\vy#+c\ay#
                c\vz#=c\vz#+c\az#

                c\x#=EntityX(c\e) ; считываем позицию
                c\y#=EntityY(c\e)
                c\z#=EntityZ(c\e)
                TranslateEntity c\e,c\vx,c\vy,c\vz ;смещаем машину
        Next
        UpdateWorld()
        For c.car=Each car
                ;correct velocity if collided
                c\vx=(EntityX(c\e)-c\x) ;щитаем новое ускорение
                c\vy=(EntityY(c\e)-c\y)
                c\vz=(EntityZ(c\e)-c\z)
                ;slow down due to friction
                If EntityCollided(c\e,world_col) ;если втаранились, изменяем ускорение
                        c\vx#=c\vx*0.98
                        c\vy#=c\vy*0.98
                        c\vz#=c\vz*0.98
                EndIf
                c\ax#=0 ;збрасываем силу изменяющюю ускорение (вроде так)
                c\ay#=0
                c\az#=0       
        Next
End Function
ScaleMesh car,1,1,1
RotateMesh car,-1,1,1
cam=CreateCamera(car) ; Создаём камеру
PositionEntity car,-5,0,3
pln=CreatePlane()
tex=LoadTexture("texture\Blkleath.jpg")
ScaleTexture tex,3,3
EntityTexture pln,tex
cam=CreateCamera(car)
MoveEntity cam,0,2,6
Repeat
; Управление
If KeyDown(200) MoveEntity car,0,0,-.2
If KeyDown(208) MoveEntity car,0,0,.2
If KeyDown(203) TurnEntity car,0,2,0
If KeyDown(205) TurnEntity car,0,-2,0
PointEntity cam,car
UpdateWorld
RenderWorld
Flip
Until KeyHit(1)
End


johnk 15.06.2007 15:19

Re: Помогите приделать физику к автомобилю
 
Хех, так ты создай.

neoleg 15.06.2007 15:33

Re: Помогите приделать физику к автомобилю
 
car=LoadMesh("model\car\honda.3DS") ну если у меня уже есть?

johnk 15.06.2007 15:36

Re: Помогите приделать физику к автомобилю
 
Это не тип, а просто переменная.

Raiter 15.06.2007 16:37

Re: Помогите приделать физику к автомобилю
 
RTFM!

http://johnk.3dn.ru/publ/2-1-0-19 - типы для самых маленьких :)

H@NON 15.06.2007 16:38

Re: Помогите приделать физику к автомобилю
 
Вложений: 2
Я вижу ты еще совсем зеленый neoleg. Тебе еще учиться и учиться. Не принимай это как оскорбление, скорее наблюдение. Дал бы ссылок кучу на разные учебники, но че то забыл, так что ищи учебник scavena - самое то читать его первым. А вообще зайди в раздел FAQ , там тоже есть много чего. В общем я посмотрел коддддддд.... такой кашы я еще не пробывал:4to:. Внизу аттач . Сам проверить не смогу ибо 18мегов за зря.... Больно не старался так что точно что-нибудь не так. Разбирайся сам и не копируй исходники а разбери их и пиши тоже сам.


neoleg 15.06.2007 19:30

Re: Помогите приделать физику к автомобилю
 
Спасибо. Я и сам понимаю что надо так надо самому а вот не получается не выдерживаю да и встроить добром сам не могу зато когда встроено могу посомтреть как и что и тогда в бдущем уже сам делать

ЛысыЙ_Чук-Иванчук 15.06.2007 23:16

Re: Помогите приделать физику к автомобилю
 
А еще луише открой раздел 3Д програмирование и с самого конца начни четать посты!
Там много чего раскрыто что тебе прегодится!

H@NON 16.06.2007 08:50

Re: Помогите приделать физику к автомобилю
 
Цитата:

Сообщение от neoleg
Спасибо. Я и сам понимаю что надо так надо самому а вот не получается не выдерживаю да и встроить добром сам не могу зато когда встроено могу посомтреть как и что и тогда в бдущем уже сам делать

Неее, ты так не научишься. Ты лучше сам напиши с нуля. Чисто логически подставляй операторы. Сразу поймешь что к чему. И учись делать код понятным, минимум команд. Все вычисления сначало производи в переменных. А если хочешь сразу игру написать, то пиши простую. А потом постепенно увеличивай сложность.
Можешь конечно не принимать это в серьез, это был так, совет. Просто сам так начинал и нехватало терпения, хотелось все и сразу. Вот поймешь что к чему в Блитце,тоже также будешь других нравоучать.


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

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