Wiki MRT article.

Problems building or running the engine, queries about how to use features etc.
Post Reply
User avatar
mkultra333
Gold Sponsor
Gold Sponsor
Posts: 1869
Joined: Sun Mar 08, 2009 5:25 am
x 19

Wiki MRT article.

Post by mkultra333 » Sun Jun 27, 2010 7:04 pm

Ok, tired of the lack of docs on setting up and rendering with Multiple Render Targets, and that no one will explain it. I've started a wiki article on MRT and have made a project to go with it. Of course, the article doesn't explain how to do MRTs and the code doesn't do them either. I'm happy to write the article and setup the code, but if no one can be bothered explaining it then I give up, it's a dead end.

Article is here: http://www.ogre3d.org/tikiwiki/tiki-ind ... 31&no_bl=y

*** UPDATED LINK 2013 - April - 2 ****
VS9 Project is here: http://necromutex.com/MRTExp07_100703.zip

The project is built on the BasicOgreFramework. I've set it up so that there are 4 RTT surfaces ready to go, and it's easy to decide which one you show on the final viewscreen. That's so it'll be easy to demonstrate how each one has had a different material rendered to it after the MRT is setup and run.

I tried also to setup the MRT, but couldn't get anything to render. Which is not surprising, since all I had to go on were a few old fragmentary forum posts of other people's projects.

I'm doing MRTs with manual updating and no compositors, because compositors break on stereoscopic systems. I need this for my deferred shading project (which is not based on the main Ogre deferred shading code.)



Here's some code. This is where I setup the RTTs and should theoretically set up the MRT. You'll notice some commented out code where I tried to set something up. It didn't crash, but it didn't seem to work either.

Code: Select all

void OgreFramework::setupMRT()
{

	MaterialManager::getSingleton().initialise() ;

	// need our own resource group so that the RTTs dont get destroyed when we load a new level.
	Ogre::ResourceGroupManager::getSingleton().createResourceGroup("RTTResources") ;

	Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups();


	int DSWidth = m_pRenderWnd->getWidth() ;
	int DSHeight = m_pRenderWnd->getHeight() ;

	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

	RTT_Texture_DfShTexture0 = Ogre::TextureManager::getSingleton().createManual("RttTex_DfShTexture0",
      "RTTResources", TEX_TYPE_2D, DSWidth, DSHeight, 0, PF_FLOAT16_RGB,
      TU_RENDERTARGET);
	
	renderTexture_DfShTexture0 = RTT_Texture_DfShTexture0->getBuffer()->getRenderTarget();
	renderTexture_DfShTexture0->addViewport(m_pCamera);
	renderTexture_DfShTexture0->getViewport(0)->setClearEveryFrame(true, FBT_COLOUR|FBT_DEPTH);
	renderTexture_DfShTexture0->getViewport(0)->setBackgroundColour(ColourValue::Black);
	renderTexture_DfShTexture0->getViewport(0)->setOverlaysEnabled(false);

	RTT_Mat_DfShTexture0 = MaterialManager::getSingleton().create("RttMat_DfShTexture0", "RTTResources");
	RTT_Technique_DfShTexture0 = RTT_Mat_DfShTexture0->createTechnique();
	RTT_Technique_DfShTexture0->createPass();
	TextureUnitState* tState_DfShTexture0 = RTT_Mat_DfShTexture0->getTechnique(0)->getPass(0)->createTextureUnitState("RttTex_DfShTexture0");
	tState_DfShTexture0->setTextureAddressingMode(Ogre::TextureUnitState::TAM_CLAMP) ;
	RTT_Mat_DfShTexture0->getTechnique(0)->getPass(0)->setLightingEnabled(false);
	RTT_Mat_DfShTexture0->getTechnique(0)->getPass(0)->setTextureFiltering(TFO_NONE) ;

	miniScreen_DfShTexture0 = new Ogre::Rectangle2D(true);
	miniScreen_DfShTexture0->setCorners(-1.0001, 1.0001, 1.0, -1.0);
	miniScreen_DfShTexture0->setBoundingBox(AxisAlignedBox(-100000.0*Vector3::UNIT_SCALE, 100000.0*Vector3::UNIT_SCALE)); 
	miniScreenNode_DfShTexture0 = m_pSceneMgr->getRootSceneNode()->createChildSceneNode("MiniScreenNode_DfShTexture0");
	miniScreenNode_DfShTexture0->attachObject(miniScreen_DfShTexture0);
	miniScreen_DfShTexture0->setMaterial("RttMat_DfShTexture0");

	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

	RTT_Texture_DfShTexture1 = Ogre::TextureManager::getSingleton().createManual("RttTex_DfShTexture1",
      "RTTResources", TEX_TYPE_2D, DSWidth, DSHeight, 0, PF_FLOAT16_RGB,
      TU_RENDERTARGET);
	
	renderTexture_DfShTexture1 = RTT_Texture_DfShTexture1->getBuffer()->getRenderTarget();
	renderTexture_DfShTexture1->addViewport(m_pCamera);
	renderTexture_DfShTexture1->getViewport(0)->setClearEveryFrame(true, FBT_COLOUR|FBT_DEPTH);
	renderTexture_DfShTexture1->getViewport(0)->setBackgroundColour(ColourValue::Black);
	renderTexture_DfShTexture1->getViewport(0)->setOverlaysEnabled(false);

	RTT_Mat_DfShTexture1 = MaterialManager::getSingleton().create("RttMat_DfShTexture1", "RTTResources");
	RTT_Technique_DfShTexture1 = RTT_Mat_DfShTexture1->createTechnique();
	RTT_Technique_DfShTexture1->createPass();
	TextureUnitState* tState_DfShTexture1 = RTT_Mat_DfShTexture1->getTechnique(0)->getPass(0)->createTextureUnitState("RttTex_DfShTexture1");
	tState_DfShTexture1->setTextureAddressingMode(Ogre::TextureUnitState::TAM_CLAMP) ;
	RTT_Mat_DfShTexture1->getTechnique(0)->getPass(0)->setLightingEnabled(false);
	RTT_Mat_DfShTexture1->getTechnique(0)->getPass(0)->setTextureFiltering(TFO_NONE) ;

	miniScreen_DfShTexture1 = new Ogre::Rectangle2D(true);
	miniScreen_DfShTexture1->setCorners(-1.0001, 1.0001, 1.0, -1.0);
	miniScreen_DfShTexture1->setBoundingBox(AxisAlignedBox(-100000.0*Vector3::UNIT_SCALE, 100000.0*Vector3::UNIT_SCALE)); 
	miniScreenNode_DfShTexture1 = m_pSceneMgr->getRootSceneNode()->createChildSceneNode("MiniScreenNode_DfShTexture1");
	miniScreenNode_DfShTexture1->attachObject(miniScreen_DfShTexture1);
	miniScreen_DfShTexture1->setMaterial("RttMat_DfShTexture1");

	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

	RTT_Texture_DfShTexture2 = Ogre::TextureManager::getSingleton().createManual("RttTex_DfShTexture2",
      "RTTResources", TEX_TYPE_2D, DSWidth, DSHeight, 0, PF_FLOAT16_RGB,
      TU_RENDERTARGET);
	
	renderTexture_DfShTexture2 = RTT_Texture_DfShTexture2->getBuffer()->getRenderTarget();
	renderTexture_DfShTexture2->addViewport(m_pCamera);
	renderTexture_DfShTexture2->getViewport(0)->setClearEveryFrame(true, FBT_COLOUR|FBT_DEPTH);
	renderTexture_DfShTexture2->getViewport(0)->setBackgroundColour(ColourValue::Black);
	renderTexture_DfShTexture2->getViewport(0)->setOverlaysEnabled(false);

	RTT_Mat_DfShTexture2 = MaterialManager::getSingleton().create("RttMat_DfShTexture2", "RTTResources");
	RTT_Technique_DfShTexture2 = RTT_Mat_DfShTexture2->createTechnique();
	RTT_Technique_DfShTexture2->createPass();
	TextureUnitState* tState_DfShTexture2 = RTT_Mat_DfShTexture2->getTechnique(0)->getPass(0)->createTextureUnitState("RttTex_DfShTexture2");
	tState_DfShTexture2->setTextureAddressingMode(Ogre::TextureUnitState::TAM_CLAMP) ;
	RTT_Mat_DfShTexture2->getTechnique(0)->getPass(0)->setLightingEnabled(false);
	RTT_Mat_DfShTexture2->getTechnique(0)->getPass(0)->setTextureFiltering(TFO_NONE) ;

	miniScreen_DfShTexture2 = new Ogre::Rectangle2D(true);
	miniScreen_DfShTexture2->setCorners(-1.0001, 1.0001, 1.0, -1.0);
	miniScreen_DfShTexture2->setBoundingBox(AxisAlignedBox(-100000.0*Vector3::UNIT_SCALE, 100000.0*Vector3::UNIT_SCALE)); 
	miniScreenNode_DfShTexture2 = m_pSceneMgr->getRootSceneNode()->createChildSceneNode("MiniScreenNode_DfShTexture2");
	miniScreenNode_DfShTexture2->attachObject(miniScreen_DfShTexture2);
	miniScreen_DfShTexture2->setMaterial("RttMat_DfShTexture2");

	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

	RTT_Texture_DfShTexture3 = Ogre::TextureManager::getSingleton().createManual("RttTex_DfShTexture3",
      "RTTResources", TEX_TYPE_2D, DSWidth, DSHeight, 0, PF_FLOAT16_RGB,
      TU_RENDERTARGET);
	
	renderTexture_DfShTexture3 = RTT_Texture_DfShTexture3->getBuffer()->getRenderTarget();
	renderTexture_DfShTexture3->addViewport(m_pCamera);
	renderTexture_DfShTexture3->getViewport(0)->setClearEveryFrame(true, FBT_COLOUR|FBT_DEPTH);
	renderTexture_DfShTexture3->getViewport(0)->setBackgroundColour(ColourValue::Black);
	renderTexture_DfShTexture3->getViewport(0)->setOverlaysEnabled(false);

	RTT_Mat_DfShTexture3 = MaterialManager::getSingleton().create("RttMat_DfShTexture3", "RTTResources");
	RTT_Technique_DfShTexture3 = RTT_Mat_DfShTexture3->createTechnique();
	RTT_Technique_DfShTexture3->createPass();
	TextureUnitState* tState_DfShTexture3 = RTT_Mat_DfShTexture3->getTechnique(0)->getPass(0)->createTextureUnitState("RttTex_DfShTexture3");
	tState_DfShTexture3->setTextureAddressingMode(Ogre::TextureUnitState::TAM_CLAMP) ;
	RTT_Mat_DfShTexture3->getTechnique(0)->getPass(0)->setLightingEnabled(false);
	RTT_Mat_DfShTexture3->getTechnique(0)->getPass(0)->setTextureFiltering(TFO_NONE) ;

	miniScreen_DfShTexture3 = new Ogre::Rectangle2D(true);
	miniScreen_DfShTexture3->setCorners(-1.0001, 1.0001, 1.0, -1.0);
	miniScreen_DfShTexture3->setBoundingBox(AxisAlignedBox(-100000.0*Vector3::UNIT_SCALE, 100000.0*Vector3::UNIT_SCALE)); 
	miniScreenNode_DfShTexture3 = m_pSceneMgr->getRootSceneNode()->createChildSceneNode("MiniScreenNode_DfShTexture3");
	miniScreenNode_DfShTexture3->attachObject(miniScreen_DfShTexture3);
	miniScreen_DfShTexture3->setMaterial("RttMat_DfShTexture3");

	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// commented out attempt at setting up the MRT
	/*
	rTex[0] = RTT_Texture_DfShTexture0->getBuffer()->getRenderTarget();
  rTex[0]->setAutoUpdated(false);

	rTex[1] = RTT_Texture_DfShTexture1->getBuffer()->getRenderTarget();
  rTex[1]->setAutoUpdated(false);

	rTex[2] = RTT_Texture_DfShTexture2->getBuffer()->getRenderTarget();
  rTex[2]->setAutoUpdated(false);

	rTex[3] = RTT_Texture_DfShTexture3->getBuffer()->getRenderTarget();
  rTex[3]->setAutoUpdated(false);

	// LOAD YOUR MRT MATERIAL HERE 
  mat = MaterialManager::getSingleton().getByName("MRTMaterial");
  mat->load();

	mrtTex = Ogre::Root::getSingleton().getRenderSystem()->createMultiRenderTarget("MRT");
  mrtTex->setAutoUpdated(false);

	// bind surfaces and add viewport
  mrtTex->bindSurface(0, rTex[0]);
  mrtTex->bindSurface(1, rTex[1]);
	mrtTex->bindSurface(2, rTex[2]);
  mrtTex->bindSurface(3, rTex[3]);

	v = mrtTex->addViewport(m_pCamera, mrtTex->getNumViewports());
	v->setBackgroundColour(ColourValue(0.0f, 1.0f, 0.0f, 1.0f));
	v->setClearEveryFrame(false);
	v->setShadowsEnabled(false);
	v->setOverlaysEnabled(false);
	*/
}
Here's where I do the rendering. I'm doing manual updating. It's setup so that I can easily switch which RTT to finally look at. At the moment, it looks at the first one. Again, you'll see commented out code where I tried and failed to render the MRT.

Code: Select all

void OgreFramework::UpdateRenderTargets()
{
	m_pSceneMgr->getRootSceneNode()->removeAllChildren() ;
	m_pSceneMgr->getRootSceneNode()->addChild(m_pCubeNode) ;	
	//mrtTex->update(true) ;

	renderTexture_DfShTexture0->update(true) ;

	m_pSceneMgr->getRootSceneNode()->removeAllChildren() ;
	m_pSceneMgr->getRootSceneNode()->addChild(miniScreenNode_DfShTexture0) ;
	m_pRenderWnd->update(true) ;
}
Here is the material and program. I'm using CG.

Code: Select all

vertex_program mrt_vs cg         
{
   source 0_mrt.cg
   entry_point mrt_vs
   profiles arbvp1 vs_2_x

	default_params
    {
        param_named_auto wvp worldviewproj_matrix
	}
}

fragment_program mrt_ps cg         
{
   source 0_mrt.cg
   entry_point mrt_ps
   profiles ps_2_x fp40 arbfp1 fp30
}


material MRTMaterial
{
    technique
    {
        pass
        {         
           vertex_program_ref mrt_vs
           {
           }

           fragment_program_ref mrt_ps
           {
           }
       }
   }
}

Code: Select all

void mrt_vs(
    float4 InPos : POSITION,

		out float4 OutPos : POSITION, 

    uniform float4x4 wvp
    ) 
{
    OutPos = mul(wvp, InPos);
}


void mrt_ps(
	float4 InPos : POSITION,
	out float4 Colour0 : COLOR0,
	out float4 Colour1 : COLOR1,
	out float4 Colour2 : COLOR2,
	out float4 Colour3 : COLOR3
) 
{
    Colour0 = float4(1,0,0, 1);
		Colour1 = float4(0,1,0, 1);
		Colour2 = float4(0,0,1, 1);
		Colour3 = float4(1,1,1, 1);
}
Anyhow, where this goes now is out of my hands unless the peole who do know how this works can take the time to explain it.
Last edited by mkultra333 on Mon Apr 01, 2013 3:05 pm, edited 1 time in total.
0 x
"In theory there is no difference between practice and theory. In practice, there is." - Psychology Textbook.

User avatar
tuan kuranes
OGRE Retired Moderator
OGRE Retired Moderator
Posts: 2653
Joined: Wed Sep 24, 2003 8:07 am
Location: Haute Garonne, France
Contact:

Re: Wiki MRT article.

Post by tuan kuranes » Thu Jul 01, 2010 12:32 pm

You'll have to diff into ogre code to check what doesn't work in your particular code/hardware combination.
You'll have to make several meaningful test (using compositor + mrt as comparison cases on your hardware, less MRT, different PF and texture parameters, check hlsl or glsl codeetc.), test in opengl,directx with googled demos, etc.
Read and make more docs (all forum post on MRT, on your hardware, on ogre, on opengl, directx) like mrt+AA under dx9 == false, etc...
You can post advancments on forum and when it will ring a bell on someone else experience, you'll get insights, info.
0 x

User avatar
mkultra333
Gold Sponsor
Gold Sponsor
Posts: 1869
Joined: Sun Mar 08, 2009 5:25 am
x 19

Re: Wiki MRT article.

Post by mkultra333 » Thu Jul 01, 2010 12:52 pm

Is that simple material/CG program correct for an MRT? I copied the COLOR0, COLOR1 etc output from a HLSL mrt shader I saw in the compositor sample.
0 x
"In theory there is no difference between practice and theory. In practice, there is." - Psychology Textbook.

User avatar
tuan kuranes
OGRE Retired Moderator
OGRE Retired Moderator
Posts: 2653
Joined: Wed Sep 24, 2003 8:07 am
Location: Haute Garonne, France
Contact:

Re: Wiki MRT article.

Post by tuan kuranes » Thu Jul 01, 2010 1:21 pm

Is that simple material/CG program correct for an MRT? I copied the COLOR0, COLOR1 etc output from a HLSL mrt shader I saw in the compositor sample.
Not sure understand you have it working without using compositor ?
Just a cg compilation problem then ?
CG is tricky when doing complex stuff, so always check hlsl, glsl before diving deeper.
And make sure you use the last version of CG, and check also with profiles (cg are more demanding in term of profile.)
0 x

User avatar
mkultra333
Gold Sponsor
Gold Sponsor
Posts: 1869
Joined: Sun Mar 08, 2009 5:25 am
x 19

Re: Wiki MRT article.

Post by mkultra333 » Thu Jul 01, 2010 1:27 pm

The material runs ok just rendering a mesh with RTT. Since there's only the one target, the mesh comes out red, which is COLOR0.

I just wanted to know if that setup of using COLOR0 to COLOR3 as outputs is the correct way to set up a material program that writes to MRT.

I'll switch to hlsl though if you think that's a better idea. I think the program would be virtually identical.
0 x
"In theory there is no difference between practice and theory. In practice, there is." - Psychology Textbook.

User avatar
tuan kuranes
OGRE Retired Moderator
OGRE Retired Moderator
Posts: 2653
Joined: Wed Sep 24, 2003 8:07 am
Location: Haute Garonne, France
Contact:

Re: Wiki MRT article.

Post by tuan kuranes » Thu Jul 01, 2010 1:51 pm

I think the program would be virtually identical.
You'll have to try anything you do not have total control over, as listed in the todo list above.
You could make a binary demo so that people can try on other pc,gpu too.
I would also use debugging tools like d3D debug mode, Pix and nvperfhud also does help a lot in those case, showing you what ogre really does on the GPU, then I would put some breakpoint inside ogre, checking if all surface are correctly binded, etc..
0 x

User avatar
mkultra333
Gold Sponsor
Gold Sponsor
Posts: 1869
Joined: Sun Mar 08, 2009 5:25 am
x 19

Re: Wiki MRT article.

Post by mkultra333 » Thu Jul 01, 2010 2:51 pm

Debuggers and such aren't much use yet, since there's no specific MRT code to debug. I need higher level info about setting them up than that. Like, for instance, do I use COLOR0 to COLOR3 to output from the pixel shader?
0 x
"In theory there is no difference between practice and theory. In practice, there is." - Psychology Textbook.

User avatar
tuan kuranes
OGRE Retired Moderator
OGRE Retired Moderator
Posts: 2653
Joined: Wed Sep 24, 2003 8:07 am
Location: Haute Garonne, France
Contact:

Re: Wiki MRT article.

Post by tuan kuranes » Thu Jul 01, 2010 3:03 pm

Debuggers and such aren't much use yet, since there's no specific MRT code to debug
nvperfhud for instance show binded texture and render texture in real time.
do I use COLOR0 to COLOR3 to output
yes that's the syntax.
0 x

User avatar
sinbad
OGRE Retired Team Member
OGRE Retired Team Member
Posts: 19261
Joined: Sun Oct 06, 2002 11:19 pm
Location: Guernsey, Channel Islands
Contact:

Re: Wiki MRT article.

Post by sinbad » Thu Jul 01, 2010 5:42 pm

I would check 3 things:

1) That you're not creating viewports for the individual RTTs when you use them via the MRT
2) That your hardware supports MRTs with 4 surfaces (the log will say "Multiple Render Targets: X")
3) That a 4xFLOAT16 gbuffer is supported on your hardware - you might want to try with 4xRGBA as a control test first
0 x

User avatar
sinbad
OGRE Retired Team Member
OGRE Retired Team Member
Posts: 19261
Joined: Sun Oct 06, 2002 11:19 pm
Location: Guernsey, Channel Islands
Contact:

Re: Wiki MRT article.

Post by sinbad » Thu Jul 01, 2010 5:45 pm

And FWIW there's an old PlayPen test that hasn't been ported to the new sample browser but which sets up MRTs manually. Open Tests/PlayPen/src/PlayPen.cpp and look for "testMRT()".
0 x

User avatar
mkultra333
Gold Sponsor
Gold Sponsor
Posts: 1869
Joined: Sun Mar 08, 2009 5:25 am
x 19

Re: Wiki MRT article.

Post by mkultra333 » Fri Jul 02, 2010 3:16 am

That playpen project sounds like it might be useful. I'm working the next few days but will check it out when I'm free. Thanks.
0 x
"In theory there is no difference between practice and theory. In practice, there is." - Psychology Textbook.

User avatar
mkultra333
Gold Sponsor
Gold Sponsor
Posts: 1869
Joined: Sun Mar 08, 2009 5:25 am
x 19

Re: Wiki MRT article.

Post by mkultra333 » Sat Jul 03, 2010 11:24 am

Strangely enough, I managed to do it. That old playpen code was just the thing, wasn't too hard to adapt it.

So the project sets up an MRT without compositors. It shows two ogre heads, each with a different material, and they render to two PF_FLOAT16_RGB surfaces. The user presses the T key to switch between looking at rendertexture0 and rendertexture1. Project includes CG programs and runs in OGL and D3D. I'll just do some final touches and then upload it to the wiki. Here's some pics.

Rendered Texture 0
Image

Rendered Texture 1
Image
0 x
"In theory there is no difference between practice and theory. In practice, there is." - Psychology Textbook.

User avatar
mkultra333
Gold Sponsor
Gold Sponsor
Posts: 1869
Joined: Sun Mar 08, 2009 5:25 am
x 19

Re: Wiki MRT article.

Post by mkultra333 » Sat Jul 03, 2010 1:18 pm

0 x
"In theory there is no difference between practice and theory. In practice, there is." - Psychology Textbook.

User avatar
jacmoe
OGRE Retired Moderator
OGRE Retired Moderator
Posts: 20570
Joined: Thu Jan 22, 2004 10:13 am
Location: Denmark
Contact:

Re: Wiki MRT article.

Post by jacmoe » Sat Jul 03, 2010 1:39 pm

Really cool that you did it! :D
Would you put the two images up there?
Or should I do that? :)
0 x
/* Less noise. More signal. */
Ogitor Scenebuilder - powered by Ogre, presented by Qt, fueled by Passion.
OgreAddons - the Ogre code suppository.

User avatar
mkultra333
Gold Sponsor
Gold Sponsor
Posts: 1869
Joined: Sun Mar 08, 2009 5:25 am
x 19

Re: Wiki MRT article.

Post by mkultra333 » Sat Jul 03, 2010 1:42 pm

Thanks. :)

The images are on ImageShack so I wasn't sure if they'd last. Where should images be hosted?
0 x
"In theory there is no difference between practice and theory. In practice, there is." - Psychology Textbook.

User avatar
jacmoe
OGRE Retired Moderator
OGRE Retired Moderator
Posts: 20570
Joined: Thu Jan 22, 2004 10:13 am
Location: Denmark
Contact:

Re: Wiki MRT article.

Post by jacmoe » Sat Jul 03, 2010 1:55 pm

Toolbox - File Galleries - Cookbook Gallery - Upload - image 1 - add file - image 2 - Upload.
Then go to the page, click the upload/browse button (stacked images) in the edit toolbar, browse gallery - have the leave gallery window open checkbox checked - find the Cookbook gallery and click on the two image links.
You might want to set an additional parameter to the inserted tags:

Code: Select all

width="450"
:wink:

<edit>
You also need to give the page a description - it's in the properties tab - otherwise it will not show in the toc's. :)
0 x
/* Less noise. More signal. */
Ogitor Scenebuilder - powered by Ogre, presented by Qt, fueled by Passion.
OgreAddons - the Ogre code suppository.

User avatar
mkultra333
Gold Sponsor
Gold Sponsor
Posts: 1869
Joined: Sun Mar 08, 2009 5:25 am
x 19

Re: Wiki MRT article.

Post by mkultra333 » Sat Jul 03, 2010 2:49 pm

Done. If you think anything needs fixing, feel free.
0 x
"In theory there is no difference between practice and theory. In practice, there is." - Psychology Textbook.

User avatar
jacmoe
OGRE Retired Moderator
OGRE Retired Moderator
Posts: 20570
Joined: Thu Jan 22, 2004 10:13 am
Location: Denmark
Contact:

Re: Wiki MRT article.

Post by jacmoe » Sat Jul 03, 2010 2:55 pm

Thanks a lot! :)
I fixed it so that the images uses blackbox popup (rel="box[g]")
0 x
/* Less noise. More signal. */
Ogitor Scenebuilder - powered by Ogre, presented by Qt, fueled by Passion.
OgreAddons - the Ogre code suppository.

User avatar
mkultra333
Gold Sponsor
Gold Sponsor
Posts: 1869
Joined: Sun Mar 08, 2009 5:25 am
x 19

Re: Wiki MRT article.

Post by mkultra333 » Tue Nov 27, 2012 3:35 pm

Someone asked me for the files to this project, so here's a re-upload. This is from over two years ago though, so it might take a little bit of work to update it to Ogre 1.8. Probably not much though.

http://www.filedropper.com/mrtexp07100703
0 x
"In theory there is no difference between practice and theory. In practice, there is." - Psychology Textbook.

User avatar
mkultra333
Gold Sponsor
Gold Sponsor
Posts: 1869
Joined: Sun Mar 08, 2009 5:25 am
x 19

Re: Wiki MRT article.

Post by mkultra333 » Mon Mar 18, 2013 4:24 pm

Another person after the code, new link:

http://www.filedropper.com/mrtexp07100703
0 x
"In theory there is no difference between practice and theory. In practice, there is." - Psychology Textbook.

User avatar
jacmoe
OGRE Retired Moderator
OGRE Retired Moderator
Posts: 20570
Joined: Thu Jan 22, 2004 10:13 am
Location: Denmark
Contact:

Re: Wiki MRT article.

Post by jacmoe » Mon Mar 18, 2013 4:31 pm

It is possible to attach files to the wiki, if the file is small enough, btw. :)
0 x
/* Less noise. More signal. */
Ogitor Scenebuilder - powered by Ogre, presented by Qt, fueled by Passion.
OgreAddons - the Ogre code suppository.

User avatar
mkultra333
Gold Sponsor
Gold Sponsor
Posts: 1869
Joined: Sun Mar 08, 2009 5:25 am
x 19

Re: Wiki MRT article.

Post by mkultra333 » Mon Mar 18, 2013 5:43 pm

That would be handy. I'll give it a shot.
Edit: Hmm, not sure it's gonna work, zip file is about 10 meg and the max is apparently 2 meg.

Noticed the link to the actual article above doesn't work anymore, correct one is http://www.ogre3d.org/tikiwiki/tiki-ind ... er+Targets
0 x
"In theory there is no difference between practice and theory. In practice, there is." - Psychology Textbook.

User avatar
mkultra333
Gold Sponsor
Gold Sponsor
Posts: 1869
Joined: Sun Mar 08, 2009 5:25 am
x 19

Re: Wiki MRT article.

Post by mkultra333 » Mon Apr 01, 2013 3:07 pm

The short term file hosts seem to expire pretty quickly, and I still get the occasional PM asking for this code, so I've added it to a permanent location and updated the top link. Here it is again.

VS9 Project is here: http://necromutex.com/MRTExp07_100703.zip

Remember that this code is for an older version (1.6 or 1.7, I forget which) so it will take a little tweaking to get running with the current version, but probably not much.
0 x
"In theory there is no difference between practice and theory. In practice, there is." - Psychology Textbook.

Post Reply