-Material | Ogre Wiki (original) (raw)

A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | 0-9


Material - A material determines how the surface of a mesh will appear after being rendered. You can e.g. assign texture, set colours, enable lighting or shadow-receiving as well as assigning shader.

Transparency

If you have problems with transparency, look for some important material options.

Depth write can be turned off when rendering static backgrounds or when rendering a collection of transparent objects at the end of a scene so that they overlap each other correctly.

Apply in material script:

Copy to clipboard

material TransparencyExample { technique { pass { //... scene_blend alpha_blend depth_write off } } }

Apply by code:

Copy to clipboard

myMaterialPtr->getTechnique(0)->getPass(0)->setSceneBlending(Ogre::SBT_TRANSPARENT_ALPHA); myMaterialPtr->getTechnique(0)->getPass(0)->setDepthWriteEnabled(false);

Apply by code (C# example for Mogre):

Copy to clipboard

myMaterialPtr.GetTechnique(0).GetPass(0).SetSceneBlending(SceneBlendType.SBT_TRANSPARENT_ALPHA); myMaterialPtr.GetTechnique(0).GetPass(0).DepthWriteEnabled = false;

Both-side visibility

By default a material is only visible from one side.
This is usable for volumetric bodies. (e.g. an (unripped) monster you don't need to see from inside).
For flat surfaces (e.g. a water surface or billboards) often there is a whish to have a both-side visibility.

Enable both-side visibility by a *.material file:
(For details look to this section of the Ogre manual.)

Copy to clipboard

material TransparencyExample { technique { pass { //... cull_hardware none cull_software none } } }

To enable both-side visibility by code call the material related method Pass::setCullingMode().
Example:

Copy to clipboard

myMaterialPtr::getTechnique(0)::getPass(0)::setCullingMode(CullingMode::CULL_NONE);

Apply to Mesh

Apply a material to a (sub)mesh by code:

Copy to clipboard

entity::getSubEntity(0)::setMaterialName("myMaterialName");

Dynamic usage

It's possible to update a ManualObject to change it's shape or properties. For this you need to set the dynamic flag:

Copy to clipboard

ManualObject::setDynamic(true);

Then you can update its content:

Copy to clipboard

manObj->beginUpdate(); ... // Recreate object ... manObj->end();

When you are going to be changing the number of vertices, you additionally should call this:

Copy to clipboard

ManualObject::estimateVertexCount(); ManualObject::estimateIndexCount()

Alternatively you can use the low level class DynamicRenderable. A usage example is on page .

See also

Ogre Manual: