At first I set fog to the driver:
Code: Select all
driver->setFog(video::SColor(0,0,0,0), video::EFT_FOG_LINEAR, 0, 500, .003f, true, false);
Code: Select all
scene::IQ3LevelMesh* const mesh =
(scene::IQ3LevelMesh*) smgr->getMesh(mapname);
/*
add the geometry mesh to the Scene ( polygon & patches )
The Geometry mesh is optimised for faster drawing
*/
scene::ISceneNode* node = 0;
if (mesh)
{
scene::IMesh * const geometry = mesh->getMesh(quake3::E_Q3_MESH_GEOMETRY);
node = smgr->addOctreeSceneNode(geometry, 0, -1, 4096);
node->setMaterialFlag(video::EMF_FOG_ENABLE, true);
}
Code: Select all
if ( mesh )
{
// the additional mesh can be quite huge and is unoptimized
const scene::IMesh * const additional_mesh = mesh->getMesh(quake3::E_Q3_MESH_ITEMS);
for ( u32 i = 0; i!= additional_mesh->getMeshBufferCount(); ++i )
{
const IMeshBuffer* meshBuffer = additional_mesh->getMeshBuffer(i);
const video::SMaterial& material = meshBuffer->getMaterial();
const s32 shaderIndex = (s32) material.MaterialTypeParam2;
const quake3::IShader *shader = mesh->getShader(shaderIndex);
if (0 == shader)
{
continue;
}
node = smgr->addQuake3SceneNode(meshBuffer, shader);
node->setMaterialFlag(video::EMF_FOG_ENABLE, true);
}
}
After I've found out that shader's materials are readOnly
Here's shaders I used:
Code: Select all
textures/dsi/dsiglass
{
qer_editorimage textures/dsi/dsiglass2.tga
surfaceparm trans
cull disable
qer_trans 0.5
{
map textures/dsi/dsiglass2.tga
blendfunc blend
rgbGen vertex
}
}
So.. Please, help me apply fog to shaders objects. Is there a way to do it? (May be in shader files, or by using transparent textures some different way)