Driver problem
Übersicht

ArdalicBetreff: Driver problem |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi,
Ich habe ein problem den ich nicht lösen kann. Wenn man mit dem Auto schnell ist kann es ein 90°(Hausmauer) aufwärst fahren Code: [AUSKLAPPEN] Graphics3D 800,600,32,2 Global mX#=0 Global MY#=0 Global mZ#=0 Dim wheel_mtire(100) Dim wheel_ptire(100) Dim wheel_tire(100) SeedRnd MilliSecs() Zufall=Rnd(1,3) If Zufall=1 Then PlayMusic("GameData\Sounds\Music\1.mp3") If Zufall=2 Then PlayMusic("GameData\Sounds\Music\2.mp3") If Zufall=3 Then PlayMusic("GameData\Sounds\Music\3.mp3") Const GRAVITY#=-.01 Const BODY=1,WHEEL=2,SCENE=3 Collisions BODY,SCENE,2,3 Collisions WHEEL,SCENE,2,3 World=LoadMesh("GameData\Data\World.x") ScaleEntity World,0.03,0.03,0.03 EntityShininess World,0.0001 EntityType World,SCENE PositionEntity World,0,90,0 car=LoadMesh( "GameData\Cars\car.x" ) ScaleMesh car,0.01,0.01,-0.01 FlipMesh car FitMesh car,-1.5,-1,-3,3,2,6 PositionEntity car,0,100,10 EntityShininess car,90 EntityType car,BODY Zufall=PlayMusic Global wheels[4] cnt=1 For z#=1.5 To -1.5 Step -3 For x#=-1 To 1 Step 2 wheels[cnt]=CreateSphere( 8,car ) EntityAlpha wheels[cnt],.5 ScaleEntity wheels[cnt],.5,.5,.5 EntityRadius wheels[cnt],.5 PositionEntity wheels[cnt],x,0,z EntityType wheels[cnt],WHEEL cnt=cnt+1 Next Next ;light=CreateLight() ;TurnEntity light,45,45,0 target=CreatePivot( car ) PositionEntity target,0,5,-12 camera=CreateCamera() CameraClsColor camera,0,200,255 speed#=0 x_vel#=0:prev_x#=EntityX( car ) y_vel#=0:prev_y#=EntityY( car ) z_vel#=0:prev_z#=EntityZ( car ) While Not KeyHit(1) ;align car to wheels zx#=(EntityX( wheels[2],True )+EntityX( wheels[4],True ))/2 zx=zx-(EntityX( wheels[1],True )+EntityX( wheels[3],True ))/2 zy#=(EntityY( wheels[2],True )+EntityY( wheels[4],True ))/2 zy=zy-(EntityY( wheels[1],True )+EntityY( wheels[3],True ))/2 zz#=(EntityZ( wheels[2],True )+EntityZ( wheels[4],True ))/2 zz=zz-(EntityZ( wheels[1],True )+EntityZ( wheels[3],True ))/2 AlignToVector car,zx,zy,zz,1 zx#=(EntityX( wheels[1],True )+EntityX( wheels[2],True ))/2 zx=zx-(EntityX( wheels[3],True )+EntityX( wheels[4],True ))/2 zy#=(EntityY( wheels[1],True )+EntityY( wheels[2],True ))/2 zy=zy-(EntityY( wheels[3],True )+EntityY( wheels[4],True ))/2 zz#=(EntityZ( wheels[1],True )+EntityZ( wheels[2],True ))/2 zz=zz-(EntityZ( wheels[3],True )+EntityZ( wheels[4],True ))/2 AlignToVector car,zx,zy,zz,3 ;calculate car velocities cx#=EntityX( car ):x_vel=cx-prev_x:prev_x=cx cy#=EntityY( car ):y_vel=cy-prev_y:prev_y=cy cz#=EntityZ( car ):z_vel=cz-prev_z:prev_z=cz ;resposition wheels cnt=1 For z=1.5 To -1.5 Step -3 For x=-1 To 1 Step 2 ; PositionEntity wheels[cnt],0,0,0 ; ResetEntity wheels[cnt] PositionEntity wheels[cnt],x,-0.5,z cnt=cnt+1 Next Next ;move car If KeyDown(203) TurnEntity car,0,1,0 If KeyDown(205) TurnEntity car,0,-1,0 If EntityCollided( car,SCENE ) If KeyDown(200) speed=speed+.2 If speed>.7 speed=.7 Else If KeyDown(208) speed=speed-.02 If speed<-.5 speed=-.5 Else speed=speed*.9 EndIf MoveEntity car,0,0,speed TranslateEntity car,0,GRAVITY,0 Else TranslateEntity car,x_vel,y_vel+GRAVITY,z_vel EndIf ;update camera If speed>=0 dx#=EntityX( target,True )-EntityX( camera ) dy#=EntityY( target,True )-EntityY( camera ) dz#=EntityZ( target,True )-EntityZ( camera ) TranslateEntity camera,dx*.1,dy*.1,dz*.1 EndIf PointEntity camera,car UpdateWorld RenderWorld Flip Wend End |
||
![]() |
Goodjee |
![]() Antworten mit Zitat ![]() |
---|---|---|
dann solltest du überprüfen ob der winkel in dem das auto fährt valide ist oder die karre nicht so schnell werden lassen...jetzt müsstest du nurnoch den source verstehen und dann findeste bestimmt ne stelle wo man das einbauen könnte | ||
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/ |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Um das vernünftig zu lösen, sollte man das eventuelle einbeziehen einer gescheiten Physikengine in betracht ziehen. Andererseits kannst du natürlich auch selbst eine Abfrage machen bzw. eine gewisse Physikintegrität einrechnen. Alles andere wäre meiner Meinung nach reines rumgespiele mit Werten die dann in bestimmten Fällen doch wieder ''Fehlalarm'' auslösen und dann eben falsches tun.
Die einfachste aber auch mit Abstand die schlechteste Lösung wäre, die Überprüfung der Änderung des Bewegungsvektors vom Fahrzeug selbst. Wenn es an einer steilen Mauer fährt, würde es dann stoppen. Das würde das Fahrzeug dann aber auch dann tun, wenn es von einem Sprung auf dem Boden fällt. Also schlechte Idee. Eventuell hilft dir folgender Link ja etwas. Es simuliert eine 3D-Verletintegration die ein Fahrzeug ergeben. Das einzige grobe Manko ist, dass die Räder auch aus mehreren Knotenpunkten bestehen, was die Sache äußerst unbrauchbar für ein Fahrzeug macht. Schaffst du es aber die Räder als einzelne Knotenpunkte so umzrechnen, dass sie eine Seitenführung in jeder Stellung zum Terrain haben, dann hast du auch eine schöne Blitz3D-Physik mit der man gut arbeiten kann. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
Ardalic |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Thx,
jetzt hab ich ein Physik Daten von Tokamak. Nun gibt es ein neues problem wenn ich mit ein bisschen erhöhten Geschwindichkeit die Wand berührt geht der reifen der an der Wand gestrifen hat weg. |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mit ''Geht weg'' meinst du, dass dieser dann irgendwo anders positioniert ist, als an vorgegebener Stelle? Dann solltest du dein Auto eben so konstruieren, dass es auch stabil wird. Das könnte aber bereits damit gelöst sein, indem du ein Stossdämpfer nicht so plazierst wie in der Wirklichkeit, sondern als Gummiband welches sich bei Beanspruchung ausdehnt. Also genau anders rum. Egal wie nun der Reifen getroffen wird, er kehrt immer zu seiner vorgegebenen Position zurück. Auch dann, wenn er eine ganze Drehung um das Auto machen muß. Das ist ein ganz normales Problem bei solchen Physikgeschichten. Ist auf meinem 2D/3D-Buggy-Beispiel auch nicht anders. | ||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
Ardalic |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
nein ich meinte es geht durch die Wand und fällt anscheind runter ins endlose | ||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Eventuell sollte man auch nicht mit 300 Sachen gegen eine Mauer fahren und hoffen, dass die Physikengine innerhalb eines Frames ein komplett auf einer Ebene zusammengeklatschtes Objekt noch richtig berechnet. Oder ein anderes Problem ist die Blitzkollision. Dazu sollte man wissen, dass CameraRange hier nicht über einen Faktor von 1'000? oder 10'000? kommen sollte. Mit Faktor meine ich 1:1000 oder 0.1:100 oder 0.01:10 oder 10:10000 und so weiter. Auch habe ich festgestellt, das Kollisionen fehlberechnet werden, sobald das Objekt sich über X/Y/Z Position von > +/- 8000 befindet. | ||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
Ardalic |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also am CameraRange kann es nicht liegen.
Ich habe jetzt mal die Codes hier. Code: [AUSKLAPPEN] Const FPS=60 Type vector Field x# Field y# Field z# End Type Global Zufall Global CProd.vector=New vector Type csys Field cx#,cy#,cz# Field mx#,my#,sps End Type Graphics3D 800,600,0,2 SetBuffer BackBuffer() Zufall=Rnd(1,2) If Zufall=1 Then PlayMusic("GameData\Sounds\Music\Music 1.dat") If Zufall=2 Then PlayMusic("GameData\Sounds\Music\Music 3.dat") camera = CreateCamera() PositionEntity camera,10,8,-5 WireFrame False ToKSIM_CreateSimulator(0,-9.0,0) TOKSIM_SetMaterial 0,0.0,0.6 ColBank=CreateBank(104*10) TOKSIM_SetCInfoBank ColBank TOKSIM_SetCollisionResponse -1,1,3 ; Impulse & Feedback TOKSIM_SetCollisionResponse -1,2,0 ; No Impulse Or Feedback Terrain=LoadMesh("GameData\Data\World.x") ScaleMesh Terrain,0.02,0.02,0.02 RotateMesh Terrain,0,0,0 EntityShininess Terrain,0.0001 MakeTokCollider(Terrain) SeedRnd MilliSecs() Global Body_Mesh = LoadMesh("truck_body.b3d") ScaleMesh Body_Mesh,0.3,0.3,0.3 PositionMesh Body_Mesh,0.0,-2.1,0.0 RotateMesh Body_Mesh,0,180,0 Global Body_RB = TOKRB_Create() TOKRB_AddBox Body_RB,2.0,1.0,3.0 TOKRB_SetPosition Body_RB,0,5,0 TOKRB_SetMass Body_RB,1.0 TOKRB_SetBoxInertiaTensor Body_RB,2.0,1.0,3.0,1.0 ExtraWeight = TOKRB_Create() TOKRB_SetCollisionID ExtraWeight,2 TOKRB_SetMass ExtraWeight,0.4 TOKRB_SetSphereInertiaTensor ExtraWeight,0.5,0.4 TOKRB_SetPosition ExtraWeight,0,5,1.5 ConnJoint = TOKJOINT_Create(2,ExtraWeight,Body_RB) TOKJOINT_SetType ConnJoint,1 TOKJOINT_SetPositionAndRotationWorld ConnJoint,0,5.0,1.5,0,0,0 TOKJOINT_Enable ConnJoint,True Global RR_Spr_RB = TOKRB_Create() TOKRB_AddSphere RR_Spr_RB,1.0 TOKRB_SetPosition RR_Spr_RB,1.2,3.0,-1.50 TOKRB_SetMass RR_Spr_RB,1.0 TOKRB_SetSphereInertiaTensor RR_Spr_RB,1.0,1.0 TOKRB_SetCollisionID RR_Spr_RB,1 RR_SprJoint = TOKJOINT_Create(2,RR_Spr_RB,Body_RB) TOKJOINT_SetType RR_SprJoint,4 ; Slidejoint TOKJOINT_SetPositionAndRotationWorld RR_SprJoint,1.2,3.0,-1.50,0,0,0 TOKJOINT_Enable RR_SprJoint,True Global RL_Spr_RB = TOKRB_Create() TOKRB_AddSphere RL_Spr_RB,1.0 TOKRB_SetPosition RL_Spr_RB,-1.2,3.0,-1.5 TOKRB_SetMass RL_Spr_RB,1.0 TOKRB_SetSphereInertiaTensor RL_Spr_RB,1.0,1.0 TOKRB_SetCollisionID RL_Spr_RB,1 RL_SprJoint = TOKJOINT_Create(2,RL_Spr_RB,Body_RB) TOKJOINT_SetType RL_SprJoint,4 ; Slidejoint TOKJOINT_SetPositionAndRotationWorld RL_SprJoint,-1.2,3.0,-1.5,0,0,0 TOKJOINT_Enable RL_SprJoint,True Global FR_Spr_RB = TOKRB_Create() TOKRB_AddSphere FR_Spr_RB,1.0 TOKRB_SetPosition FR_Spr_RB,1.2,3.0,1.65 TOKRB_SetMass FR_Spr_RB,1.0 TOKRB_SetSphereInertiaTensor FR_Spr_RB,1.0,1.0 TOKRB_SetCollisionID FR_Spr_RB,1 FR_SprJoint = TOKJOINT_Create(2,FR_Spr_RB,Body_RB) TOKJOINT_SetType FR_SprJoint,4 ; Slidejoint TOKJOINT_SetPositionAndRotationWorld FR_SprJoint,1.2,3.0,1.65,0,0,0 TOKJOINT_Enable FR_SprJoint,True Global FL_Spr_RB = TOKRB_Create() TOKRB_AddSphere FL_Spr_RB,1.0 TOKRB_SetPosition FL_Spr_RB,-1.2,3.0,1.65 TOKRB_SetMass FL_Spr_RB,1.0 TOKRB_SetSphereInertiaTensor FL_Spr_RB,1.0,1.0 TOKRB_SetCollisionID FL_Spr_RB,1 FL_SprJoint = TOKJOINT_Create(2,FL_Spr_RB,Body_RB) TOKJOINT_SetType FL_SprJoint,4 ; Slidejoint TOKJOINT_SetPositionAndRotationWorld FL_SprJoint,-1.2,3.0,1.65,0,0,0 TOKJOINT_Enable FL_SprJoint,True FR_Wheel=LoadMesh("truck_wheel.b3d") ScaleMesh FR_Wheel,0.3,0.3,0.3 FL_Wheel=LoadMesh("truck_wheel.b3d") ScaleMesh FL_Wheel,0.3,0.3,0.3 RR_Wheel=LoadMesh("truck_wheel.b3d") ScaleMesh RR_Wheel,0.3,0.3,0.3 RL_Wheel=LoadMesh("truck_wheel.b3d") ScaleMesh RL_Wheel,0.3,0.3,0.3 CamPoint = TOKRB_Create() TOKRB_SetMass CamPoint,1.0 TOKRB_SetSphereInertiaTensor FR_Spr_RB,1.0,1.0 TOKRB_SetLinearDamping CamPoint,0.01 Centerpivot = CreatePivot() CamTargetPivot=CreatePivot() Global speed#=0 GripFactor#=0.2 light=CreateLight() LightColor light,128,128,128 PositionEntity light,255,255,-255 PointEntity light,Centerpivot period=1000/FPS time=MilliSecs()-period Global timestep#=1.5/FPS ; MainLoop While Not KeyHit(1) Repeat elapsed=MilliSecs()-time Until elapsed ticks=elapsed/period tween#=Float(elapsed Mod period)/Float(period) For k=1 To ticks time=time+period If k=ticks Then CaptureWorld TOKSIM_Advance(1.5/FPS,1) UpdateWorld PlaceMesh Body_Mesh,Body_RB PositionEntity FR_Wheel,TOKRB_GetX#(FR_Spr_RB),TOKRB_GetY#(FR_Spr_RB),TOKRB_GetZ#(FR_Spr_RB) RotateEntity FR_Wheel,EntityPitch#(Body_Mesh),EntityYaw#(Body_Mesh),EntityRoll#(Body_Mesh) TurnEntity FR_Wheel,0,Turn#,0 PositionEntity FL_Wheel,TOKRB_GetX#(FL_Spr_RB),TOKRB_GetY#(FL_Spr_RB),TOKRB_GetZ#(FL_Spr_RB) RotateEntity FL_Wheel,EntityPitch#(Body_Mesh),EntityYaw#(Body_Mesh),EntityRoll#(Body_Mesh) TurnEntity FL_Wheel,0,Turn#,0 PositionEntity RR_Wheel,TOKRB_GetX#(RR_Spr_RB),TOKRB_GetY#(RR_Spr_RB),TOKRB_GetZ#(RR_Spr_RB) RotateEntity RR_Wheel,EntityPitch#(Body_Mesh),EntityYaw#(Body_Mesh),EntityRoll#(Body_Mesh) PositionEntity RL_Wheel,TOKRB_GetX#(RL_Spr_RB),TOKRB_GetY#(RL_Spr_RB),TOKRB_GetZ#(RL_Spr_RB) RotateEntity RL_Wheel,EntityPitch#(Body_Mesh),EntityYaw#(Body_Mesh),EntityRoll#(Body_Mesh) PointEntity camera,Body_Mesh UpdateSpring 1.2,-0.5,-1.5,RR_Spr_RB,50,6.0,1.1 UpdateSpring -1.2,-0.5,-1.5,RL_Spr_RB,50,6.0,1.1 UpdateSpring 1.2,-0.5,1.65,FR_Spr_RB,50,6.0,1.1 UpdateSpring -1.2,-0.5,1.65,FL_Spr_RB,50,6.0,1.1 RRColl=False RLColl=False FRColl=False FLColl=False ;Check Colliders If TOKSIM_GetCollisionCount()>0 Then For c=0 To TOKSIM_GetCollisionCount()-1 If PeekInt(ColBank,0+(c*104))=RR_Spr_RB Then RRColl=True If PeekInt(ColBank,0+(c*104))=RL_Spr_RB Then RLColl=True If PeekInt(ColBank,0+(c*104))=FR_Spr_RB Then FRColl=True If PeekInt(ColBank,0+(c*104))=FL_Spr_RB Then FLColl=True Next EndIf ;Driving-force If KeyDown(200) Then Acc#=Acc#+1.0 If Acc#>11 Then Acc#=11 ElseIf KeyDown(208) Then Acc#=Acc#-1.0 If Acc#<6.0 Then Acc#=-6.0 Else Acc#=Acc#*0.95 If Acc#>-0.01 And Acc#<0.01 Then Acc#=0.0 EndIf TFormVector 0,0,1,Body_Mesh,0 vx#=TFormedX#() vy#=TFormedY#() vz#=TFormedZ#() If RRColl=True Then TOKRB_ApplyImpulse RR_Spr_RB,vx#*acc#*timestep#,vy#*acc#*timestep#,vz#*acc#*timestep# EndIf If RLColl=True Then TOKRB_ApplyImpulse RL_Spr_RB,vx#*acc#*timestep#,vy#*acc#*timestep#,vz#*acc#*timestep# EndIf CarVelx#=TOKRB_GetVelocityX#(Body_RB) CarVely#=TOKRB_GetVelocityY#(Body_RB) CarVelz#=TOKRB_GetVelocityZ#(Body_RB) TFormNormal 0,0,1,Body_Mesh,0 CarVel#=Abs(DotProduct#(TFormedX#(),TFormedY#(),TFormedZ#(),CarVelx#,CarVely#,CarVelz#)) TurnFactor#=1.0-((1.0/35.0)*CarVel#) MaxTurn#=27.0 CurrTurn#=MaxTurn#*TurnFactor# If KeyDown(205) Then Turn#=Turn#-0.7 If Turn#<-MaxTurn#*TurnFactor# Then Turn#=-MaxTurn#*TurnFactor# ElseIf KeyDown(203) Then Turn#=Turn#+0.7 If Turn#>MaxTurn#*TurnFactor# Then Turn#=MaxTurn#*TurnFactor# Else Turn=Turn*0.95 If Turn#>-0.1 And Turn#<0.1 Then Turn#=0.0 EndIf AngVelx#=TOKRB_GetAngularVelocityX#(Body_RB) AngVely#=TOKRB_GetAngularVelocityY#(Body_RB) AngVelz#=TOKRB_GetAngularVelocityZ#(Body_RB) TFormNormal 0,1,0,Body_Mesh,0 AngVel#=Abs(DotProduct#(TFormedX#(),TFormedY#(),TFormedZ#(),AngVelx#,AngVely#,AngVelz#)) If KeyHit(57) Or (AngVel#>1.0 And CarVel#>12.0) Then Slip=True EndIf If Slip=True Then GripFactor#=0.99 EndIf If AngVel#<0.7 And Slip=True Then GripFactor#=0.98 ;Slip=False EndIf If AngVel#<0.5 And Slip=True Then GripFactor#=0.97 ;Slip=False EndIf If AngVel#<0.3 And Slip=True Then GripFactor#=0.9 Slip=False EndIf If KeyHit(16) Then Slip=True TOKRB_ApplyTwist Body_RB,0,50,0 EndIf ;Friction ;Find sideslip-speed for RightRearWheel Vx#=TOKRB_GetVelocityX#(RR_Spr_RB) Vy#=TOKRB_GetVelocityY#(RR_Spr_RB) Vz#=TOKRB_GetVelocityZ#(RR_Spr_RB) TFormVector Vx#,Vy#,Vz#,0,Body_Mesh TFormVector TFormedX#()*GripFactor#,TFormedY#(),TFormedZ#(),Body_Mesh,0 If RRColl=True Then TOKRB_SetVelocity RR_Spr_RB,TFormedX#(),TFormedY#(),TFormedZ#() EndIf ;Find sideslip-speed for LeftRearWheel Vx#=TOKRB_GetVelocityX#(RL_Spr_RB) Vy#=TOKRB_GetVelocityY#(RL_Spr_RB) Vz#=TOKRB_GetVelocityZ#(RL_Spr_RB) TFormVector Vx#,Vy#,Vz#,0,Body_Mesh TFormVector TFormedX#()*GripFactor#,TFormedY#(),TFormedZ#(),Body_Mesh,0 If RLColl=True Then TOKRB_SetVelocity RL_Spr_RB,TFormedX#(),TFormedY#(),TFormedZ#() EndIf ;Find sideslip-speed for RightFrontWheel Vx#=TOKRB_GetVelocityX#(FR_Spr_RB) Vy#=TOKRB_GetVelocityY#(FR_Spr_RB) Vz#=TOKRB_GetVelocityZ#(FR_Spr_RB) TFormVector Vx#,Vy#,Vz#,0,FR_Wheel TFormVector TFormedX#()*GripFactor#,TFormedY#(),TFormedZ#(),FR_Wheel,0 If FRColl=True Then TOKRB_SetVelocity FR_Spr_RB,TFormedX#(),TFormedY#(),TFormedZ#() EndIf ;Find sideslip-speed for LeftFrontWheel Vx#=TOKRB_GetVelocityX#(FL_Spr_RB) Vy#=TOKRB_GetVelocityY#(FL_Spr_RB) Vz#=TOKRB_GetVelocityZ#(FL_Spr_RB) TFormVector Vx#,Vy#,Vz#,0,FL_Wheel TFormVector TFormedX#()*GripFactor#,TFormedY#(),TFormedZ#(),FL_Wheel,0 If FLColl=True Then TOKRB_SetVelocity FL_Spr_RB,TFormedX#(),TFormedY#(),TFormedZ#() EndIf ;Drag TFormNormal 0,0,-1,Body_Mesh,0 dragConstant# = 1.1 velX#=TOKRB_GetVelocityX#(Body_RB) velY#=TOKRB_GetVelocityY#(Body_RB) velZ#=TOKRB_GetVelocityZ#(Body_RB) dot#=DotProduct#(TFormedX#(),TFormedY#(),TFormedZ#(),velX#,velY#,velZ#) dragX#=dot#*TFormedX#()*-dragConstant# dragY#=dot#*TFormedY#()*-dragConstant# dragZ#=dot#*TFormedZ#()*-dragConstant# TOKRB_ApplyImpulse Body_RB,dragX#*timestep#,dragY#*timestep#,dragZ#*timestep# ;Camera PositionEntity camtargetpivot,EntityX#(Body_Mesh),EntityY#(Body_Mesh),EntityZ#(Body_Mesh) RotateEntity camtargetpivot,EntityPitch#(Body_Mesh),EntityYaw#(Body_Mesh),EntityRoll#(Body_Mesh) MoveEntity camtargetpivot,0,3,-7 UpdateCamera Camera,camtargetpivot,0.02 Next RenderWorld tween Flip False Wend TOKSIM_DestroySimulator() End Function UpdateSpring(px#,py#,pz#,Wheel_RB,Stiffness#,Damping#,SpringLength#) ;Add spring force TFormPoint px#,py#,pz#,Body_Mesh,0 wpx#=TFormedX#() wpy#=TFormedY#() wpz#=TFormedZ#() diffX#=wpx# - TOKRB_GetX#(Wheel_RB) diffY#=wpy# - TOKRB_GetY#(Wheel_RB) diffZ#=wpz# - TOKRB_GetZ#(Wheel_RB) diffLen#=Sqr(diffX#*diffX#+diffY#*diffY#+diffZ#*diffZ#) Displacement#=diffLen#-SpringLength# nx#=diffx#/diffLen# ny#=diffy#/diffLen# nz#=diffz#/diffLen# fx#=nx#*(Displacement#*Stiffness#) fy#=ny#*(Displacement#*Stiffness#) fz#=nz#*(Displacement#*Stiffness#) ;Add damping force GetPointVel Body_RB,wpx#,wpy#,wpz# Vx#=CProd\x#-TOKRB_GetVelocityX#(Wheel_RB) Vy#=CProd\y#-TOKRB_GetVelocityY#(Wheel_RB) Vz#=CProd\z#-TOKRB_GetVelocityZ#(Wheel_RB) speed#=DotProduct#(nx#,ny#,nz#,Vx#,Vy#,Vz#) dampX#=nx#*speed#*Damping# dampY#=ny#*speed#*Damping# dampZ#=nz#*speed#*Damping# fx#=fx#+dampX# fy#=fy#+dampY# fz#=fz#+dampZ# TOKRB_ApplyImpulse2 Body_RB,-fx#*timestep#,-fy#*timestep#,-fz#*timestep#,wpx#,wpy#,wpz# TOKRB_ApplyImpulse Wheel_RB,fx#*timestep#,fy#*timestep#,fz#*timestep# End Function Function PlaceMesh(Mesh,RB) PositionEntity Mesh,TOKRB_GetX#(RB),TOKRB_GetY#(RB),TOKRB_GetZ#(RB) RotateEntity Mesh,TOKRB_GetPitch#(RB),TOKRB_GetYaw#(RB),TOKRB_GetRoll#(RB),False End Function Function DotProduct#(x1#,y1#,z1#,x2#,y2#,z2#) DProd#=((x1#*x2#)+(y1#*y2#)+(z1#*z2#)) Return DProd# End Function Function CrossProduct(x1#,y1#,z1#,x2#,y2#,z2#) CProd\x#=(y1#*z2#)-(z1#*y2#) CProd\y#=(z1#*x2#)-(x1#*z2#) CProd\z#=(x1#*y2#)-(y1#*x2#) End Function Function GetPointVel(RB,px#,py#,pz#) vx#=TOKRB_GetVelocityX#(RB) vy#=TOKRB_GetVelocityY#(RB) vz#=TOKRB_GetVelocityZ#(RB) avx#=TOKRB_GetAngularVelocityX#(RB) avy#=TOKRB_GetAngularVelocityY#(RB) avz#=TOKRB_GetAngularVelocityZ#(RB) CrossProduct avx#,avy#,avz#,px#-TOKRB_GetX#(RB),py#-TOKRB_GetY#(RB),pz#-TOKRB_GetZ#(RB) CProd\x#=CProd\x#+vx# CProd\y#=CProd\y#+vy# CProd\z#=CProd\z#+vz# End Function Function MakeTokCollider(mesh) scount=CountSurfaces(mesh) For ind=1 To scount surface=GetSurface(mesh,ind) ttltris=ttltris+CountTriangles(surface) ttlvert=ttlvert+CountVertices(surface) Next vertices=CreateBank(16*ttlvert) triangles=CreateBank(24*ttltris) offsetv=0 offsett=0 For ind=1 To scount surface = GetSurface(mesh,ind) ctr=CountTriangles(surface) tric=tric+cvt cvt=CountVertices(surface) ;fill bank with vertices For v=0 To cvt-1 PokeFloat vertices,offsetv,VertexX#(surface,v) PokeFloat vertices,offsetv+4,VertexY#(surface,v) PokeFloat vertices,offsetv+8,VertexZ#(surface,v) PokeFloat vertices,offsetv+12,0.0 offsetv=offsetv+16 Next ;fill bank with triangles For v=0 To ctr-1 PokeInt triangles,offsett,tric+TriangleVertex(surface,v,0) PokeInt triangles,offsett+4,tric+TriangleVertex(surface,v,1) PokeInt triangles,offsett+8,tric+TriangleVertex(surface,v,2) PokeInt triangles,offsett+12,2 ; Material ID PokeInt triangles,offsett+16,0 PokeInt triangles,offsett+20,0 offsett=offsett+24 Next Next ;Hand over the terrain data to Tokamak TOKSIM_SetStaticMesh vertices,ttlvert,triangles,ttltris ; Now we can free the banks as Tokamak has copied all data FreeBank vertices FreeBank triangles End Function Function RemoveComponent(x1#,y1#,z1#,x2#,y2#,z2#) tmpdot# = DotProduct#(x1#,y1#,z1#,x2#,y2#,z2#) CProd\x#=x1#-x2#*tmpdot# CProd\y#=y1#-y2#*tmpdot# CProd\z#=z1#-z2#*tmpdot# End Function Function GripFactor#(Vel#) If Vel#>=0.0 And Vel<3.0 Then GripFactor#=0.50 EndIf If Vel#>=3.0 And Vel<6.0 Then GripFactor#=0.95 EndIf If Vel#>=6.0 And Vel<10.0 Then GripFactor#=0.97 EndIf If Vel#>=10.0 And Vel<15.0 Then GripFactor#=0.98 EndIf If Vel#>=15.0 Then GripFactor#=0.99 EndIf Return 0.999 Return GripFactor# End Function Function UpdateCamera(Camera,Target,Rate#) CamX#=EntityX#(Camera) CamY#=EntityY#(Camera) CamZ#=EntityZ#(Camera) DiffX#=EntityX#(Target)-CamX# DiffY#=EntityY#(Target)-CamY# DiffZ#=EntityZ#(Target)-CamZ# TranslateEntity Camera,DiffX#*Rate#,DiffY#*Rate#,DiffZ#*Rate# End Function |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Oje, so viel Code. Hab ich ja grad garkein Bok drauf. Aber warum zwingst du deinen Rechner sinnloses zu tun mit folgenden Codezeilen?
Code: [AUSKLAPPEN] Repeat
elapsed=MilliSecs()-time Until elapsed Genau dafür gibt es ja CreateTimer ![]() ![]() Zu deiner Frage. Eventuell könnte dein Problem mit CaptureWorld ![]() |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
Ardalic |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Thx, ich hab das problem selbst gelöst es.
Es lag an den Dll-Datei, jetzt gehts ![]() ![]() ![]() ![]() Aber ich habe noch ein frage. Irgendwie werden meine Transparente Texturen nicht durchsichticht. Ich benutze Photoshop |
||
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
Setze den richtigen Textur-Flag beim Laden, am besten in der OH lesen. | ||
Ardalic |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das verstehe ich nicht Ganz.
Jedenfalls habe ich alle Model und Texture zusammen. Wenn das hilfreich ist. |
||
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
LoadTexture![]() Einfach lesen was bei "Modus" steht. Tipp: Stichwort Alpha-Masked |
||
Ardalic |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Aber die TExture ist mit dem Model schon verschmolzen. | ||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Schon TextureFilter![]() |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
Ardalic |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
thx ![]() Jetzt klapt es. Jetzt hab ich noch ein problem ![]() Ich habe jetzt Wasser und ein Skybox aber jetzt hängt es so sehr das sind nicht mal ein Bild pro Sek. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group