Witam. Stawiam właśnie pierwsze kroki w używaniu silników fizycznych, wybór padł na ODE. Już mam za sobą tutoriale i chciałem napisać "symulację" dostosowaną do potrzeb mojego projektu, aby później to co napiszę odpowiednio wdrożyć w projekt.

Mam już tworzenie i rysowanie obiektów oraz wykrywanie i obsługę kolizji. Na chwilę obecną już sporo przykładów do ODE przeglądnąłem, ale nie mogłem znaleźć rozwiązania. Chodzi o to, że chcę aby rotacja box'a po odbiciu od przeszkody była cały czas zgodna z jego kierunkiem lotu. W chwili obecnej mój przykład jest wykonany w ten sposób, że box leci z pewnej pozycji pod kątem 45 stopni w przeszkodę. Fragmenty tworzenia obiektu:

		self.odeBody2 = ode.Body(self.odeWorld) # blaster
		angle=135.0
		ca = math.cos (math.radians(angle))
		sa = math.sin (math.radians(angle))
		self.odeBody2.setRotation([ca, -sa, 0.0,
					sa, ca, 0.0,
					0.0, 0.0, 1.0])
		#...
		self.odeBody2.setPosition( (4,4,0) )
		self.odeBody2.setForce( (-50,-50,0) )

Grawitacja jest ustawiona na 0.0 bo można przyjąć, że na promienie blastera nie działa grawitacja.
Jak blaster leci na takim ustawieniu (kod i screen 1 - załącznik) to po odbiciu (screen 2 - załącznik) obraca się tak jak mu się podoba zgodnie z ustawionymi parametrami fizycznymi.
Kolizję obsługuję raczej w dość standardowy dla ODE sposób:

		contacts = ode.collide(self.odeGeom1, self.odeGeom2)
		for contact in contacts:
			contact.setBounce(4.0)
			contact.setMu(0)
			contact.setMu2(0)
			j = ode.ContactJoint(self.odeWorld, self.odeContactGroup,contact=contact)
			j.attach(None, self.odeGeom2.getBody()) #None bo nie chcemy aby na miecz sie odbijal od blastera

Jak zrobić to co napisałem w jakiś sposób aby ODE za mnie wykonał brudną robotę z tym obrotem, da się :) ?

Mieczem świetlnym poruszam myszą ( http://www.gamedev.pl/screens.php?x=view&id=7811 ), strzał z blastera mogę odbić z każdej strony, więc potrzebuję dokładną kolizję z blaster'em, mieczem można wykonywać ruchy i obracać go (do obrotów użyję setAngularVel(), żeby obrót miał wpływ na kierunek lotu odbitego wystrzału).