DotSceneLoader enviroment colour

A place for users of OGRE to discuss ideas and experiences of utilitising OGRE in their games / demos / applications.
User avatar
jordiperezarti
Halfling
Posts: 44
Joined: Sun Sep 01, 2024 7:50 pm

DotSceneLoader enviroment colour

Post by jordiperezarti »

I am modifing DotSceneLoader.cpp to load enviroment color, i am doing:

Code: Select all

[code]if (auto pElement = XMLNode.child("colourBackground"))
{
    mBackgroundColour = parseColour(pElement);
    mSceneMgr->setOption("background-color", new ColourValue(mBackgroundColour));
}[/code]

then in the application, when i capture the option background-color:

Code: Select all

scnMgr->hasOption("background-color");

is returning false.
in my .scene i have:

Code: Select all

<scene formatVersion="1.1">
	<environment>
		<colourAmbient r="1.0" g="0.1" b="0.1" />
		<colourBackground r="0.2" g="0.2" b="0.8" />
	</environment>

why the hasOptions seems to dont remember the background-color?

i would like to call

Code: Select all

DotSceneLoader.getBackgroundColour()

when i do

Code: Select all

scnMgr->getRootSceneNode()->loadChildren("myscene.scene");

but how do i get the DotSceneLoader Object when i call loadChildren?

rpgplayerrobin
Orc Shaman
Posts: 788
Joined: Wed Mar 18, 2009 3:03 am
x 447

Re: DotSceneLoader enviroment colour

Post by rpgplayerrobin »

I guess you are using C++?
In that case, this code makes no sense at all:

Code: Select all

mSceneMgr->setOption("background-color", new ColourValue(mBackgroundColour));

Why are you using "new ColourValue"?
It should be like this (which might help with your issue, but also help to remove that memory leak that you created):

Code: Select all

mSceneMgr->setOption("background-color", &mBackgroundColour);

Also, in Ogre for me, the default scene manager does nothing with setOption/hasOption, so I guess your own scene manager takes care of these functions?:

Code: Select all

virtual bool setOption( const String& strKey, const void* pValue )
        { (void)strKey; (void)pValue; return false; }

virtual bool hasOption( const String& strKey ) const
        { (void)strKey; return false; }

But it is hard to know for sure what the cause of your issue is other than that. You will have to just debug the functions setOption and hasOption to see what actually happens. For me, in Visual Studio, I can just press F11 to go into those functions when debugging, so I can see exactly what the Ogre code does, which helps with all of these kind of issues. Without it, it would be impossible for me to fix issues.

User avatar
jordiperezarti
Halfling
Posts: 44
Joined: Sun Sep 01, 2024 7:50 pm

Re: DotSceneLoader enviroment colour

Post by jordiperezarti »

i suspect the setOption() is virtual and i would need to implement an heritage for the SceneManager, but i will not do.

I really preffer to call:

scnMgr->getRootSceneNode()->loadChildren("myscene.scene");

then something like Ogre::DotSceneLoader.getBackgroundColor()

because the getBackgroundColor is implemented already.

the question is how do i make this call? Ogre::DotSceneLoader.getBackgroundColor()

rpgplayerrobin
Orc Shaman
Posts: 788
Joined: Wed Mar 18, 2009 3:03 am
x 447

Re: DotSceneLoader enviroment colour

Post by rpgplayerrobin »

From ChatGPT:

Code: Select all

// Create the loader
Ogre::DotSceneLoader loader;

// Load the scene
Ogre::DataStreamPtr stream = Ogre::ResourceGroupManager::getSingleton()
                                .openResource("myscene.scene", "General");
loader.load(stream, "General", sceneMgr->getRootSceneNode());

// Now you can access background color or other info
Ogre::ColourValue bgColor = loader.getBackgroundColour();
sceneMgr->setAmbientLight(bgColor);

But if I were you, I would just go into the Ogre source and copy that class completely, then I would alter it to do what you want it to do exactly, not requiring you to even do anything special after it has loaded a scene.
That way you can also add specific stuff yourself to it which can do things that it normally cannot.

User avatar
jordiperezarti
Halfling
Posts: 44
Joined: Sun Sep 01, 2024 7:50 pm

Re: DotSceneLoader enviroment colour

Post by jordiperezarti »

This is, exactly.
Now i can do after the scene is loaded:

Code: Select all

viewport = getRenderWindow()->addViewport(cam);
viewport->setBackgroundColour(loaderScene.getBackgroundColour());