|
Xors3D Графический движок с поддержкой DirectX9 |
28.03.2011, 09:23
|
#1
|
ПроЭктировщик
Регистрация: 24.02.2011
Сообщений: 188
Написано 13 полезных сообщений (для 18 пользователей)
|
Физика и капсула
Блин ломаю голову целую неделю. Подскжите как можно "заморозить" поворот кпсулы по осям X и Z. А то чет когда я пишу: xRotateentity capsule,0,mx_cam,0 и потом двигаю игрока ( прикладываю физ. силу ) у меня все ровно капсула поворачиваеться чуть чуть ( градусов на 10).
И,наверно,из-з этого, когда я подхожу к стене и нажимаю прыгать у меня перс отскакивает назад.
|
(Offline)
|
|
28.03.2011, 17:40
|
#2
|
Задрот
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений (для 863 пользователей)
|
Ответ: Физика и капсула
В той теме не ответили...Так зачем новую создавать?
А Заморозка повоторов по осям делается очень прочто:
float YRotate=GetEntityRotateY();
xRotateBody(body,0,YRotate,0);
|
(Offline)
|
|
28.03.2011, 18:13
|
#3
|
ПроЭктировщик
Регистрация: 24.02.2011
Сообщений: 188
Написано 13 полезных сообщений (для 18 пользователей)
|
Ответ: Физика и капсула
А Заморозка повоторов по осям делается очень прочто:
float YRotate=GetEntityRotateY();
xRotateBody(body,0,YRotate,0);
|
Павел я же писал выше:
А то чет когда я пишу: xRotateentity capsule,0,mx_cam,0 и потом двигаю игрока ( прикладываю физ. силу ) у меня все ровно капсула поворачиваеться чуть чуть ( градусов на 10).
|
И вобще есть ли такие команды в Xors3d GetEntityRotateY() xRotateBody(body,0,YRotate,0);
|
(Offline)
|
|
29.03.2011, 01:01
|
#4
|
ПроЭктировщик
Регистрация: 24.02.2011
Сообщений: 188
Написано 13 полезных сообщений (для 18 пользователей)
|
Ответ: Физика и капсула
У меня кароч вот какая проблема: когда капсула движется вверх ( близь стены ) она цепляет triangl`ы и отскакивает. Почему так??
|
(Offline)
|
|
29.03.2011, 13:25
|
#5
|
Разработчик
Регистрация: 12.07.2008
Сообщений: 523
Написано 196 полезных сообщений (для 470 пользователей)
|
Ответ: Физика и капсула
потому, что нельзя ходить вверх по стенам?
|
(Offline)
|
|
29.03.2011, 16:43
|
#6
|
ПроЭктировщик
Регистрация: 24.02.2011
Сообщений: 188
Написано 13 полезных сообщений (для 18 пользователей)
|
Ответ: Физика и капсула
Вот тут я нарисовл.
1) Состояние покоя ( когда просто стоит)
2) Передвижение ( наклоняется град. на 10)
3) Столкновение со стеной
4) Прыжок (когда капсула движится вверх каким-то образом она цепляется за стену а потом отскакивает)
5) Отскакивание Почему??
6) Цепляется капсула ( как по мне )
|
(Offline)
|
|
29.03.2011, 17:10
|
#7
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Физика и капсула
Там нету никаких физ. полигонов, что направлены backface'ами вниз, и когда капсула идёт вверх, заходит в эти трианглы но с задней (backface) стороны?
|
(Offline)
|
|
29.03.2011, 17:53
|
#8
|
ПроЭктировщик
Регистрация: 24.02.2011
Сообщений: 188
Написано 13 полезных сообщений (для 18 пользователей)
|
Ответ: Физика и капсула
Там нету никаких физ. полигонов, что направлены backface'ами вниз, и когда капсула идёт вверх, заходит в эти трианглы но с задней (backface) стороны?
|
Moka, вроде нет.
Может я чет в коде намудрил:
Include "xors3d.bb"
xSetAntiAliasType xGetMaxAntiAlias()
xAppTitle "Shooter"
xGraphics3D 800,600, 32, 0, 1
xCreateDSS 1024, 1024
xHidePointer
Global jump=0,opt=0,timer=0,t#=0,xd#=0,xr,tel,bgh#,zadr#=0,pps#=0,prm#=0,kar=0,fres=0,J=0,fres2=0,kmc=1,o=0,pxo#=0,ps#=0,cpe#=1
Global fr#,fr2#,slow#,orbit#,ch#,vest=0,ck=1,sl#=10,kof=0,speedi=0,gravi=0
cube = xLoadMesh("cap.b3d")
xEntityAlpha cube,0.3
cubs=xCreateCube()
xScaleEntity cubs,4,13,4
xEntityAlpha cubs,1
xEntityColor cubs,0,255,0
cubs3=xCreateCube()
xScaleEntity cubs3,16,0.01,16
xEntityColor cubs3,255,0,0
xEntityAlpha cubs3,0
cam = xCreateCamera()
xCameraRange cam,1,10000
light = xCreateLight()
xPositionEntity light,0,0,0
xRotateEntity light,80,60,0
xLightConeAngles light,0,9
xLightRange light,180
conelight =xCreateCone()
xRotateEntity conelight,-90,0,0
xScaleEntity conelight,10,10,10
xEntityParent conelight,light
xInitShadows(1024, 1024, 640)
xAmbientLight 160,160,160
xSetShadowParams 6, 0.99, 1, 100
xLightEnableShadows light, True
xLightShadowEpsilons light, 0.0001, 0.16
xCameraEnableShadows cam
automat = xLoadMesh("auto.b3d",cam)
xRotateEntity automat,0,180,0
xPositionEntity automat,2.9,-13,13
xScaleEntity automat,0.1,0.1,0.1
PotMesh = xLoadMesh("fran4.b3d")
xScaleEntity PotMesh,0.3,0.3,0.3
xEntityAddTriMeshShape(PotMesh,0)
xPositionEntity PotMesh,100,-2000,0
Repeat
;If xKeyDown(8) Then xTurnEntity light,0.3,0,0
;If xKeyDown(7) Then xTurnEntity light,-0.3,0,0
If xMeshesIntersect(cubs,PotMesh) Then
me_c1=1
Else
me_c1=0
orbit=1
EndIf
mx#=(xMouseYSpeed()*0.2)
my#=(xMouseXSpeed()*0.2)
dmx#=dmx#+mx#
dmy#=dmy#-my#
xRotateEntity cam,dmx,dmy,0
xRotateEntity cube,0,dmy,0
xEntityFriction(PotMesh,0.9)
slow=xCurv(slow,xEntityY(cube),4)+ck*5
xPositionEntity cam,xEntityX(cube),Cos(pxo)+slow,xEntityZ(cube)-50
xPositionEntity cubs,xEntityX(Cube),xEntityY(Cube)-15,xEntityZ(Cube)
xPositionEntity cubs3,xEntityX(Cube),xEntityY(Cube)-10,xEntityZ(Cube)
xMoveMouse xGraphicsWidth()/2,xGraphicsHeight()/2
pxo=pxo+7
If pxo>=360 Then pxo=360
xPhysicsDebugRender(0)
force=230
max_speed=10
If me_c1=1 Then
If tel=2 Then
foc#=1000
EndIf
If tel=1 Then
foc#=foc#+1200
tim=0
EndIf
If foc#>=speedi Then foc=speedi
Else
If kmc=1
foc#=0
Else
foc#=foc#-3000
If foc#<=100 Then foc=100
EndIf
EndIf
tel=2
Fc=Cos(xEntityYaw(cube)-90)*foc
Fs=Sin(xEntityYaw(cube)-90)*foc
Fc2=Cos(xEntityYaw(cube)+180)*foc/1
Fs2=Sin(xEntityYaw(cube)+180)*foc/1
Fc3=Cos(xEntityYaw(cube))*foc/1
Fs3=Sin(xEntityYaw(cube))*foc/1
WS=xKeyDown(17)-xKeyDown(31)
AD=xKeyDown(30)-xKeyDown(32)
If WS<>0 And AD<>0 Then
speedi=5000
Else
speedi=7000
EndIf
If fres<=1
If xKeyDown(17)
xEntityApplyForce(Cube, -Fc, 0, -Fs,0,0,0)
If xKeyDown(42) Then
xEntityApplyForce(Cube, -Fc/1.6*10, 0, -Fs/1.6*10,0,0,0)
EndIf
tel=1
EndIf
If xKeyDown(31)
xEntityApplyForce(Cube, Fc, 0, Fs,0,0,0)
tel=1
EndIf
If xKeyDown(30)
xEntityApplyForce(Cube, Fc2, 0, Fs2,0,0,0)
tel=1
EndIf
If xKeyDown(32)
xEntityApplyForce(Cube, Fc3, 0, Fs3,0,0,0)
tel=1
EndIf
EndIf
If orbit=1 Then ch=ch+1
If orbit=0 Then ch=0
If fres2=2 And (ch>90 Or delta=0) Then pxo=0:delta=0
If tel=2 Then tim=tim+1
If me_c1 Then
fres2=fres2+2
If fres2>=25 Then
orbit=0
If tel=1 Then xd#=0.99
If tel=2 Then xd#=1
fres2=25
Else
xd=0.92
EndIf
Else
fres2=0
xd#=0
EndIf
If jump=0
If xKeyHit(57) Then Goto part3
EndIf
If jump=1
If xKeyHit(57) Then
J=1
jump=0
delta=1
EndIf
EndIf
.part3
xEntityContactDistance(Cube,1)
fr=1
If xKeyDown(17) Then
If xKeyDown(42)
fr=0.6
EndIf
EndIf
fr2=1.1
If kmc=1 Then o=o+1
If o>=20 Then
kmc=0
o=0
EndIf
If kmc=1 Then
jump=0
EndIf
If kmc=0 Then
If me_c1=1 Then
jump=1
Else
jump=0
EndIf
EndIf
If J=1 Then
kmc=1
fres2=0
fres=fres+1
If fres>3 And fres<20 Then
jump=0
xd=0
If xKeyDown(17) Then
xEntityApplyForce(Cube,Fc/fr, 2,Fs/fr,0,0,0)
EndIf
If xKeyDown(31)
xEntityApplyForce(Cube,-Fc/fr, 2,-Fs/fr,0,0,0)
EndIf
If xKeyDown(30)
xEntityApplyForce(Cube,-Fc2/fr, 2,-Fs2/fr,-100,0,0)
EndIf
If xKeyDown(32)
xEntityApplyForce(Cube,-Fc3/fr, 2,-Fs3/fr,0,0,0)
EndIf
EndIf
If fres>=9
J=0
fres=0
EndIf
If fres<=3 Then
xEntityApplyForce(Cube, 0, 100, 0,0,0,0)
xd=0
jump=0
If xKeyDown(17) Then
xEntityApplyForce(Cube, Fc*fr2, 0, Fs*fr2,0,0,0)
EndIf
If xKeyDown(31)
xEntityApplyForce(Cube, -Fc*fr2, 0, -Fs*fr2,0,0,0)
EndIf
If xKeyDown(30)
xEntityApplyForce(Cube, -Fc2*fr2, 0, -Fs2*fr2,0,0,0)
EndIf
If xKeyDown(32)
xEntityApplyForce(Cube, -Fc3*fr2, 0, -Fs3*fr2,0,0,0)
EndIf
xRotateEntity cube,0,dmy,0
gravi=60
EndIf
Else
If me_c1=1 Then
If fres2>=5 And fres2<17 Then
gravi=-80
EndIf
ElseIf fres2=0
gravi=-50
ElseIf fres2=25
gravi=-10
EndIf
EndIf
If xEntityContactDistance(Cube,1) <>0 Then xRotateEntity cube,0,0,0
If xKeyHit(29) Then
vest=1-vest
If vest=1 Then
xFreeEntityShapes(cube)
fres2=0
xd=0.96
xEntityAddHullShape(cube,100)
ck=0.5
Else
xd=0
ck=1
N=0
xFreeEntityShapes(cube)
EndIf
EndIf
N=N+1
If N<5 Then
xd=0
xMoveEntity cube,0,1,0
Else
N=5
EndIf
If n=2 Then
xEntityAddHullShape(cube,100)
fres2=3
EndIf
xEntityGravity(cube,0,gravi,0)
xEntityDamping(cube,xd#,-999)
xUpdateWorld(60)
xRenderWorld(1,1)
xText 60,100," Jump = "+foc+" "+fres2+" "+cpe+" "+o+" "+xd+"Dist = "+xEntityContactDistance(Cube,1),1,1
xText 400,100,"Fps="+xGetFPS(),1,1
xFlip
Until xKeyHit(1)
End
xCurv - аналог CurveValue ( сам создал для удобства )
|
(Offline)
|
|
30.03.2011, 16:20
|
#9
|
ПроЭктировщик
Регистрация: 24.02.2011
Сообщений: 188
Написано 13 полезных сообщений (для 18 пользователей)
|
Ответ: Физика и капсула
Пример "глюка" :
|
(Offline)
|
|
01.04.2011, 01:01
|
#10
|
ПроЭктировщик
Регистрация: 24.02.2011
Сообщений: 188
Написано 13 полезных сообщений (для 18 пользователей)
|
Ответ: Физика и капсула
Вот кажись что-то у меня начало прояснятьса. Кароче под моим долгим наблюдением и эксперементированием я заметил, что капсула глючит из-за тримеша ( уровня ).
Пример:
1. Создал обычный Box сделал его xEntityAddBoxShape(...) - всё норм.
2. Создал обычный Box сделал его xEntityAddHullShape(...) - тоже всё норм.
3. Создал обычный Box сделал его xEntityAddTriMeshShape(...) - все глючит, т.е во-первых: почему-то рисуется дополнительный триугльник , во-вторых: происходит столкновение c triangl`ами и в-третих: капсула,если применить хорошую физ. силу проходит сквозь стену, а потом возвращается обратно, но с толчком.
Растолкуйте мне пожалуста в чем дело.
|
(Offline)
|
|
02.04.2011, 15:28
|
#11
|
ПроЭктировщик
Регистрация: 24.02.2011
Сообщений: 188
Написано 13 полезных сообщений (для 18 пользователей)
|
Ответ: Физика и капсула
Объясните мне пожалуста в чем дело??
А как можно посчитать child`ы в уровне чтоб сделать их Hull`ами. С помощью какой функции???
|
(Offline)
|
|
22.02.2013, 19:04
|
#12
|
Разработчик
Регистрация: 12.10.2008
Адрес: Самара
Сообщений: 437
Написано 55 полезных сообщений (для 92 пользователей)
|
Ответ: Физика и капсула
В учебнике Автомата по физиксу есть функция CreateHullOfAllMesh() или как то так.
__________________
Пекарня: Intel Core i3 - 3240(3.40Ghz), ram 8 gb, video Gigabyte Nvidia GeForce GTX 650 1gb
Лэптоп : Intel Core i3 - 2365(1.40Ghz), ram 4gb, video Int Intel HD3000(512mb)
Мой набор: 3ds Max 9 + Xors3d(Blitz3d) + Photoshop
|
(Offline)
|
|
23.02.2013, 18:07
|
#13
|
Быдлокодер
Регистрация: 05.07.2009
Адрес: Проспит
Сообщений: 5,024
Написано 2,312 полезных сообщений (для 5,349 пользователей)
|
Ответ: Физика и капсула
Мне конечно нравиться как на чей нибудь вопрос отвечают через несколько месяцев, или лет
Ничего что "Последняя активность: 06.08.2012 11:04"
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 22:07.
|