From: Hedayat V. <hed...@ai...> - 2010-02-22 08:33:05
|
Hey Joschka, Thanks for your continued support and encouragement ;) Good luck, Hedayat On ۱۰/۰۲/۲۲ 11:33, Joschka Boedecker wrote: > Hey Hedayat, > > On Feb 22, 2010, at 4:39 PM, Hedayat Vatankhah wrote: > > >> Hi Andreas! >> >> On ۱۰/۰۲/۲۲ 10:49, ah...@un... wrote: >> >>> Hi, >>> >>> >>> I am now one step closer to having the ODE classes as a plugin. I use the >>> PhysicsServer for testing for now, because this is a class that is >>> actually used, as opposed to the AngularMotor, and thus obviously more >>> suited for testing. PhysicsServerImp now shows up in the scenegraph; the >>> key was to build odeimps not as a library, but as a module (which is the >>> desired method anyway, as building it as a library was merely a >>> workaround). >>> >>> I changed spark.rb a bit so that it imports the odeimps bundle at the very >>> beginning. The relevant part now looks like this: >>> >>> ----- begin excerpt from spark.rb ----- >>> # >>> # setup spark >>> # >>> >>> print "(spark.rb) setup\n" >>> >>> #import the implementations of the desired physics engine >>> #currently supported: odeimps (uses Open Dynamics Engine) >>> importBundle "odeimps" >>> print "(spark.rb) using ODE, to change the physics engine go to line 559 >>> in spark.rb\n" >>> >>> # >>> # set up logging >>> logServer = get($serverPath+'log') >>> >>> if (logServer != nil) >>> logServer.addStream(':cerr', 'eError') >>> end >>> >>> >>> # >>> # setup the PhysicsServer >>> sparkGetPhysicsServer() >>> ----- end excerpt from spark.rb ----- >>> >>> Here's a screenshot of rsgedit which proves that the odeimps bundle gets >>> imported correctly, and also showcases that the PhysicsServerImp shows up >>> at "/classes/PhysicsServerImp": >>> >>> http://www.uni-koblenz.de/~aheld/rsgeditscreen.png >>> >>> Since I can now be 100% sure that PhysicsServerImp is now registered at >>> /classes/PhysicsServerImp _before_ the PhysicsServer is set up [as >>> importbundle"odeimps" is called prior to sparkGetPhysicsServer()], I can >>> now instanciate mPhysicsServerImp in the PhysicsServer's OnLink method >>> like this: >>> >>> void PhysicsServer::OnLink(){ >>> mPhysicsServerImp = shared_dynamic_cast<PhysicsServerInt> >>> (GetCore()->New("/classes/PhysicsServerImp")); >>> } >>> >>> This leads to the following console output: >>> >>> ----- begin inexplicable console output ---- >>> (ScriptServer) Script ended OK /home/andreas/.simspark/kerosin.rb >>> (ScriptServer) Running /usr/local/share/simspark//spark.rb... >>> (spark.rb) setup >>> (spark.rb) using ODE, to change the physics engine go to line 558 in spark.rb >>> (Core::New) unkown class '/classes/PhysicsServerImp' >>> (GeometryServer) MeshImporter 'oxygen/StdMeshImporter' registered >>> ----- end inexplicable console output ----- >>> >>> As even a trained monkey could see, the odeimps bundle is imported, and >>> thus PhysicsServerImp registered at /classes/PhysicsServerImp immediately >>> before Zeitgeist complains that PhysicsServerImp is not registered at >>> /classes/PhysicsServerImp. The RSGEdit screenshot proves that >>> PhysicsServerImp is registered at /classes/PhysicsServerImp. >>> >>> Soemhow the PhysicsServer is set up before PhysicsServerImp is registered >>> even though spark.rb registers PhysicsServerImp before the PhysicsServer >>> is set up. This is a time paradoxon. Maybe I'm using a quantum computer >>> without knowing it? >>> >>> Any ideas would be appreciated. >>> >>> >> IMHO, you should simply use >> >> GetCore()->New("PhysicsServerImp") >> >> Instead of >> >> GetCore()->New("/classes/PhysicsServerImp") >> >> And it should work fine! >> > That's it, thanks a bunch! :-) > > Cheers, > Joschka= > |