ODE Physics unglückliches Beispiel

Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Neue Antwort erstellen

Vertex

Betreff: ODE Physics unglückliches Beispiel

BeitragMo, Nov 14, 2005 21:31
Antworten mit Zitat
Benutzer-Profile anzeigen
So, habe jetzt mal auf die Schnelle DreiDe für BMax 1.12 zum laufen gebracht, und wollte das neue ODE Module ausprobieren....

Also, ersteinmal was ist ODE? ODE steht für Open Dynamics Engine, und ist m.M. nach die beste Open Source Physics Engine, die man z.Z. bekommen kann. Alle Infos dazu auf http://www.ode.org

Mak.ODE Module steht noch nicht standardmäßig zur Verfügung.
Dazu Eingabeaufforderung öffnen, zu BlitzMax\bin wechseln, und dort
"syncmods.exe -u Benutzername -p Passwort mak" starten.

Das Beispiel hier funktioniert nichteinmal mit Kollision, da ich noch keine CallBack Funktion geschrieben habe. Zumindest Gravitation funzt. Geht mir nur darum, ersteinmal überhaupt ODE zum laufen gebracht zu haben:

Code: [AUSKLAPPEN]
Strict

Framework Pub.DreiDe
Import Mak.ODE

Global World        : Int
Global Space        : Int

Global BoxBody      : Int
Global BoxMass      : dMass
Global BoxGeom      : Int
Global BoxMesh      : TMesh

Global PlaneGeom    : Int
Global PlaneMesh    : TMesh

Global Camera       : TCamera

Global Position     : Float Ptr

TDreiDe.Graphics3D(640, 480)

' Erstelle Welt
World = dWorldCreate()
dWorldSetGravity(World, 0.0, -9.81, 0.0)

' Erstelle Raum
Space = dHashSpaceCreate(0)

' Erstelle Box
BoxBody = dBodyCreate(World)
dBodySetPosition(BoxBody, 0.0, 20.0, 0.0)

BoxMass = New dMass
dMassSetBoxTotal(BoxMass, 0.01, 2.0, 2.0, 2.0)
dBodySetMass(BoxBody, BoxMass)

BoxGeom = dCreateBox(Space, 2.0, 2.0, 2.0)
dGeomSetBody(BoxGeom, BoxBody)

BoxMesh = TPrimitive.CreateCube()
BoxMesh.ScaleVertices(2.0, 2.0, 2.0)
BoxMesh.SetPosition(0.0, 20.0, 0.0)

' Erstelle Boden
PlaneGeom = dCreatePlane(Space, 0.0, 1.0, 0.0, 0.0)
PlaneMesh = TPrimitive.CreateQuad()
PlaneMesh.ScaleVertices(100.0, 100.0, 1.0)
PlaneMesh.SetRotation(-90.0, 0.0, 0.0)

' Erstelle Kamera
Camera = New TCamera
Camera.SetPosition(0.0, 10.0, 30.0)

While Not KeyDown(KEY_ESCAPE)
   dWorldQuickStep(World, 0.1)
   
   If dBodyIsEnabled(BoxBody) Then
      Rem
      BoxMesh.SetRotation(dGeomGetPitch(BoxGeom), ..
                          dGeomGetYaw(BoxGeom), ..
                          dGeomGetRoll(BoxGeom))
      End Rem
      Position = dGeomGetPosition(BoxGeom)
      BoxMesh.SetPosition(Position[0], ..
                          Position[1], ..
                          Position[2])
   EndIf

   Camera.Render()
   Flip()
Wend

EndGraphics()
End


Dem Module fehlt übrigens dODEClose Funktion, event. gibt es dadurch MemoryLeaks. Ich werde denke ich mich aber nochmal hinsetzen, und ein vernünftiges Module mit Helperfunktionen zusammenbasteln.

Da ihr nicht DreiDe mit Kompatibelität zu BMax 1.12 habt, habe ich das mal alles zu einem Packet gepackt:
http://www.blitz-pasting.net/i...amp;id=640
(inkl. Win32 Exe)

mfg olli
vertex.dreamfall.at | GitHub

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group