|
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=
>
|