Anpussung eines Entitys an einem 3ds-Objekt
Übersicht

BlackZeroBetreff: Anpussung eines Entitys an einem 3ds-Objekt |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
ich bin dabei ein kleines Rennspiel zu programmieren und zerreis mir die Harre daran wie ich es am besten hinbekomme, das auto an eine Strecke anzupassen die höhen und tiefen besitzt, d.h. eine Strecke mit auf und abfahrten (Berge etc.) So nun nach sehr sehr langem Suchen bin ich auf ein Quellcode gestoßen der eigentlich genau das kann was ich brauche, aber leider nur mit Terrains arbeiten kann, d.h. nicht mit 3ds Objekten. Ich habe verzweifelt versucht den Code umzuschreiben, aber es klappt einfach nicht. Habt ihr vielleicht eine Idee wie man den unteren Quellcode ändern müsste damit er auf Entitys reagiert und nicht auf Terrains ? Ich denke das ich nur was in der Hauptschleife ändern müsste oder lieg ich da falsch ? Ich denke dies hier könnte wichtig sein weil sich bei diesem code das auto an das terrain anpasst, jedoch nicht an meine 3ds strecke frontheight# = TerrainY(terrain,xnew,y,znew); get the height at new x,y,z man beachte jetzt nicht den ganzen kamera kram usw. ich möchte lediglich den Code so umändern das er auf Entitys funktioniert und nicht auf Terrains. naja gut, hier nun der komplette code: Code: [AUSKLAPPEN] ; ID: 67
; Author: MadJack ; Date: 2001-10-02 08:24:21 ; Title: Vehicle pitch and roll without child/pivot entities ; Description: Looks at a mesh as a single object on a terrain and calculates the pitch and roll ; my car test - Phil Jones ; a look at calculating vehicle pitch and roll (on a terrain) without ; child/pivot entities ;set up screen,light & camera Graphics3D 800,600,16 SetBuffer BackBuffer() light = CreateLight(1) ;create terrain terrain = LoadTerrain("heightmap_256.bmp") TerrainDetail terrain, 3000, True ScaleEntity terrain, 50,1000,50 PositionEntity terrain,-200,0,-200 terraintex = LoadTexture("boden.bmp") ScaleTexture terraintex,.4,.4 TerrainShading terrain,1 EntityTexture terrain,terraintex strecke = LoadMesh("strecke2.3ds") ScaleMesh strecke, 20,20,20 Const BODY = 1, REIFEN = 2, SZENE = 3 Collisions REIFEN, SZENE, 2, 3 EntityType strecke, SZENE ;create car/plane/tank whatever and centre it local co-ords car = LoadMesh("kart.3ds") ScaleMesh car,100,100,100 EntityType car, REIFEN carlength# = MeshDepth#(car)/2 ; get length from centre to front of car carwidth# = MeshWidth#(car)/2 ; get length from centre to left or right of car carheight# = MeshHeight#(car)/2: ; get height from centre To top Or bottom of car meshh = MeshHeight#(car)/2 FitMesh car, 0-carwidth,0,0-carlength,carwidth*2,carheight*2,carlength*2; just some general recentring to have car sit on plane pitch# = 0 x# = 200 y# = 600 z# = 480 speed# = 0 frontheight#=0 ; height of terrain at midpoint front of vehicle backheight#=0 ; height of terrain at midpoint back of vehicle leftheight#=0 ; height of terrain at midpoint left side of vehicle rightheight#=0 ; height of terrain at midpoint right side of vehicle th# = 0 ; height of terrain at centre of vehicle (this will averaged from front/back/left/right) PositionEntity car,x,y,z ; set up initial pos of car and camera ;RotateEntity car,0,180,0,1 ;setup camera camera = CreateCamera() PositionEntity camera ,300,350,100 PointEntity camera ,car CameraRange camera,1,900000 ;MAIN LOOP +++++++++++++++++++++++++++++++++ While Not KeyHit(1) ; get current location and overall height of car x# = EntityX (car) z# = EntityZ (car) y# = EntityY (car) ; check for keypress to alter car speed (A,Z) speed = speed -.5*(KeyDown(208) And speed > -10 ) + .5*(KeyDown(200) And speed < 10 ) ; check for keypress to turn car left/right turn = (KeyDown(203)) - (KeyDown(205)) TurnEntity car,0,turn,0 yaw# = EntityYaw(car) ; CALCULATE PITCH/ROLL ++++++++++++++++++++++++++++++++ ;work out terrainheights at front/back/left/right of car anglenew# = yaw -90 ; what must be added to yaw to calculate front of vehicle's global x,z co-ords xnew# = x+Cos(anglenew)*carlength znew# = z+Sin(anglenew)*carlength frontheight# = TerrainY(terrain,xnew,y,znew); get the height at new x,y,z anglenew# = yaw +90 ; what must be added to yaw to calculate back of vehicle's global x,z co-ords xnew# = x+Cos(anglenew)*carlength znew# = z+Sin(anglenew)*carlength backheight = TerrainY(terrain,xnew,y,znew) anglenew# = yaw ; what must be added to yaw to calculate midleft of vehicle's global x,z co-ords xnew# = x+Cos(anglenew)*carwidth znew# = z+Sin(anglenew)*carwidth Leftheight = TerrainY(terrain,xnew,y,znew) anglenew# = yaw + 180 ; what must be added to yaw to calculate midright of vehicle's global x,z co-ords xnew# = x+Cos(anglenew)*carwidth znew# = z+Sin(anglenew)*carwidth rightheight = TerrainY(terrain,xnew,y,znew) pitchx# = carlength*2 ; need complete length of car for x pitchy# = (backheight - frontheight); the height dif between the front and rear of car pitch = ATan2(pitchx,pitchy); atan2 will return the angle from 0,0 to x,y rollx# = carwidth*2 rolly# = (rightheight - leftheight) ; the height dif between the left and right of car roll# = ATan2(rollx,rolly); atan2 will return the angle from 0,0 to x,y RotateEntity car, pitch-90,yaw,roll-90 ; rotate car with offsets to adjust Atan2's calculation th=(frontheight+backheight+leftheight+rightheight)/4; get average of terrain heights for cars overall height PositionEntity car,x,th,z ; adjust car height MoveEntity car,0,0,speed PositionEntity camera , x+400,y+300,z+200 PointEntity camera,car UpdateWorld RenderWorld Flip Wend Stop Wäre euch wirklich dankbar wenn Ihr eine Idee hättet, wie ich das anstelle Danke im voraus Sascha Edit: Codetags zur Besseren Lesbarkeit ergänzt. Bitte in Zukunft selbst dran denken. MfG BladeRunner |
||
![]() |
IronstormErstklassiger Contest-Veranstalter |
![]() Antworten mit Zitat ![]() |
---|---|---|
Meinst du etwa so etwas hier?
https://www.blitzforum.de/foru...o+anpassen MFG Blitzmaker |
||
..:: blackbird design : blackbird photography : Futuro Verde : X-Commander ::..
MacBook | Intel Core 2 Duo 2,1 GHz | 2048 MB RAM | 80 GB HDD | Mac OS X 10.6.2 (Snow Leopard) | Adobe CS4 Design Premium |
BlackZero |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja das habe ich auch schon gesehen,
das Problem bei dem Driver Spiel ist, wenn ich zb eine Strecke hochfahre mit einer Kurve dann rukkelt das ganze Auto, also ich denke das die 4 Räder (beim Driver beispiel sind es 4 unsichtbare kugeln) die an den Vertices hängenbleiben und das sieht echt scheisse aus und bekomme das auch nicht so umgecodet das es nicht so rukkelhaft aussieht. Sagen wir mal so, ich bleibe fast hängen wenn ich wenige Poligone für die Kurve benutze. Bei mir ist halt bei diesem Code den ich oben gepostet habe aufgefallen, das die Anpassung des Autos (egal was für ein gelände) flüssig und richtig gut abläuft (sieht gut aus). |
||
Penthouse Pauper |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Mach das doch über das 3D-Programm mit einem neuen Surface, was du dann mit nem durchsichtigen Brush füllst...? Oder bin ich zu doof? | ||
BlackZero |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
nein zu blöd biste nicht,
aber bringen tut mir das garnichts, das sieht ja dann aus als würde das auto an den kurven über die strecke fliegen ![]() ich gebe euch mal den link wo ich diesen code gefunden habe. es geht mir eigentlich nur darum, man muss doch anstatt "terrainy" ne möglichkeit haben den code so umzuschreiben das er auf "EntityY+EntityX" reagiert oder liege ich da falsch ???? Bitte helft mir doch ![]() |
||
BlackZero |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ehhhmmm sorry hier der link ![]() http://www.blitzmax.com/codear...hp?code=67 |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bitte benutze den Edit-button. Danke.
Um das Ruckeln zu beheben sollte es ausreichen sein eine Art "Glattbügeln" einzubauen, d.h. Du merkst Dir vorhergehenden pitch , jaw und roll und addierst ihn partiell zum aktuellen Wert, somit wird die Bewegung ruhiger |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
BlackZero |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
BladeRunner hat Folgendes geschrieben: Bitte benutze den Edit-button. Danke.
Um das Ruckeln zu beheben sollte es ausreichen sein eine Art "Glattbügeln" einzubauen, d.h. Du merkst Dir vorhergehenden pitch , jaw und roll und addierst ihn partiell zum aktuellen Wert, somit wird die Bewegung ruhiger lol bin neu hier, was fürn edit button ? ach ja, könntest du das ein bisschen genauer erklären ? benutze das beispiel von "driver" aus dem samples ordner OK sorry hab den button gefunden lol |
||
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Unterhalb des Datums deines Postings. Das Icon mit dem Schraubenschlüssel. | ||
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2 |
BlackZero |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
D2006 hat Folgendes geschrieben: Unterhalb des Datums deines Postings. Das Icon mit dem Schraubenschlüssel.
ja hab ihn gefunden ![]() aber kann mir denn wirklich niemand helfen ?? ich möchte halt so ne art rennspiel machen wo man halt auch steilkurven etc. fährt. hab soweit alles hinbekommen, lenkung, schwerkraft, schatten, beschleunigen, bremsen usw.. jetzt scheiterts echt nur noch daran das das auto flüssig steilkurven hochkommt "heul" die "wheels" die beim driver spiel benutzt werden habe ich genommen, also die alpha spheres, aber die rukkeln sich halt einen ab wenn ich ne steilkurve hochfahre, weil die an den vectoren von der strecke hängenbleiben und nur ruckartig hochgleiten. wie könnte man diese den flüssiger hinbekommen, bzw das sich das auto vielleicht ein bisschen verzögert auf die spheres ausrichtet bzw. flüssiger. Ansonsten wäre halt wie gesagt das obige beispiel für mich vollig ausreichend, wenn ich das auch auf entitys benutzen könnte nicht nur auf terrains |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das geht eigentlich nur über richtigen physikalischen Einfluss in Form von 4 Federn welche das Auto mit den Rädern verbinden, so das die Räder auf den Untergrund reagieren können, zwischen Auto und Rädern jedoch ein Spielraum besteht.
ODE dürfte da sicher ein praktisches Instrument sein. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
BlackZero |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Dreamora hat Folgendes geschrieben: Das geht eigentlich nur über richtigen physikalischen Einfluss in Form von 4 Federn welche das Auto mit den Rädern verbinden, so das die Räder auf den Untergrund reagieren können, zwischen Auto und Rädern jedoch ein Spielraum besteht.
ODE dürfte da sicher ein praktisches Instrument sein. Ja du hast es gesagt ! Das geht mir auch schon die ganze Zeit durch den Kopf... Aber das mit den 4 Federn, genau das hab ich mir auch so gedacht. Ich wollte eigentlich vermeiden nur wegen diesen 4 Federn eine Physik-Engine einzubauen, weil ich eigentlich nur die Physik für das eine Auto brauche für nix anderes. Naja habe mir jetzt mal Tokamak installiert und funktioniert auch alles, nur ich habe keine Ahnung wie ich in Tokamak einsteigen soll. Die ganzen Links usw.. auf diesem Forum sind Tot, vorallem soll es ja so ein Tut gegeben haben für Tokamak auf deutsch ich glaub auf der seite www.makegame.de nur die gibts auch nicht mehr. Was mach ich jetzt ?? Wie komm ich da jetzt rein ? Und die Docs von Tokamak sind ja wohl mehr als schlecht, da sie gerade mal die Befehle kurz und knapp beschreiben und nicht mal drinsteht wie man überhaupt ertsmal anfängt HEUL Ich wäre euch sehr dankbar wenn mir jemand hier Links oder Tutorials zu Tokamak posten könnte, vielleicht hat ja auch jemand von euch noch alte Tutorials von den toten Seiten |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group