Aktuelle Zeit: 21.12.2024, 15:40

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Welche PhysicEngine nutzt Ihr?
BeitragVerfasst: 29.11.2008, 11:35 
Offline

Registriert: 22.04.2007, 13:12
Beiträge: 53
Hallo

Da ich mich gerade mit PhysicEngine's auseinander setzen möchte :lol:
und ich einen Haufen an Engines gefunden habe... nur leider nichts richtiges für Vb.Net
dachte ich mir
Frage ich doch einfach ma hier im Forum nach welche Ihr verwendet.

Bis jetzt habe ich mir ODE, Newton und Bullet angesehen.
Bei Newton musste ich doch schnell feststellen das für .Net kaum ein richtiger Wrapper existiert (oder habe ihn nicht gefunden :D )

Würde mich über einen Link zu einer Brauchbaren Physicengine sehr freuen.

Danke schonmal.

MfG
SaS

_________________
Progammiersprache: VB.NET 2005
Irrlichtversion: Irrlicht.Net CP 0.8


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Welche PhysicEngine nutzt Ihr?
BeitragVerfasst: 01.12.2008, 06:56 
Offline

Registriert: 27.03.2007, 16:53
Beiträge: 33
Wohnort: Chemnitz
Hallo,

du suchst eine physic engine?!
brauchbar sind alle, auf ihre art und weiße...
nur sagt mir gerade die glaskugel nicht, für was du die physic engine speziell brauchst... :wink:

Also ich persönlich finde "box2d" cool... mit der kann man eine Menge schnell Anfangen...
Für den 3D-Sektor, verwende ich ODE0.9 (für Standard Kollision "box","sphere",...),
Dafür gibt es auch einen gescheiten Wrapper für .Net ;) (unter sourceforge)
Für ODE0.9 & IrrlichtNetCp hatte ich mal ein Framework geschrieben (Framework Download)
Für ein anderes Projekt, verwende ich gerade ODE0.5 weil dort die TriMesh Collision noch klappte ;)

Für Newton gibt es auch .Net Wrapper für die letzte Offiziell Relaesed Version 1.53
(Newton Wrapper Download) (nicht von mir erstellt)

Mhhh was gibt es den noch... ach ja PhysX auch eine geniale Engine....
für die diese gibt es auch einen .Net Wrapper (code.google.com)
Nicht für die aktuell letzte Version aber für eine stabile Version...

jetzt fällt mir Bullet noch ein, die Engine finde ich derzeit nicht schlecht (laut meinen test mit xna), würde sie gerne verwenden (zuweilen die engine ja aus einen gewissen teil ode ist ;) )
ABER..... (ja ja das aber ....) für Bullet gibt es wirklich keine gescheiten .Net Port/Wrapper...

Ach ja, und für XNA schießen die PhysicEngine auch derzeit aus dem Boden... also vielleicht noch in der Richtung schauen...

Also mein Fav.
1. ODE0.9 (für standard kollision) / ODE0.5 (für komplexe kollision) (wrapper vorhanden)
2. Bullet (würd ich gerne verwenden, aber kein wrapper )
3. PhysX (mhhh powerful engine von Nvidia... mit der man die Berechnung auf gpu-basis machen kann)
4. Box2D (perfekt für 2D)
Newton... (nja ich persönlich mag die engine nit) :D

So, ich hoffe ich konnte Dir weiterhelfen... viel Spaß beim basteln...

_________________
Develop On System:
-WindowsXP Prof.
-Microsoft .NET2005 | Framework2.0 (C#)
-using IrrlichtNetCP (.NET Wrapper for Irrlicht)

<<Because it makes FUN>>


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Welche PhysicEngine nutzt Ihr?
BeitragVerfasst: 01.12.2008, 10:03 
Offline

Registriert: 22.04.2007, 13:12
Beiträge: 53
Danke für die vielen Infos :)
Also brauchen werde ich Sie jetzt noch nicht direkt... aber wollte schonmal sehen was überhaupt möglich ist, so das wenn ich einmal Physic mit im SPiel haben möchte, schonmal ein Ansatz da ist.

Im Grunde geht s mir einfach darum das normale Kollisionen und natürlich Physic vorhanden ist.
Ragdoll wäre vieleicht auch noch ein Punkt...

Habe mir gestern mal nen Newton Wrapper für .Net geladen.. funktioniert auch soweit gut... nur scheint er probleme mit der Matrix die Newton verwendet und der Matrix4 welche Irrlicht nutzt zu haben.

Als Beispiel... habe eine Forcevariable welche x=0 y=-9.8f z=0 die Schwerkraft simulieren soll.
Jetzt füge ich bei Newton diese Variable über AddForce oder SetForce dem Pbject hinzu... und nichts passiert..
mache ich aber SetOmega und nutze damit die Forcevar dann dreht sich das Object recht schnell bis es dann langsam wieder zu stehen kommt.
Scheint mir so als ob die Physic funktionieren würde...

Werde deinem Rat aber folgen und mir ODE nochmal genauer anschauen.
Habe mir gestern schon das TaoFramework geladen und werde dann heut mal schauen wie es funktioniert.

Aber danke nochmal für deine Hilfe :) hat mir schonmal weitergeholfen.

_________________
Progammiersprache: VB.NET 2005
Irrlichtversion: Irrlicht.Net CP 0.8


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Welche PhysicEngine nutzt Ihr?
BeitragVerfasst: 02.12.2008, 13:04 
Offline

Registriert: 22.04.2007, 13:12
Beiträge: 53
Hi also habe mir gestern und heut dann ein wenig ODE angesehen und scheinbar ist esfür meine Zwecke genau das richtige.
Also habe ich mich ein wenig in die Abläufe von ODE eingelesen und gleich versucht etwas umzusetzen...
leider wieder ohne großen Erfolg.

Ich habe 2. Modelle eines für den Boden und eines für ne Kiste...
Diese lade ich normal und platziere Sie so das die Kiste über dem Boden positioniert ist.

dann natürlich noch das aus ODE
Code:

world = Tao.Ode.Ode.dWorldCreate
        space = Tao.Ode.Ode.dSimpleSpaceCreate(0)
        Tao.Ode.Ode.dWorldSetGravity(world, 0, -0.01, 0)
        Tao.Ode.Ode.dWorldSetERP(world, 0.2)
        Tao.Ode.Ode.dWorldSetContactMaxCorrectingVel(world, 0.9)

        Tao.Ode.Ode.dWorldSetContactSurfaceLayer(world, 0.001)
        Tao.Ode.Ode.dWorldSetAutoDisableFlag(world, 1)
        contactgroup = Ode.dJointGroupCreate(1000000) ' Habe ich so aus einem Tutorial übernommen.

' Fuer den Cube
        body = Tao.Ode.Ode.dBodyCreate(world)
        Tao.Ode.Ode.dBodySetPosition(body, 0, 200, 500) 'ist genau die Position des Irrlicht Nodes
        Tao.Ode.Ode.dBodySetLinearVel(body, 0, 0, 0)

        Dim matrix As New Tao.Ode.Ode.dMatrix3
        Tao.Ode.Ode.dRFromAxisAndAngle(matrix, _
        Ode.dRandReal * 2.0 - 1.0, _
        Ode.dRandReal * 2.0 - 1.0, _
        Ode.dRandReal * 2.0 - 1.0, _
        Ode.dRandReal * 10.0 - 5.0)
        Ode.dBodySetRotation(body, matrix)
        Dim mass As New Ode.dMass(50, Nothing, Nothing)
        Ode.dBodySetMass(body, mass)

Dim min As IrrlichtNETCP.Vector3D = cube.BoundingBox.MinEdge
        Dim max As IrrlichtNETCP.Vector3D = cube.BoundingBox.MaxEdge
        Dim sizeX As Single = max.X - min.X
        Dim sizeY As Single = max.Y - min.Y
        Dim sizeZ As Single = max.Z - min.Z

geom = Ode.dCreateBox(space, sizeX, sizeY, sizeZ)
        Ode.dGeomSetBody(geom, body)


Und hier für den Boden

Code:
'Boden
        Dim Bmin As IrrlichtNETCP.Vector3D = boden.BoundingBox.MinEdge
        Dim Bmax As IrrlichtNETCP.Vector3D = boden.BoundingBox.MaxEdge
        Dim BsizeX As Single = Bmax.X - Bmin.X
        Dim BsizeY As Single = Bmax.Y - Bmin.Y
        Dim BsizeZ As Single = Bmax.Z - Bmin.Z


        body2 = Tao.Ode.Ode.dBodyCreate(world)
        Tao.Ode.Ode.dBodySetPosition(body2, 0, -200, 500)
        geom2 = Ode.dCreateBox(space, BsizeX, BsizeY, BsizeZ)
        Ode.dGeomSetBody(geom2, body2)


Und dann habe ich dies in meiner Renderschleife stehen... vor DrawALL
Code:
engine.VideoDriver.BeginScene(True, True, New IrrlichtNETCP.Color(255, 0, 0, 0))
            Ode.dSpaceCollide(space, 0, call_back)
            Ode.dWorldQuickStep(world, 0.05)
            Ode.dJointGroupEmpty(contactgroup)
            tmppos = Ode.dGeomGetPosition(geom)
cube.Position = New IrrlichtNETCP.Vector3D(tmppos.X, tmppos.Y, tmppos.Z)



Und mein Callback

Code:
Public Sub Callback(ByVal data As System.IntPtr, ByVal o1 As System.IntPtr, ByVal o2 As System.IntPtr)
        Dim i As Integer
        Dim b1 As IntPtr = Ode.dGeomGetBody(o1)
        Dim b2 As IntPtr = Ode.dGeomGetBody(o2)

        Const N As Integer = 10

        Dim contact(N) As Ode.dContact
        Dim contactGeom(contact.Length) As Ode.dContactGeom
        Dim numContacts = Ode.dCollide(o1, o2, contactGeom.Length, contactGeom, System.Runtime.InteropServices.Marshal.SizeOf(contactGeom(0)))
        If numContacts > 0 Then
            'MsgBox(numContacts)
            For i = 0 To numContacts
                MsgBox("Contact")
                contact(i).surface.mode = Ode.dContactFlags.dContactBounce

                contact(i).surface.mu = 0.8
                contact(i).surface.mu2 = 0
                contact(i).surface.bounce = 1.0
                contact(i).surface.bounce_vel = 0.9F

                'contact(i).surface.soft_erp = 1
                'contact(i).surface.soft_cfm = 0.9F
                Dim c As IntPtr = Ode.dJointCreateContact(world, contactgroup, contact(i))
                Ode.dJointAttach(c, b1, b2)
            Next
        End If
    End Sub


So wenn ich dies dann laufen lasse fällt die Box auch normal nach unten... Kollidiert aber nicht mit dem Boden ...
Wenn ich mit ode eine Bodenplain erstelle so kommt eine Kollision zustande.. aber meine Box verschwindet dann einfach :(
Habe mir mal beim rendern den Inhalt von tmppos (die position des Cubes) ausgeben lassen und festgestellt das bei einer Kollision dann nichtsmehr übertragen wird.

Hmm Hoffe jemand kann sich den Code mal ansehen und mir sagen was ich genau falsch mache...
Ps. ich Weis der der Code ist etwas dumm zusammengestellt (mit neue Vectoren in der Schleife erstellen usw...) aber ich wollte erstmal das es funktioniert bevor ich das alles auf Leistung umschreibe :)

Schönen Tag noch
Gruß
SAS

_________________
Progammiersprache: VB.NET 2005
Irrlichtversion: Irrlicht.Net CP 0.8


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de