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

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

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

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

Ответ
 
Опции темы
Старый 28.03.2006, 03:30   #1
AdomaX
AnyKey`щик
 
Регистрация: 28.03.2006
Сообщений: 7
Написано 0 полезных сообщений
(для 0 пользователей)
Graphics 800,600
SetBuffer BackBuffer()

;physics variables
Global delta_t# = 0.01
Global M_PI# = 3.1415926
Global DRAG# = 5.0
Global RESISTANCE# = 30.0
Global CA_R# = -5.20
Global CA_F# = -5.0
Global MAX_GRIP# = 2.0* *
Global MULT# = 57
Global MULT2# = 0.01745

Global CAR1_cartype = 1
Global CAR1_cartype_b# = 1.0
Global CAR1_cartype_c# = 1.0
Global CAR1_cartype_wheelbase# = CAR1_cartype_b# + CAR1_cartype_c#
Global CAR1_cartype_h# = 1.0
Global CAR1_cartype_mass# = 1500
Global CAR1_cartype_inertia# = 1500
Global CAR1_cartype_width# = 1.5
Global CAR1_cartype_length# = 3.0
Global CAR1_cartype_wheellength# = 0.7
Global CAR1_cartype_wheelwidth# = 0.3
Global CAR1_car_position_wc_x# = 400.0
Global CAR1_car_position_wc_y# = 300.0
Global CAR1_car_velocity_wc_x# = 0
Global CAR1_car_velocity_wc_y# = 0
Global CAR1_car_angle# = 0
Global CAR1_car_angularvelocity# = 0
Global CAR1_car_steerangle# = 0
Global CAR1_car_throttle# = 0
Global CAR1_car_brake# = 0

Global front_slip = 0
Global rear_slip = 0

Global velocity_x#
Global velocity_y#
Global yawspeed#
Global sn#, cs#
Global xpos#, ypos#
Global rot_angle#
Global sideslip#
Global slipanglefront#
Global slipanglerear#
Global flatf_x#, flatf_y#
Global flatr_x#, flatr_y#
Global weight#
Global ftraction_x#, ftraction_y#
Global resistance_x#, resistance_y#
Global force_x#, force_y#
Global torque#
Global acceleration_x#, acceleration_y#, angular_acceleration#
Global acceleration_wc_x#, acceleration_wc_y#


;main loop
While ( KeyHit(1)=0 )

* * Cls

* * FUNC_do_input()
* *
* * FUNC_do_physics()
* * * *
* * Flip
* *
Wend

End




;input routine from joystick/pad/wheel
Function FUNC_do_input()

* * If ( KeyDown(200)) CAR1_car_throttle# = 2000.0
* * If ( KeyDown(20) CAR1_car_throttle# = 0.0
* * If ( KeyDown(57))
* * * * CAR1_car_throttle# = 0.0
* * * * CAR1_car_brake# = 100.0
* * Else
* * * * CAR1_car_brake# = 0.0
* * EndIf

* * CAR1_car_steerangle# = 0.0
* * If ( KeyDown(205)) CAR1_car_steerangle# = (-M_PI# / 4.0) * 0.15;* MULT2#
* * If ( KeyDown(203)) CAR1_car_steerangle# = (M_PI# / 4.0) * 0.15; MULT2#

* * rear_slip = 0;
* * If ( KeyDown(57) ) rear_slip = 1;
* *
* * ;temp display of vars
* * Text 0,0,Str(CAR1_car_position_wc_x#)
* * Text 0,12,Str(CAR1_car_position_wc_y#)
* * Text 0,24,Str(CAR1_car_steerangle#)

* * CAR1_car_angle#=CAR1_car_angle#+CAR1_car_steerangl e#

* * xpos# = CAR1_car_position_wc_x#
* * ypos# = CAR1_car_position_wc_y#

* * ;render a small moving car rep.
* * renda1# =( -CAR1_car_angle# * MULT# ) - 60
* * If (renda1#<0.0) Then renda1#=360.0+renda1#
* * renda2# =( -CAR1_car_angle# * MULT# ) + 60
* * If (renda2#>359.0) Then renda2#=renda2#-360.0
* * renda3# =( -CAR1_car_angle# * MULT# ) - 120
* * If (renda3#<0.0) Then renda3#=360.0+renda3#
* * renda4# =( -CAR1_car_angle# * MULT# ) + 120
* * If (renda4#>359.0) Then renda4#=renda4#-360.0

* * rendx1#=25*Cos(renda1#) : rendy1#=25*Sin(renda1#)
* * rendx2#=25*Cos(renda2#) : rendy2#=25*Sin(renda2#)
* * rendx3#=25*Cos(renda3#) : rendy3#=25*Sin(renda3#)
* * rendx4#=25*Cos(renda4#) : rendy4#=25*Sin(renda4#)

* * Color 255,255,255
* * Line rendx1#+xpos#,rendy1#+ypos#,rendx2#+xpos#,rendy2#+ ypos#
* * Line rendx2#+xpos#,rendy2#+ypos#,rendx4#+xpos#,rendy4#+ ypos#
* * Line rendx4#+xpos#,rendy4#+ypos#,rendx3#+xpos#,rendy3#+ ypos#
* * Line rendx3#+xpos#,rendy3#+ypos#,rendx1#+xpos#,rendy1#+ ypos#

End Function






;type of car - 1=rear 2=front 3=four
Global CAR1_car_drivetype = 3




Function FUNC_do_physics()

* * ; SAE convention: x is To the front of the car, y is To the Right, z is down



* * ;--------------------------
* * ; TRANSFORM VELOCITY
* * ;--------------------------
* * * * ; transform velocity in world reference frame To velocity in car reference frame
* * * * sn# = Sin(CAR1_car_angle# * MULT#); * MULT2#
* * * * cs# = Cos(CAR1_car_angle# * MULT#) ;* MULT2#
* * * * velocity_x# = cs# * CAR1_car_velocity_wc_y# + sn# * CAR1_car_velocity_wc_x#
* * * * velocity_y# = -sn# * CAR1_car_velocity_wc_y# + cs# * CAR1_car_velocity_wc_x#


* * ;--------------------------
* * ; LATERAL FORCES ON WHEELS
* * ;--------------------------
* * * * ; Resulting velocity of the wheels as result of the yaw rate of the car body
* * * * ; v = yawrate * r where r is distance of wheel To CG (approx. half wheel base)
* * * * ; yawrate (ang.velocity) must be in rad/s

* * * * ; 0.5 in this line becomes front/rear pos of COG - alter this later
* * * * yawspeed# = CAR1_cartype_wheelbase# * 0.5 * CAR1_car_angularvelocity#
* * * * If( velocity_x# = 0 )
* * * * * * rot_angle# = 0
* * * * Else
* * * * * * rot_angle# = ATan2( (yawspeed# ) , (velocity_x#) ) * MULT2#
* * * * EndIf


* * ;-------------------------
* * ; SIDESLIP ANGLE
* * ;-------------------------
* * * * ; Calculate the side slip angle of the car (a.k.a. beta)
* * * * If( velocity_x# = 0 )
* * * * * * sideslip# = 0.0
* * * * Else
* * * * * * sideslip# = ATan2( (velocity_y# ) , (velocity_x#) )* * * MULT2#* *
* * * * EndIf


* * ;-------------------------
* * ; SLIP ANGLES FRONT/REAR
* * ;-------------------------
* * * * ; Calculate slip angles For front And rear wheels (a.k.a. alpha)
* * * * slipanglefront# = sideslip# + rot_angle# - CAR1_car_steerangle#
* * * * slipanglerear# = (sideslip# - rot_angle#)


* * ;-------------------------
* * ; WEIGHT PER AXLE
* * ;-------------------------
* * * * ; weight per axle = half car mass times 1G (=9.8m/s^2)
* * * * ; need to split this into front and rear masses - according to position of COG
* * * * weight# = CAR1_cartype_mass# * 9.8 * 0.5


* * ;--------------------------
* * ; LATERAL FORCES ON WHEELS
* * ;--------------------------
* * * * ; (Ca * slip angle) capped To friction circle * load
* * * * flatf_x# = 0.0
* * * * flatr_x# = 0.0

* * * * ;check for front / rear / 4 wheel drive
* * * * If ( CAR1_car_drivetype = 1 )

* * * * * * ;rear wheel drive
* * * * * * flatr_y# = CA_R# * slipanglerear# / ((CAR1_car_throttle# / 5000.0)+1)
* * * * * * flatf_y# = CA_F# * slipanglefront#

* * * * Else If ( CAR1_car_drivetype = 2 )

* * * * * * ;front wheel drive
* * * * * * flatr_y# = CA_R# * slipanglerear#
* * * * * * flatf_y# = CA_F# * slipanglefront# / ((CAR1_car_throttle# / 5000.0)+1)

* * * * Else If ( CAR1_car_drivetype = 3 )
* *
* * * * * * ;4 wheel drive
* * * * * * flatr_y# = CA_R# * slipanglerear# / ((CAR1_car_throttle# / 5000.0)+1)
* * * * * * flatf_y# = CA_F# * slipanglefront# / ((CAR1_car_throttle# / 5000.0)+1)
* * * *
* * * * EndIf
* * * * * *
* * * * flatf_y# = flatf_y# * weight#
* * * * flatr_y# = flatr_y# * weight#

* * * * ; allow for handbrake / reduced grip levels - use this for different surfaces later* *
* * * * If(front_slip=1) flatf_y# = flatf_y# * 0.5
* * * * If(rear_slip = 1) flatr_y# = flatr_y# * 0.5


* * ;-----------------------------
* * ; LONGITUDINAL FORCES
* * ;-----------------------------
* * * * ; longtitudinal force on rear wheels - very simple traction model
* * * * ftraction_x# = 100.0 * (CAR1_car_throttle# - CAR1_car_brake# * Sgn(velocity_x#))
* * * * ftraction_y# = 0.0

* * * * ; allow for handbrake
* * * * If(rear_slip = 1) ftraction_x# = ftraction_x# * 0.5



* * ;-------------------------------
* * ; SUM FORCES AND TORQUE ON BODY
* * ;-------------------------------
* * * * ; drag And rolling resistance
* * * * resistance_x# = -( RESISTANCE# * velocity_x# + DRAG# * velocity_x# * Abs( velocity_x# ) )
* * * * resistance_y# = -( RESISTANCE# * velocity_y# + DRAG# * velocity_y# * Abs( velocity_y# ) )

* * * * ; sum forces
* * * * force_x# = ftraction_x# + (Sin( CAR1_car_steerangle# * MULT# )) * flatf_x# + flatr_x# + resistance_x#
* * * * force_y# = ftraction_y# + (Cos( CAR1_car_steerangle# * MULT# )) * flatf_y# + flatr_y# + resistance_y#* *

* * * *
* * * * ; torque on body from lateral forces
* * * * torque# = CAR1_cartype_b# * flatf_y# - CAR1_cartype_c# * flatr_y#

* * * * ; Acceleration - Newton F = m.a, therefore a = F/m
* * * * acceleration_x# = force_x# / CAR1_cartype_mass#
* * * * acceleration_y# = force_y# / CAR1_cartype_mass#
* *
* * * * ; angular acceleration around COG
* * * * angular_acceleration# = torque# / CAR1_cartype_inertia#

* * * * ; Velocity And position
* * * * ; transform acceleration from car reference frame To world reference frame
* * * * acceleration_wc_x# = cs# * acceleration_y# + sn# * acceleration_x#
* * * * acceleration_wc_y# = -sn# * acceleration_y# + cs# * acceleration_x#

* * * * ; velocity is integrated acceleration
* * * * CAR1_car_velocity_wc_x# = CAR1_car_velocity_wc_x# + (delta_t# * acceleration_wc_x#)
* * * * CAR1_car_velocity_wc_y# = CAR1_car_velocity_wc_y# + (delta_t# * acceleration_wc_y#)

* * * * ; position is integrated velocity
* * * * CAR1_car_position_wc_x# = CAR1_car_position_wc_x# + (delta_t# * CAR1_car_velocity_wc_x#)
* * * * CAR1_car_position_wc_y# = CAR1_car_position_wc_y# + (delta_t# * CAR1_car_velocity_wc_y#)

* * * * ; Angular velocity And heading
* * * * ; integrate angular acceleration To get angular velocity
* * * * CAR1_car_angularvelocity# = CAR1_car_angularvelocity# + (delta_t# * angular_acceleration#)

* * * * ; move COG left / right according to body's angular rotation
* * * * CAR1_car_COGx# = (CAR1_car_angularvelocity# * 10.0)
* * * * CAR1_car_COGy# = CAR1_car_throttle# / 100.0
* * * *
* * * * ; integrate angular velocity To get angular orientation
* * * * CAR1_car_angle# = CAR1_car_angle# + (delta_t# * CAR1_car_angularvelocity#)





* * ;TEMP - SCREEN LIMITS
* * If ( CAR1_car_position_wc_x# < 0.0 ) CAR1_car_position_wc_x# = 800.0
* * If ( CAR1_car_position_wc_x# > 800.0 ) CAR1_car_position_wc_x# = 0.0
* * If ( CAR1_car_position_wc_y# < 0.0 ) CAR1_car_position_wc_y# = 600.0
* * If ( CAR1_car_position_wc_y# > 600.0 ) CAR1_car_position_wc_y# = 0.0
* *
End Function

Вот физика а как ее приделать к модели машины?
если можно с примером очень прошу..
(Offline)
 
Ответить с цитированием
Старый 28.03.2006, 04:10   #2
tormoz
Гигант индустрии
 
Аватар для tormoz
 
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений
(для 4,437 пользователей)
Я дико извиняюсь. но вопрос из серии - сделайте мне игру.
Тут полдня нужно сидеть.
Народ. у кого есть лишние 4-5 часов на отладку ?
ИМХО, не можеш сделать сейчас - делай что попроще. Или трахайся.
Например я пару недель назад на физику авто почти три дня убил. Но сделал сам, кода ни у кого не просил.
А ты хоть пытался что то сделать ?
То что показал - это чужой исходник-заготовка.

Вотъ :o''

Хотя тут где то бегали добрые дяди с кучей времени...
__________________
(Offline)
 
Ответить с цитированием
Старый 28.03.2006, 12:30   #3
AdomaX
AnyKey`щик
 
Регистрация: 28.03.2006
Сообщений: 7
Написано 0 полезных сообщений
(для 0 пользователей)
Originally posted by tormoz@28.3.2006, 0:10
Я дико извиняюсь. но вопрос из серии - сделайте мне игру.
Тут полдня нужно сидеть.
Народ. у кого есть лишние 4-5 часов на отладку ?
ИМХО, не можеш сделать сейчас - делай что попроще. Или трахайся.
Например я пару недель назад на физику авто почти три дня убил. Но сделал сам, кода ни у кого не просил.
А ты хоть пытался что то сделать ?
То что показал - это чужой исходник-заготовка.

Вотъ :o''

Хотя тут где то бегали добрые дяди с кучей времени...
Не ето я показал как пример вы скажите как мне сделать чтобы все ети параметры машина использывала
(Offline)
 
Ответить с цитированием
Старый 28.03.2006, 21:52   #4
jimon
 
Сообщений: n/a
думаю что такая физика врятли подойдет для машини
 
Ответить с цитированием
Старый 28.03.2006, 23:52   #5
Diplomat
Дэвелопер
 
Регистрация: 07.09.2005
Сообщений: 1,519
Написано 66 полезных сообщений
(для 164 пользователей)
Гм-м-м, что это все новЕчки вдруг решили написать по рейсингу? Вот уже третья тема, и всё с одним и тем же вопросом... Как правило такой ажиотаж вызывается выходом новой версии NFS, но сейчас вроде бы ничего такого не выходило. Может это кто-то один клонируется и надеется взять количеством?

На всякий случай, ответ класса "а вдруг?!".
AdomaX! Представь себе, что такое ускорение. Это когда некая переменная "скорость" изменяется со временем под воздействием силы. Например, нажал ты клавишу "вперед"- и скорость машины растет: V=V+A. Но при этом есть еще и трение: V=V/K. Когда-нибудь трение станет равно силе и скорость перестанет расти. А если сила перестала действовать- трение погасит скорость. Заведи себе три переменных скорости для трех координатных осей- и думай дальше, как их изменять в зависимости от сил. И просто сдвигай модельку машины по соответствующей оси каждый проход цикла на величину скорости. Это основа. Как сделать так, чтоб при нажатии клавиши поворота машина не сразу крутилась, а разворачивалась иннерционно ты, взглянув на текст выше, догадаешься? А как сделать, чтоб когда машина падала и касалась земли, скорость падения "отражалась" в результате появления силы реакции опоры? О, как здорово! А как сделать так, чтоб машина не скользила, как кирпич, заколизившись с землей, а ехала на колесах? Что, и это, если подумать и трезво с долей скепсиса взглянуть на стандартные примеры, не трудно? Ну что-ж тогда осталось сделать немного: сделать реалистичную физику аммортизаторов, что тоже решаемо легко, если взглянуть с высоты накопленного тобой в проделанной работе опыта...
Вот и всё. Ты создал физику автомобиля.
Если у тебя возникнут вопросы по какой-нибудь детали- без проблемм с радостью поможем. Но писать за тебя код- хоть и вовсе не трудно, как говорит дядя Тормоз (у каждого тут есть свои наработки в этом плане и писать просто уже не нужно)- но это просто педагогически бессмыссленно.

P.P.S. Да, SubZero, я знаю, что я злой и мерзкий тип, что я был резок с новеньким и что сейчас месагу мою сотрут... но в самом деле, человек ведь ДЕЙСТВИТЕЛЬНО не задал корректного вопроса на который можно было бы хотя бы попытаться ответить, и ДЕЙСТВИТЕЛЬНО не удосужился прочитать живущие рядышком две темы, содержащие тот же неотвечабельный вопрос в несколько иной вариации, и ДЕЙСТВИТЕЛЬНО не попытался что-то сделать сам...
(Offline)
 
Ответить с цитированием
Старый 29.03.2006, 00:15   #6
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Diplomat прав
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 29.03.2006, 00:54   #7
alcoSHoLiK
Дэвелопер
 
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений
(для 110 пользователей)
Originally posted by Diplomat@28.3.2006, 20:52
Как правило такой ажиотаж вызывается выходом новой версии NFS, но сейчас вроде бы ничего такого не выходило.
NFS: Most Wanted и NFS: Most Wanted | Black Edition
(Offline)
 
Ответить с цитированием
Старый 29.03.2006, 01:20   #8
Diplomat
Дэвелопер
 
Регистрация: 07.09.2005
Сообщений: 1,519
Написано 66 полезных сообщений
(для 164 пользователей)
Тьфу, и правда! Ну что-ж, дичайше извиняюсь, потому как был не правый.
(Offline)
 
Ответить с цитированием
Старый 29.03.2006, 10:49   #9
ZanoZa
Элита
 
Регистрация: 02.10.2005
Сообщений: 1,789
Написано 132 полезных сообщений
(для 252 пользователей)
А чё исходник Dirver уже не прокатит?
(Offline)
 
Ответить с цитированием
Старый 29.03.2006, 22:20   #10
jimon
 
Сообщений: n/a
ZanoZa нам же потом понадобится МеГа Физика
так что лутче показать легкий с тяжолый путь... чтобы догадками потом себя немучить
 
Ответить с цитированием
Старый 30.03.2006, 11:14   #11
ZanoZa
Элита
 
Регистрация: 02.10.2005
Сообщений: 1,789
Написано 132 полезных сообщений
(для 252 пользователей)
Смущение

Adomax поучи пока основы.Не делай супер мега игры, оставь их напотом, когда появится опыт. Иначе куча нервов и времени.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите новечку) Strelok3848 3D-программирование 45 18.01.2008 03:46


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


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