[B3D] Physik 4WD Buggy in 3D
Übersicht

![]() |
hecticSieger des IS Talentwettbewerb 2006Betreff: [B3D] Physik 4WD Buggy in 3D |
![]() Antworten mit Zitat ![]() |
---|---|---|
So, hier jetzt mal die 3D-Version des Physik-Buggy's.
Steuerung: Cursor hoch/runter - vor/zurück -fahren Cursor links/rechts - links/rechts -lenken Space - Fahrzeug heben bzw. drehen falls umgekippt A - Federbeine verlängern (Geländewagen) Y - Federbeine verkürzen (Rennwagen) Enter - Kamera festsetzen bzw. Verfolgungsmodus Mausbewegung - Kameraperspektive Code: [AUSKLAPPEN] ;Grafikkramm
Const gfx=1024 Const gfy=gfx*.75 Const ghx=gfx/2 Const ghy=gfy/2 Graphics3D gfx,gfy,32,1 SetBuffer BackBuffer() ;Visualisierung light=CreateLight() camera=CreateCamera() CameraRange camera,1,3000 RotateEntity light,60,30,0 CameraClsColor camera,80,80,80 PositionEntity camera,-20,16,-20 ;Fahrzeug-Mesh Global mesh=CreateMesh() Global brush=CreateBrush() Global face=CreateSurface(mesh,brush) EntityAlpha mesh,1 EntityFX mesh,3 ;Himmel erstellen sky=CreateMesh() skyface=CreateSurface(sky,brush) v0=AddVertex(skyface,0,160,0) v1=AddVertex(skyface,-1000,-4,-1000) v2=AddVertex(skyface,-1000,-4,+1000) v3=AddVertex(skyface,+1000,-4,-1000) v4=AddVertex(skyface,+1000,-4,+1000) VertexColor skyface,v0,40,40,40 VertexColor skyface,v1,240,240,120 VertexColor skyface,v2,0,240,120 VertexColor skyface,v3,240,0,0 VertexColor skyface,v4,240,240,120 AddTriangle skyface,v0,v2,v1 AddTriangle skyface,v0,v4,v2 AddTriangle skyface,v0,v3,v4 AddTriangle skyface,v0,v1,v3 EntityFX sky,2 ;Boden erstellen plane=CreatePlane() mirror=CreateMirror() EntityColor plane,40,40,40 PositionEntity plane,0,-4,0 PositionEntity mirror,0,-4,0 EntityAlpha plane,.5 EntityType plane,2 ;Block1 erstellen cube1=CreateCube() ScaleEntity cube1,20,20,20 RotateEntity cube1,45,20,0 PositionEntity cube1,0,-3.9,200 EntityType cube1,2 ;Block2 erstellen cube2=CreateCube() ScaleEntity cube2,20,2,20 PositionEntity cube2,100,-3.9,200 EntityType cube2,2 ;VK-Ausgleichberechnung rp=CreatePivot() Type kp ;KnotenPunkte Field xg# ;X-Speed Field yg# ;Y-Speed Field zg# ;Z-Speed Field pv% ;Pivot End Type Type vk ;VerKlinkungen Field k1% ;KP-1 Field k2% ;KP-2 Field fd% ;Federung Field df% ;Dämpfung Field ln# ;Solllänge End Type dx#=0 dy#=0 dz#=0 ds#=0 lk#=0 ;Lenkposition fl#=7 ;Federbeinlänge fest%=1 ;Kameraposition ;Add-KP Restore KP While pv<>-1 Read dx,dy,dz,pv If pv<>-1 new_kp(dx,dy,dz,pv) Wend ;Add-VK Restore VK While df<>-1 Read v1,v2,fd,df If df<>-1 new_vk(v1,v2,fd,df) Wend ;Karosserietriangles AddTriangle face,0,1,2 AddTriangle face,0,2,8 AddTriangle face,0,8,7 AddTriangle face,0,7,1 AddTriangle face,1,2,5 AddTriangle face,5,2,6 AddTriangle face,2,4,6 AddTriangle face,6,4,8 AddTriangle face,4,3,8 AddTriangle face,8,3,7 AddTriangle face,3,1,7 AddTriangle face,7,1,5 AddTriangle face,2,1,4 AddTriangle face,4,1,3 AddTriangle face,5,6,8 AddTriangle face,8,7,5 VertexColor face,0,240,240,240,1 VertexColor face,1,20,20,20,1 VertexColor face,2,20,20,20,1 VertexColor face,3,20,20,20,1 VertexColor face,4,20,20,20,1 VertexColor face,5,120,120,120,1 VertexColor face,6,120,120,120,1 VertexColor face,7,120,120,120,1 VertexColor face,8,120,120,120,1 Collisions 1,2,2,2 ;====-===-==-=-=--=---=----=---- --- -- - - - - - ;Hauptschleife While Not KeyHit(1) ;Extrahärte For w=1 To 6 ;VerKlinkungen For vk.vk=Each vk k1.kp=Object.kp(vk\k1) k2.kp=Object.kp(vk\k2) ds=vk\ln-EntityDistance(k1\pv,k2\pv) PositionEntity rp,EntityX(k1\pv),EntityY(k1\pv),EntityZ(k1\pv) PointEntity rp,k2\pv,0 MoveEntity rp,0,0,ds dx=(EntityX(k1\pv)-EntityX(rp)) dy=(EntityY(k1\pv)-EntityY(rp)) dz=(EntityZ(k1\pv)-EntityZ(rp)) MoveEntity k1\pv,+dx/vk\fd,+dy/vk\fd,+dz/vk\fd k1\xg=k1\xg+dx/vk\df k1\yg=k1\yg+dy/vk\df k1\zg=k1\zg+dz/vk\df MoveEntity k2\pv,-dx/vk\fd,-dy/vk\fd,-dz/vk\fd k2\xg=k2\xg-dx/vk\df k2\yg=k2\yg-dy/vk\df k2\zg=k2\zg-dz/vk\df Next Next UpdateWorld ;KnotenPunkte vertexcounter=0 For kp.kp=Each kp kp\yg=kp\yg-.0022 MoveEntity kp\pv,kp\xg,kp\yg,kp\zg If CountCollisions(kp\pv)>0 kp\xg=0:kp\yg=0:kp\zg=0 VertexCoords face,vertexcounter,EntityX(kp\pv),EntityY(kp\pv),EntityZ(kp\pv) vertexcounter=vertexcounter+1 Next ;Vorwärts If KeyDown(200) For q=0 To 7 Step 1 For w=16 To 46 Step 10 k1.kp=Object.kp(q+w) k2.kp=Object.kp(w+((q+1) Mod 8)) dx=(EntityX(k1\pv)-EntityX(k2\pv))/40 dy=(EntityY(k1\pv)-EntityY(k2\pv))/40 dz=(EntityZ(k1\pv)-EntityZ(k2\pv))/40 k1\xg=k1\xg-dx k1\yg=k1\yg-dy k1\zg=k1\zg-dz Next Next End If ;Rückwärts If KeyDown(208) For q=0 To 7 Step 1 For w=16 To 46 Step 10 k1.kp=Object.kp(q+w) k2.kp=Object.kp(w+((q+1) Mod 8)) dx=(EntityX(k1\pv)-EntityX(k2\pv))/45 dy=(EntityY(k1\pv)-EntityY(k2\pv))/45 dz=(EntityZ(k1\pv)-EntityZ(k2\pv))/45 k1\xg=k1\xg+dx k1\yg=k1\yg+dy k1\zg=k1\zg+dz Next Next End If ;Tastaturabfragen If KeyHit(28) fest=1-fest ;heben/drehen If KeyDown(57) k1.kp=Object.kp(6):k1\yg=k1\yg+.028 k1.kp=Object.kp(7):k1\yg=k1\yg+.028 k1.kp=Object.kp(8):k1\yg=k1\yg+.028 k1.kp=Object.kp(9):k1\yg=k1\yg+.028 End If ;Abschnitt für Lenkung If KeyDown(203) lk=lk-.1:If lk<-2.2 lk=-2.2 If KeyDown(205) lk=lk+.1:If lk>+2.2 lk=+2.2 lk=lk-Sgn(lk)/20 vk.vk=First vk:vk\ln=13.4-lk vk.vk=After vk:vk\ln=13.4+lk ;Abschnitt für Dämpfer If KeyDown(30) fl=fl+.02 If KeyDown(44) fl=fl-.02 vk.vk=After vk:vk\ln=fl vk.vk=After vk:vk\ln=fl vk.vk=After vk:vk\ln=fl vk.vk=After vk:vk\ln=fl ;Abschnitt für Kamera k1.kp=Object.kp(1) ds=(EntityDistance(camera,k1\pv))-30:ds=ds*fest MoveEntity camera,MouseXSpeed(),(ds/8)-MouseYSpeed(),ds PositionEntity sky,EntityX(camera),0,EntityZ(camera) PointEntity camera,k1\pv MoveMouse ghx,ghy RenderWorld ms=MilliSecs():Text 0,0,fps+" fps"; Auf 100 fps bestimmt If ms>mt mt=ms+254:fps=frame:frame=0 Else frame=frame+4 Flip Wend End ;====-===-==-=-=--=---=----=---- --- -- - - - - - ;KnotenPunkt erstellen Function new_kp(xp#,yp#,zp#,sw%) kp.kp=New kp If sw=0 kp\pv=CreatePivot():ScaleEntity kp\pv,.1,.1,.1 If sw=1 kp\pv=CreatePivot():EntityType kp\pv,1:EntityRadius kp\pv,.1 If sw=2 kp\pv=CreateSphere(8):EntityType kp\pv,1:EntityColor kp\pv,32,32,32 PositionEntity kp\pv,xp,yp,zp AddVertex(face,xp,yp,zp) Return Handle(kp) End Function ;VerKlinkung erstellen Function new_vk(k1%,k2%,fd%,df%) vk.vk=New vk vk\k1=k1 vk\k2=k2 If fd<1 fd=1 If df<1 df=1 vk\fd=(fd+1)^2 vk\df=(df+1)^2 p1.kp=Object.kp(k1) p2.kp=Object.kp(k2) vk\ln=EntityDistance(p1\pv,p2\pv) End Function .KP;Koordinaten der KnotenPunkte Data 0,8,-2,1 ;Dachspitze Data -3,2,6,1, 3,2,6,1, -3,2,-6,1, 3,2,-6,1 ;Fahrzeugboden Data -3,5,8,1, 3,5,8,1, -3,6,-8,1, 3,6,-8,1 ;Fahrzeughaube Data -3,9,5,0, 3,9,5,0, -3,9,-5,0, 3,9,-5,0 ;Radlagerhalterung Data -5,2,6,0, 3,2,6,0 ;Achse VL Data -5,3.7,6,2, -5,3.2,7.2,2, -5,2,7.7,2, -5,0.8,7.2,2 ;Reifen VL Data -5,0.3,6,2, -5,0.8,4.8,2, -5,2,4.3,2, -5,3.2,4.8,2 ;Reifen VL Data 5,2,6,0, -3,2,6,0 ;Achse VR Data 5,3.7,6,2, 5,3.2,7.2,2, 5,2,7.7,2, 5,0.8,7.2,2 ;Reifen VR Data 5,0.3,6,2, 5,0.8,4.8,2, 5,2,4.3,2, 5,3.2,4.8,2 ;Reifen VR Data -5,2,-6,0, 3,2,-6,0 ;Achse HL Data -5,3.7,-6,2, -5,3.2,-4.8,2, -5,2,-4.3,2, -5,0.8,-4.8,2 ;Reifen VL Data -5,0.3,-6,2, -5,0.8,-7.2,2, -5,2,-7.7,2, -5,3.2,-7.2,2 ;Reifen VL Data 5,2,-6,0, -3,2,-6,0 ;Achse HR Data 5,3.7,-6,2, 5,3.2,-4.8,2, 5,2,-4.3,2, 5,0.8,-4.8,2 ;Reifen VR Data 5,0.3,-6,2, 5,0.8,-7.2,2, 5,2,-7.7,2, 5,3.2,-7.2,2 ;Reifen VR Data -1,-1,-1,-1 ;KP-Ende .VK;Verweise der VerKlinkungen Data 04,15,1,1, 05,25,1,1, 14,10,4,12, 24,11,4,12, 34,12,4,12, 44,13,4,12 ;Lenkung und Federung/Dämpfung ;Data 04,15,1,1, 05,25,1,1, 14,10,1,1, 24,11,1,1, 34,12,1,1, 44,13,1,1 ;Lenkung und Federung/Dämpfung Data 02,04,1,1, 03,05,1,1, 06,08,1,1, 07,09,1,1, 10,12,1,1, 11,13,1,1, 02,03,1,1, 04,05,1,1 ;Fahrzeug Data 06,07,1,1, 08,09,1,1, 10,11,1,1, 12,13,1,1, 02,06,1,1, 03,07,1,1, 04,08,1,1, 05,09,1,1 ;Fahrzeug Data 02,10,1,1, 03,11,1,1, 04,12,1,1, 05,13,1,1, 02,08,1,1, 04,06,1,1, 03,09,1,1, 05,07,1,1 ;Fahrzeug Data 02,12,1,1, 04,10,1,1, 03,13,1,1, 05,11,1,1, 03,06,1,1, 07,02,1,1, 03,10,1,1, 11,02,1,1 ;Fahrzeug Data 05,08,1,1, 09,04,1,1, 05,12,1,1, 13,04,1,1, 06,10,1,1, 07,11,1,1, 08,12,1,1, 09,13,1,1 ;Fahrzeug Data 02,05,1,1, 03,04,1,1, 06,09,1,1, 07,08,1,1, 10,13,1,1, 11,12,1,1, 01,02,1,1, 01,03,1,1, 01,04,1,1, 01,05,1,1 ;Fahrzeug Data 16,17,1,1, 17,18,1,1, 18,19,1,1, 19,20,1,1, 20,21,1,1, 21,22,1,1, 22,23,1,1, 23,16,1,1 ;Reifenumfang VL Data 16,19,1,1, 19,22,1,1, 22,17,1,1, 17,20,1,1, 20,23,1,1, 23,18,1,1, 18,21,1,1, 21,16,1,1 ;Reifenstabilität VL Data 14,16,1,1, 14,17,1,1, 14,18,1,1, 14,19,1,1, 14,20,1,1, 14,21,1,1, 14,22,1,1, 14,23,1,1 ;Speichen VL Aussen Data 15,16,1,1, 15,17,1,1, 15,18,1,1, 15,19,1,1, 15,20,1,1, 15,21,1,1, 15,22,1,1, 15,23,1,1 ;Speichen VL Innen Data 14,15,1,1, 04,14,1,1, 15,11,1,1, 02,15,1,1 ;Sonstige VerKlinkungen für Rad VL Data 26,27,1,1, 27,28,1,1, 28,29,1,1, 29,30,1,1, 30,31,1,1, 31,32,1,1, 32,33,1,1, 33,26,1,1 ;Reifenumfang VR Data 26,29,1,1, 29,32,1,1, 32,27,1,1, 27,30,1,1, 30,33,1,1, 33,28,1,1, 28,31,1,1, 31,26,1,1 ;Reifenstabilität VR Data 24,26,1,1, 24,27,1,1, 24,28,1,1, 24,29,1,1, 24,30,1,1, 24,31,1,1, 24,32,1,1, 24,33,1,1 ;Speichen VR Aussen Data 25,26,1,1, 25,27,1,1, 25,28,1,1, 25,29,1,1, 25,30,1,1, 25,31,1,1, 25,32,1,1, 25,33,1,1 ;Speichen VR Innen Data 24,25,1,1, 05,24,1,1, 25,10,1,1, 03,25,1,1 ;Sonstige VerKlinkungen für Rad VR Data 36,37,1,1, 37,38,1,1, 38,39,1,1, 39,40,1,1, 40,41,1,1, 41,42,1,1, 42,43,1,1, 43,36,1,1 ;Reifenumfang HL Data 36,39,1,1, 39,42,1,1, 42,37,1,1, 37,40,1,1, 40,43,1,1, 43,38,1,1, 38,41,1,1, 41,36,1,1 ;Reifenstabilität HL Data 34,36,1,1, 34,37,1,1, 34,38,1,1, 34,39,1,1, 34,40,1,1, 34,41,1,1, 34,42,1,1, 34,43,1,1 ;Speichen HL Aussen Data 35,36,1,1, 35,37,1,1, 35,38,1,1, 35,39,1,1, 35,40,1,1, 35,41,1,1, 35,42,1,1, 35,43,1,1 ;Speichen HL Innen Data 34,35,1,1, 02,34,1,1, 02,35,1,1, 35,13,1,1, 04,35,1,1 ;Sonstige VerKlinkungen für Rad HL Data 46,47,1,1, 47,48,1,1, 48,49,1,1, 49,50,1,1, 50,51,1,1, 51,52,1,1, 52,53,1,1, 53,46,1,1 ;Reifenumfang HR Data 46,49,1,1, 49,52,1,1, 52,47,1,1, 47,50,1,1, 50,53,1,1, 53,48,1,1, 48,51,1,1, 51,46,1,1 ;Reifenstabilität HR Data 44,46,1,1, 44,47,1,1, 44,48,1,1, 44,49,1,1, 44,50,1,1, 44,51,1,1, 44,52,1,1, 44,53,1,1 ;Speichen HR Aussen Data 45,46,1,1, 45,47,1,1, 45,48,1,1, 45,49,1,1, 45,50,1,1, 45,51,1,1, 45,52,1,1, 45,53,1,1 ;Speichen HR Innen Data 44,45,1,1, 03,44,1,1, 03,45,1,1, 45,12,1,1, 05,45,1,1 ;Sonstige VerKlinkungen für Rad HR Data -1,-1,-1,-1 ;VK-Ende Dorn im Auge sind mir folgende Codezeilen: Code: [AUSKLAPPEN] ds=vk\ln-EntityDistance(k1\pv,k2\pv)
PositionEntity rp,EntityX(k1\pv),EntityY(k1\pv),EntityZ(k1\pv) PointEntity rp,k2\pv,0 MoveEntity rp,0,0,ds Das Entity rp eird zur Berechnung der Verklingungen (virtuelle Stangen) benutzt um gerausfinden zu können wie weit eine Verformung statt gefunden hat bzw. um deren Korrektur in X,Y und Z berechnen zu können. Falls jemand hier ein besseren Vorschlag, so immer her damit. Und jetzt, viel Spaß. |
||
![]() |
StepTiger |
![]() Antworten mit Zitat ![]() |
---|---|---|
also naja!
Das letzte mal ist der wahrlich ein Meisterstreich gelungen, was man diesmal jedoch nicht behaupten kann. Schlecht ist es nicht, jedoch noch sehr Bug-reich Bild: Auch die Steuerung ist ziemlich doof. Es gibt kein Bremsen, sondern nur ein Vorwärts oder Rückwärts und kein Mittelding |
||
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer: AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t Gewinner: BP Code Compo #2 Π=3.141592653589793238...<--- und das aus dem kopf ![]() Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kollisionsabfragen gehen nur aus Knotenpunkten aus, da diese auch die Masse mit sich bringen. Falls Verbesserungsvorschläge dazu anliegen, bin ich gerne bereits es nochmal unter die Lupe zu nehmen. Zudem wird es, eingesetzt in einem Spiel, wohl kaum solche scharfen Kanten geben. Eine Möglichkeit es denoch mit bereits vorhandenen Mitteln in den Griff zu bekommen währe, der Karosserie mehr Knotenpunkte zu verpassen. Doch dieses würde sich irgendwann an den FPS rächen. Zudem wurde in diesem Beispiel auf eine Deltavariable verzichtet, da es sowieso kaum möglich ist in einem solchen Beispiel gebräuchlich anzuwenden.
So 'schön' das ganze ist, bringt es auch jede Menge Nachteile mit sich. u.a. - Es gibt keine Möglichkeit das Fahrzeug einfach und schnell via PositionEntity um zu positionieren. - Noch schwieriger währe eine Anwendung via RotateEntity. - Problem gibt es auch, wenn man das Fahrzeug mit hochen Geschwindigkeiten fahren möchte. Dies kommt daher, weil die Geschwindigkeit hier über den Bodenkontakt der Reifen zu stande kommt und nicht wie in anderen Spielen üblich durch eine Fahrzeuggeschwindigkeitsvariable. edit1: 284 fps, sind etwas mehr als ich vorgesehen hatte. Die Spielgeschwindigkeit wurde von mir auf 100 fps abgestimmt. edit2: Zu der Steuerung, es soll ein Programmbeispiel sein, nicht ein Spiel was ich jetzt raus bringen wollte. Mein Ziel war es, da ganze möglichst einfach zu gestallten, so das jemand der sich daran interessiert auch was damit machen kann um selbst weiter oder aufgrund der Idee was selbst programmiert. Die Geschwindigkeit ist jetzt vorgelegt auf /40, wird die Zahl kleiner so fährt das Fahrzeug schneller. Die Größenänderungen sind dazu nicht linear. |
||
![]() |
StepTiger |
![]() Antworten mit Zitat ![]() |
---|---|---|
noch was:
fährt man die Federbeine aus oder ein, so drehen sie sich um die Längsachse des Fahrzeuges. *edit* Das am Anfang einfügen: Code: [AUSKLAPPEN] ;FPS
Const FPS_MAX=100 Const FPS_TIME#=1000/FPS_MAX Global FPS_LAST=MilliSecs() Das am Anfang der Schleife einfügen: Code: [AUSKLAPPEN] While MilliSecs()<FPS_LAST+FPS_TIME#:Delay FPS_LAST+FPS_TIME#-MilliSecs()-1:Wend:FPS_LAST=MilliSecs()
|
||
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer: AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t Gewinner: BP Code Compo #2 Π=3.141592653589793238...<--- und das aus dem kopf ![]() Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
![]() |
BlitzcoderNewsposter |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey, schreib nächstes mal bitte dazu, dass es süchtig macht!
Wenn man die Federbeine sehr hoch einstellt, klappen die Räder unten weg, und es entstehen seltsame Dinge. Ich hatte eben 3 Räder an den richtigen Stellen und eins quer auf dem Dach des Autos. Wenn du noch etwas Rutschen einbauen würdest(Bodenhäftung verlieren) bzw. es etwas abmildern würdest (Ist der Boden Eis?!), dann wäre es perfekt. Weiter so! MfG Blitzcoder |
||
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________ |°°°°°°°°°°°°°°||'""|""\__,_ |______________ ||__ |__|__ |) |(@) |(@)"""**|(@)(@)****|(@) |
- Zuletzt bearbeitet von Blitzcoder am Sa, Nov 11, 2006 18:54, insgesamt einmal bearbeitet
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, also, das Fahrzeug ist kein Entity was nur umpositioniert wird etc. Jede Ecke des Fahrzeugs, jede Sphere am Rad und weitere unsichtbare Pivots sind bestandteile vom ganzem Fahrzeug. Diese Bestandteile werden durch Verklingungen (virtuelle Stangen) zusammen gehalten. Dabei wird nur zur Solllänge korrigiert, nicht nach einem eventuellem Sollwinkel. Das bedeutet, wenn eine Verformungen überstrapaziert wird, dann kann der eine oder andere Knotenpunkt in eine Nichtsollposition plopen. So wie eine kleine Beule in einem Blech, in die eine oder andere Richtung gedrückt werden kann, aber nie in eine Nullposition in dem das Blech dann wieder plan ist. Eingesetzt in einem Spiel würde eine Überstrapazierung dazu führen das, dass Fahrzeug dann geschrottet wird und der Spieler das Spiel somit verloren hat.
Beispiel: In Bridgebuilder wurde das Problem auf gleicher art und weise gelöst. Wird eine Verklinkung zu stark beansprucht, so wird sie einfach gelöscht und das System droht zusammen zu brechen. Dabei reissen die Verbindungen schon bei einer extremst geringer Beanspruchung weg. edit1: @BlitzCoder, Eis kannst du haben. Ändere dazu folgende Zeile (on the fly) Code: [AUSKLAPPEN] If CountCollisions(kp\pv)>0 kp\xg=0:kp\yg=0:kp\zg=0
um zu Code: [AUSKLAPPEN] If CountCollisions(kp\pv)>0 kp\xg=kp\xg/50:kp\yg=kp\yg/50:kp\zg=kp\zg/50
|
||
![]() |
Pdd |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jop, net schlecht, sollte aber noch etwas verbesserung mitbringen ![]() Hatte auch eben folgendes: ![]() schon etwas komich o.O |
||
Lieber Apfel als Birne. |
![]() |
BlitzcoderNewsposter |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hectic, Ich meinte nicht, dass ich Eis will, sondern, dass es jetzt halb wie Eis wirkt. Man rutscht zwar nicht in der Kurve nach aussen, aber er dreht durch wie auf Eis. | ||
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________ |°°°°°°°°°°°°°°||'""|""\__,_ |______________ ||__ |__|__ |) |(@) |(@)"""**|(@)(@)****|(@) |
![]() |
Christoph |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe auch probiert ein 3D "Auto" auf diese Weise zu machen.
Leider habe ich keine Ahnung wie man es schafft, das Federung nur hoch und runter geht (sodass die Reifen z.B. nicht bei zu hohen Kräften im Auto verschwinden) So wie ich sehe hast du's aber auch nicht geschafft (oder irre ich mich?), das die Reifen bei seitlichen Kräften einigermaßen in Form bleiben |
||
c64 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Solche feinen codeschnippsel (naja hier eher ein Codetönnchen ![]() Ich denke wer dies braucht wird seinen nutzen davon haben. Und die jeniegen die sich mit sowas beschäfftigen (wollen), haben einen echt prima Code den sie sich hier angucken können. |
||
Betreten verboten! Kinder haften für ihre Eltern! |
![]() |
Christoph |
![]() Antworten mit Zitat ![]() |
---|---|---|
@hectic
Ich habe mich mit deinem Code befasst, und finde toll was du geleistet hast. Ich habe mir selbst (ab und zu mit anderen Lösungsideen) so etwas in der Art geschrieben, und bin erstaunt, wie echt diese Methode an der Realität liegt. Großes Lob, dein Code hat mir sehr geholfen... ![]() |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Blitzcoder,
das Fahrzeug rutscht schon seitlich bei Kurvenfahrten, man sieht es nur nicht so gut, da der Boden keine Textur hat. Setzt man die kamera fest [Enter] und bewegt diese auf eine etwas höhere Position [Maus], dann kann man es denoch sehen. Absolute Haftung bekommt man aber auch mit Collisions 1,2,2,1 nur sollte man dann stets versucht sein nicht mit der Karosserie irgendwo gegen zu kommen. @Christoph, man kann verhindern, daß Federbeine ins Auto gehen, indem man Begrenzer einbaut. Also eine Abfrage die kontrolliert, ob die Federbeine (VK) eine minimal/maximal -Länge erreicht haben oder nicht, wenn ja, dann die Härte dieser hochdrehen (zB auf vk\df = 4, und vk\fd = 4). Falls du aber damit meinst, daß die Räder nicht ins Auto kippen sollen beim eindrücken (also parallel nach oben/unten gehen sollen) so könnte man die entsprechende Mechanik verändern, die das macht. Aber auch bei reelen Autos drehen/kippen die Räder ins Auto, nur haben die da auch keinen Federweg von 50cm und mehr, wo man es dann auch als solches erkennen könnte. edit1: Ich kann ja mal versuchen die VK so umzuändern, daß die Räder sich parallel nach oben/unten drücken lassen. Sollte kein Problem darstellen. Morgen kommt dann die neue VK-Tabelle zum testen. Heute muß ich noch arbeiten gehen. grrrr. Also seid Nachsichtig. |
||
![]() |
NightPhoenix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich find das voll krass lustig... ![]() Ich war echt am dauergrinsen vorm Monitor als ich mit dem Ding hantiert habe... Das hat echt Dauer-Unterhaltungspotenzial ![]() Wenn man ne minute lang a drückt (oder wars y?) dann wirbel die reifen durch die Luft : Dann hatte ich noch einen Reifenschaden... ![]() naja da ich schnell weiter wollte hab ich das fahrzeug einfach umgedreht... damit war der kaputte Reifen wieder ganz ^^ Wenns ein Spiel wäre würde ich das jeden Tag in meinen Pausen zocken ![]() Da es aber eine Physikengine werden soll würde ich sagen du baust erstmal sowas wie ne Begrenzung für A und Y ein.... obwohls damit richtig lustig ist. Is nicht böse gemeint ![]() MfG. NightPhoenix |
||
![]() |
Pdd |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn ich mir die bilder so angugge, denke ich, man könnte es auch so lasse... xD | ||
Lieber Apfel als Birne. |
![]() |
biggicekey |
![]() Antworten mit Zitat ![]() |
---|---|---|
hey,
das is wirklich cool. hab mir gleich mal ne strecke gebaut um drauf rumzufahren und zu testen. naja mir is das ganze nur etwas "unagil". sprich die lenkung zu schwach und geschwindigkeit zu träge. hab schon bischen rumprobiert aber von der erhöhung der umdrehungzahl der räder wurd ich auch nicht schneller. ich hab auch schon solche autophysik versucht bin aber kläglich gescheitert und bei arcarde geblieben:P aber jetzt fängt dieses kribbeln nach simulation wieder an. also das dämpfverhalten find ich spitze. kann man bestimmt noch einiges mit anfangen. gruß key |
||
#45 www.icekeyunlimited.de www.starcrusade.de
Gewinner BCC#17 !!! mit dotkiller Nothing more to register - you've cleaned us out![/size] |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@biggicekey,
find ich ja cool das versucht wird, daraus ein Spiel zu machen. Bin selbst am testen. Das mit der Höhstgeschwindigkeit habe ich bereits beschrieben ("- Problem gibt es auch, wenn man das Fahrzeug mit hochen Geschwindigkeiten fahren möchte. Dies kommt daher, weil die Geschwindigkeit hier über den Bodenkontakt der Reifen zu stande kommt..."). Eine Möglichkeit währe aus den Reifen nur noch ein EntityRadius zu nehmen, und diesen dann manuell berechnen. Für die 2D-Version bin ich schon dabei es zu lösen und das Fahrzeug verhällt sich schon realistischer als die alte Version mit 8 Spheren (KP) pro Reifen. Wenn ich die 2D-Version gefertigt habe kann ich es mal mit der 3D-Version versuchen, nur kann ich noch nicht mit Matritzen umgehen, wo bereits hier meine Fähigkeiten scheitern. Mal sehen wie die 2D-Version erstmal wird... Lenkung kannst du stärker haben, wenn du die 2.2 am Ende der Zeilen vergrösserst. Code: [AUSKLAPPEN] ;Abschnitt für Lenkung
Nur sollte beachtet werden, daß dafür die Räder anders aufgehängt werden sollten, da es hier zu unschönem Verhalten kommen würde. Die Aufhängung habe hier deshalb so gemacht, damit bei Kurvenfahrten die äusseren Räder schon bei ihrem Einschlag einen größeren Radius fahren.
If KeyDown(203) lk=lk-.1:If lk<-2.2 lk=-2.2 If KeyDown(205) lk=lk+.1:If lk>+2.2 lk=+2.2 Noch was, wenn man daraus kein Rennspiel auf Asphalt macht, sondern eine art Rennen auf dem Gelände, wo man eh nicht mit voller Geschwindigkeit fahren sollte, geht es ja denoch klar. Denke ich... @Christoph, leider habe ich noch keine Begrenzer geschafft, ohne mehr Typeeinträge nutzen zu müssen. Aber bereits eine andere Aufhängung der VKs könnte das Problem lösen. Paralelles eindrücken der Räder ginge ganz einfach, wenn es für die Vorderräder keine Lenkung gäbe. So hatte ich keine Lust zwei Lenkstangen pro Rad einzubauen, also suche ich noch weiter an anderen Lösungen. Zuerst aber die verbesserte 2D-Version.[/code] |
||
![]() |
Christoph |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hier hab ich mal (bevor dieser Thread entstand) etwas gemacht, das das gleiche Prinzip verwendet wie deine 2D Version, mein Versuch allerdings da Reifen dranzumachen ist wegen dem oben genannten Problem fehlgeschlagen ![]() W-Eine Kraft erstellen, die den Würfel von dir wegtreibt S-Eine Kraft erstellen, die den Würfel zu dir treibt A-Eine Kraft erstellen, die den Würfel nach links treibt D-Eine Kraft erstellen, die den Würfel nach rechts treibt 2- Sturm erstellen Kfd- Variable für die Härte des Würfels (umso kleiner, umso härter ist der Würfel, Werte ab 1 erlaubt) Code: [AUSKLAPPEN] Const Gmx=640,Gmy=gmx/4*3,Gmx2=gmx/2,Gmy2=Gmy/2
;Weiche einstellen (Umso höher, umso weicher) Const Kfd#=1 Const AUTO_TYPE=1,HIND_TYPE=2 Graphics3D Gmx,Gmy,16,2 SetBuffer BackBuffer() SeedRnd MilliSecs() Global kn.kn,vk.vk Global Cam=createcamera() MoveEntity Cam,-3,10,-20 Global Licht=CreateLight() Global Auto,Autosur Global Funk=1 Global Wink#=0 Type kn Field ob,vnr Field xg#,yg#,zg# End Type Type vk Field kn1,kn2 Field fd# Field ln# End Type Createauto() Global plane=createplane() EntityType plane,HIND_TYPE EntityAlpha plane,0.5 Global hind2=createcube() ScaleEntity hind2,10,10,10 MoveEntity hind2,-30,0,30 EntityBox hind2,-10,10,10,20,20,20 RotateEntity hind2,0,0,-30 ScaleEntity hind2,10,5,10 EntityType hind2,HIND_TYPE Collisions AUTO_TYPE,HIND_TYPE,2,2 Global var1 Repeat Moveauto UpdateWorld RenderWorld Select Funk Case 1:Modus$="Normal" Case 2:Modus$="Sturm" Case 3:Modus$="Schwerkraft" Default:Modus$="Undefiniert" End select Text 0,0,"Modus: "+Modus$ Flip Until KeyDown(1) End Function Moveauto() ;VerKlinkungen For vk.vk=Each vk kn1.kn=Object.kn(vk\kn1) kn2.kn=Object.kn(vk\kn2) dis_real#=EntityDistance(kn1\ob,kn2\ob) x1#=EntityX(kn1\ob):y1#=EntityY(kn1\ob):z1#=EntityZ(kn1\ob) x2#=EntityX(kn2\ob):y2#=EntityY(kn2\ob):z2#=EntityZ(kn2\ob) PointEntity kn1\ob,kn2\ob:PointEntity kn2\ob,kn1\ob dis#=((dis_real-vk\ln#)*0.5)/vk\fd MoveEntity kn1\ob,0,0,dis MoveEntity kn2\ob,0,0,dis x3#=EntityX(kn1\ob):y3#=EntityY(kn1\ob):z3#=EntityZ(kn1\ob) x4#=EntityX(kn2\ob):y4#=EntityY(kn2\ob):z4#=EntityZ(kn2\ob) PositionEntity kn1\ob,x3,y3,z3 PositionEntity kn2\ob,x4,y4,z4 kn1\xg=kn1\xg+(x3-x1) kn1\yg=kn1\yg+(y3-y1) kn1\zg=kn1\zg+(z3-z1) kn2\xg=kn2\xg+(x4-x2) kn2\yg=kn2\yg+(y4-y2) kn2\zg=kn2\zg+(z4-z2) Next If KeyHit(3) Then Funk=2 ;KnotenPunkte For kn.kn=Each kn If Funk=1 Then If KeyDown(16) Then kn\yg=kn\yg+0.01 If KeyDown(17) Then kn\zg=kn\zg+0.01 If KeyDown(31) Then kn\zg=kn\zg-0.01 If KeyDown(30) Then kn\xg=kn\xg-0.01 If KeyDown(32) Then kn\xg=kn\xg+0.01 ElseIf Funk=2 Then kn\xg=kn\xg-0.01 If EntityInView(Auto,Cam)=0 Then For t.kn=each kn PositionEntity t\ob,0,50+rnd(-1,1),20+rnd(-1,1) VertexCoords Autosur,t\vnr,EntityX(t\ob),EntityY(t\ob),EntityZ(t\ob) t\xg=0:t\yg=0:t\zg=0 Next Funk=1 EndIf EndIf kn\yg=kn\yg-.002 If CountCollisions(kn\ob)>0 Then kn\xg=0:kn\yg=0:kn\zg=0 TranslateEntity kn\ob,kn\xg,kn\yg,kn\zg VertexCoords Autosur,kn\vnr,EntityX(kn\ob),EntityY(kn\ob),EntityZ(kn\ob) Next End function Function New_knot(x#,y#,z#) kn.kn=new kn kn\ob=CreatePivot() PositionEntity kn\ob,x,y,z EntityRadius kn\ob,0.1 EntityType kn\ob,AUTO_TYPE kn\vnr=AddVertex(Autosur,x,y,z) VertexColor Autosur,kn\vnr,Rand(0,255),Rand(0,255),Rand(0,255) return Handle(kn.kn) End Function Function New_verk(kn_id1,kn_id2,fd#) vk.vk=new vk kn_1.kn=Object.kn(kn_id1) kn_2.kn=object.kn(kn_id2) vk\ln=EntityDistance(kn_1\ob,kn_2\ob) vk\kn1=kn_id1 vk\kn2=kn_id2 If fd<1 Then fd=1 vk\fd=fd+1 Return Handle(vk.vk) End Function Function Createauto() Auto=CreateMesh() EntityFX Auto,2+1 Autosur=CreateSurface(Auto) Restore Knotenpunkt Repeat Read x#,y#,z# If x<>-1 Or y<>-1 Or z<>-1 Then New_knot(x,y,z) Else Exit EndIf Forever ;Bok Add(1,2,5):Add(2,6,5):Add(1,7,3):add(1,5,7) add(3,8,4):add(3,7,8):add(5,6,7):add(6,8,7) add(2,3,4):add(2,1,3):add(2,4,8):add(6,2,8) Restore Verklinkung Repeat Read kn_1,kn_2,fd# If kn_1<>-1 Or kn_2<>-1 Or fd<>-1 Then New_verk(kn_1,kn_2,fd) Else Exit EndIf Forever For kn.kn=Each kn MoveEntity kn\ob,0,1,0 Next End Function Function Add(kn1=0,kn2=0,kn3=0) If kn1<>0 And kn2<>0 And kn3<>0 Then AddTriangle(Autosur,kn1-1,kn2-1,kn3-1) EndIf End Function .Knotenpunkt;x,y,z Data -1, 1, 1, 1, 1, 1, -1, 1,-1, 1, 1,-1;Karosserie 1-4 Data -1, 3, 1, 1, 3, 1, -1, 3,-1, 1, 3,-1;Karosserie 5-8 Data -1,-1,-1 .Verklinkung;kn1,kn2,fd Data 1,2,Kfd, 2,4,Kfd, 3,4,Kfd, 1,3,Kfd Data 1,5,Kfd, 2,6,Kfd, 4,8,Kfd, 3,7,Kfd Data 5,6,Kfd, 6,7,Kfd, 8,7,Kfd, 5,7,Kfd Data 1,7,Kfd, 5,3,Kfd, 3,8,Kfd, 7,4,Kfd Data 2,8,Kfd, 6,4,Kfd, 2,5,Kfd, 6,1,Kfd Data 5,8,Kfd, 7,6,Kfd, 3,2,Kfd, 1,4,Kfd Data 3,6,Kfd, 7,2,Kfd, 5,4,Kfd, 8,1,Kfd Data -1,-1,-1 Warum am Würfel keine Schatteneffekte angezeigt werden, weiß ich nicht... |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Schattierung bekommst du hin, wenn du EntityFX=2 ausschaltest. Denn es heisst: ql:EntityFX . Nur wird hier pro KP ein Vertice erstellt, was bedeutet, daß die Schattierung nicht besonders toll ist.
Mit dem Reifenproblem, weiß ich immer noch nicht welches der beiden du nun meinst. |
||
![]() |
Christoph |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das meine ich mit Reifenproblem:
Ich schaffe es nicht, dass die Reifen sich (hauptsächlich) nur nach oben und unten bewegen können. Das mit Entityfx 2 wegmachen hat nicht gefunzt. Der selbstgebastelte Würfel sieht so aus wie ein createcube() auf den kein Licht angewendet wird. |
||
![]() |
FOODy |
![]() Antworten mit Zitat ![]() |
---|---|---|
Tut mir schrecklich leid für das "Offtopic", aber nach dem ganzen was ich hier gelesen habe, möcht ich es auch gern ma antesten XD
Habe leider kein B3D... Kann es vllt jemand Kompilieren und hochladen?! Gruß, FOODy EDIT: @hectic: Ah. Muss mal gucken obs mit der Demo geht ^^ EDIT 2: Verdammte -.- Jetzt hab ich BlitzMax Demo gesaugt und meine BM Version überschrieben ich Troll <_> |
||
BlitzMax + MaxGUI, 64-bit Arch Linux: Intel Core² E8500 | 8 GB Ram | GeForce GTX 460 · 1024 MB |
- Zuletzt bearbeitet von FOODy am Di, Nov 14, 2006 16:59, insgesamt 2-mal bearbeitet
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group