Seite 1 von 1

3D Winkelangaben

Verfasst: 24.04.2008 18:49
von TomTom
hiho!

ich nutze seit kurzem die 3D physik.
wenn ein Stein einen anderen berührt, dann drehen die sich ja weg...

wie kann ich denn die neuen Winkel berechnen, gibt es einen bestimmten Befehl dazu?


Vielen Dank!

Verfasst: 24.04.2008 22:03
von D4uS1
Wie meinst du das mit den Steinen. Generell sollte sowas mit der Trigonometrie (Cosinus, Sinus, Tangens) zu berechnen sein. Zu finden ist das in der Math Lib von PureBasic. Aber vorsicht, die Winkel sind in Bogenmaß und nicht im Gradmaß angegeben.

Schreib einfach mal ein paar Informationen was du genau machen willst.

lg
Andreas

Verfasst: 24.04.2008 22:13
von TomTom
hi Andreas!

also ich nutze die 3D Engine von Purebasic.
dort kann man mit hilfe des Befehls "EnableWorldPhysics(1)" die Physik einschalten.

jetzt habe ich einen 3D Würfel gebaut und den auf einen anderen 3D würfel fallen lassen...

sobald die beiden Würfel sich berühren, springt der erste Würfel weg (der 2te ist statisch).

also dreht der erste Würfel sich jetzt in eine von der Physik berechneten Winkel. Diesen Winkel möchte ich gerne herausfinden.

warum ich das herausfinden möchte:
ich möchte ein kleines Auto-Rennspiel proggen, und die Physik sieht sehr real aus...

jetzt benötige ich nur noch die neuen Winkel, und weiß dann, wo das Auto hinzeigt...



ich hoffe alle haben das verstanden wie ich das meine :lol:


MFG tomtom

Verfasst: 24.04.2008 22:18
von Andreas_S
http://www.purebasic.fr/german/viewtopi ... c&start=20

Dürfte ich das bsp. mit dem Würfel sehen? Würde mich interessieren wie das genau aussieht...


Andreas

Verfasst: 24.04.2008 22:34
von TomTom
hier kannste gucken ^^

Code: Alles auswählen

InitEngine3D()
InitSprite()
InitKeyboard()
InitMouse()

EnableWorldPhysics(1)


Add3DArchive("Data\", #PB_3DArchive_FileSystem)
Add3DArchive("moddels\", #PB_3DArchive_FileSystem)
Add3DArchive("skys\skybox.zip", #PB_3DArchive_Zip)
  

OpenScreen(1024,768,32,"Engine3D Test")


;:::::::::::Camera:::::::::::: 
CreateCamera(0,0,0,100,100)
CameraLocate(0,0,0,0)
;:::::::::::Camera ende:::::::

;:::::::::::Skybox::::::::::::
SkyBox("desert07.jpg")
;:::::::::::Skybox ende:::::::


;:::::::::::Würfel::::::::::::
LoadTexture(100,"cube_texture.jpg")
LoadMesh(100,"cube.mesh")
CreateMaterial(100,TextureID(100))

CreateEntity(1,MeshID(100),MaterialID(100))
CreateEntity(2,MeshID(100),MaterialID(100))

EntityLocate(2,0,-100,0)
RotateEntity(2,90,20,5)
ScaleEntity(1, 10, 10, 10)
ScaleEntity(2, 10, 10, 10)

EntityPhysicBody(1, #PB_Entity_BoxBody)
EntityPhysicBody(2, #PB_Entity_StaticBody)

MoveEntity(1,0,-10,0)
CameraLocate(0,0,0,200)

;::::::::::Würfel ende:::::::
 
WorldGravity(10)
 
Repeat
  ExamineKeyboard()
  ExamineMouse()
  If KeyboardPushed(1):esc = 1:EndIf
  
  If KeyboardPushed(#PB_Key_W):MoveCamera(0,0,0,-10):EndIf
  If KeyboardPushed(#PB_Key_S):MoveCamera(0,0,0,10):EndIf
  
  
  RotateCamera(0,-(MouseDeltaX()/10),-(MouseDeltaY()/10),0)
    
  RenderWorld()
  FlipBuffers()
Until esc = 1


du musst nur noch eine texture und einen würfel erstellen...
ich denke mal das schaffste

Verfasst: 24.04.2008 22:44
von Andreas_S
Ich hab den Robot von einem Tut genommen und der fliegt direkt durch den anderen durch...

Das mit der Rotations-Matrize verstanden? Kannst ja NicTheQuicks code für die Rechnungen mit den Matrizen nehmen...

Verfasst: 25.04.2008 13:00
von NicTheQuick
Andreas_S hat geschrieben:Kannst ja NicTheQuicks code für die Rechnungen mit den Matrizen nehmen...
Naja, für kleine 3x3-Matrizen braucht man nicht unbedingt meinen riesen
Code. Der ist außerdem nicht für Dinge geeignet, die schnell sein sollen.

Verfasst: 25.04.2008 21:18
von TomTom
danke für eure antworten, aber irgendwie habe ich es nicht so ganz verstanden wie ich das problem lösen kann :lol:

naja mir ist gerade aufgefallen, das die physik von PB nicht so ganz funktioniert...
ich habe eine kleine 3DHalle statisch erstellt und von oben 3D Würfel hinunter fallen lassen. daraufhin sind die Würfel auf den Boden aufgeschlagen und haben sich davon gedriftet (wie über eis).
Darauf hin habe ich die Reibung verändert mit dem Befehl

Code: Alles auswählen

SetEntityFriction(i, 50)
verändert (mit allen entitys).
jedoch sehe ich keine veränderung.

das komische ist, das meine Würfel langsam aber sicher durch den Boden durchfallen. Wenn ich die Masse der Würfel erhöhe fallen die auch schneller durch

was mache ich falsch?

MFG tomtom
[/code]