www.boolean.name

www.boolean.name (http://forum.boolean.name/index.php)
-   Xors3D (http://forum.boolean.name/forumdisplay.php?f=126)
-   -   Физика и капсула (http://forum.boolean.name/showthread.php?t=14484)

Mind 28.03.2011 09:23

Физика и капсула
 
Блин ломаю голову целую неделю. Подскжите как можно "заморозить" поворот кпсулы по осям X и Z. А то чет когда я пишу: xRotateentity capsule,0,mx_cam,0 и потом двигаю игрока ( прикладываю физ. силу ) у меня все ровно капсула поворачиваеться чуть чуть ( градусов на 10).

И,наверно,из-з этого, когда я подхожу к стене и нажимаю прыгать у меня перс отскакивает назад. :(

Reizel 28.03.2011 17:40

Ответ: Физика и капсула
 
В той теме не ответили...Так зачем новую создавать? :-D

А Заморозка повоторов по осям делается очень прочто:
float YRotate=GetEntityRotateY();
xRotateBody(body,0,YRotate,0);

Mind 28.03.2011 18:13

Ответ: Физика и капсула
 
Цитата:

А Заморозка повоторов по осям делается очень прочто:
float YRotate=GetEntityRotateY();
xRotateBody(body,0,YRotate,0);
Павел я же писал выше:
Цитата:

А то чет когда я пишу: xRotateentity capsule,0,mx_cam,0 и потом двигаю игрока ( прикладываю физ. силу ) у меня все ровно капсула поворачиваеться чуть чуть ( градусов на 10).
И вобще есть ли такие команды в Xors3d GetEntityRotateY() xRotateBody(body,0,YRotate,0);

Mind 29.03.2011 01:01

Ответ: Физика и капсула
 
У меня кароч вот какая проблема: когда капсула движется вверх ( близь стены ) она цепляет triangl`ы и отскакивает. Почему так??

falcon 29.03.2011 13:25

Ответ: Физика и капсула
 
потому, что нельзя ходить вверх по стенам?

Mind 29.03.2011 16:43

Ответ: Физика и капсула
 
Вложений: 1
Вот тут я нарисовл.

1) Состояние покоя ( когда просто стоит)
2) Передвижение ( наклоняется град. на 10)
3) Столкновение со стеной
4) Прыжок (когда капсула движится вверх каким-то образом она цепляется за стену а потом отскакивает)
5) Отскакивание Почему?? :dontknow:
6) Цепляется капсула ( как по мне )

moka 29.03.2011 17:10

Ответ: Физика и капсула
 
Там нету никаких физ. полигонов, что направлены backface'ами вниз, и когда капсула идёт вверх, заходит в эти трианглы но с задней (backface) стороны?

Mind 29.03.2011 17:53

Ответ: Физика и капсула
 
Цитата:

Там нету никаких физ. полигонов, что направлены 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 ( сам создал для удобства )

Mind 30.03.2011 16:20

Ответ: Физика и капсула
 
Вложений: 1
Пример "глюка" :

Mind 01.04.2011 01:01

Ответ: Физика и капсула
 
Вот кажись что-то у меня начало прояснятьса. Кароче под моим долгим наблюдением и эксперементированием я заметил, что капсула глючит из-за тримеша ( уровня ).
Пример:
1. Создал обычный Box сделал его xEntityAddBoxShape(...) - всё норм.
2. Создал обычный Box сделал его xEntityAddHullShape(...) - тоже всё норм.
3. Создал обычный Box сделал его xEntityAddTriMeshShape(...) - все глючит, т.е во-первых: почему-то рисуется дополнительный триугльник :dontknow: , во-вторых: происходит столкновение c triangl`ами и в-третих: капсула,если применить хорошую физ. силу проходит сквозь стену, а потом возвращается обратно, но с толчком.

Растолкуйте мне пожалуста в чем дело.

Mind 02.04.2011 15:28

Ответ: Физика и капсула
 
Объясните мне пожалуста в чем дело??



А как можно посчитать child`ы в уровне чтоб сделать их Hull`ами. С помощью какой функции???

Colossus 22.02.2013 19:04

Ответ: Физика и капсула
 
В учебнике Автомата по физиксу есть функция CreateHullOfAllMesh() или как то так.

Arton 23.02.2013 18:07

Ответ: Физика и капсула
 
Мне конечно нравиться как на чей нибудь вопрос отвечают через несколько месяцев, или лет :-D

Ничего что "Последняя активность: 06.08.2012 11:04"


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

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