env:gl3&osg3.6.4
OpenSceneGraph <https://github.com/openscenegraph/OpenSceneGraph>/examples 
<https://github.com/openscenegraph/OpenSceneGraph/tree/master/examples>/
osgdeferred 
<https://github.com/openscenegraph/OpenSceneGraph/tree/master/examples/osgdeferred>

Pipeline createPipelinePlainOSG(

osg::ref_ptr<osg::Group> scene,

osg::ref_ptr<osgShadow::ShadowedScene> shadowedScene,

const osg::Vec3 lightPos)

{

Pipeline p;

p.graph = new osg::Group;

p.textureSize = 1024;



// Pass 1 (shadow).

p.pass1Shadows = createFloatTextureRectangle(p.textureSize);

osg::ref_ptr<osg::Camera> pass1 =

createRTTCamera(osg::Camera::COLOR_BUFFER, p.pass1Shadows);

pass1->addChild(shadowedScene.get());



// pass2 shades expects tangent vectors to be available as texcoord array 
for texture #1

// we use osgUtil::TangentSpaceGenerator to generate these

CreateTangentSpace cts;

scene->accept(cts);



// Pass 2 (positions, normals, colors).

p.pass2Positions = createFloatTextureRectangle(p.textureSize);

p.pass2Normals = createFloatTextureRectangle(p.textureSize);

p.pass2Colors = createFloatTextureRectangle(p.textureSize);

osg::ref_ptr<osg::Camera> pass2 =

createRTTCamera(osg::Camera::COLOR_BUFFER0, p.pass2Positions);

pass2->attach(osg::Camera::COLOR_BUFFER1, p.pass2Normals);

pass2->attach(osg::Camera::COLOR_BUFFER2, p.pass2Colors);

pass2->addChild(scene.get());

osg::ref_ptr<osg::StateSet> ss = setShaderProgram(pass2, 
"shaders/pass2.vert", "shaders/pass2.frag");

ss->setTextureAttributeAndModes(0, 
createTexture("Images/whitemetal_diffuse.jpg"));

ss->setTextureAttributeAndModes(1, 
createTexture("Images/whitemetal_normal.jpg"));

ss->addUniform(new osg::Uniform("diffMap", 0));

ss->addUniform(new osg::Uniform("bumpMap", 1));

ss->addUniform(new osg::Uniform("useBumpMap", 1));



// Pass 3 (final).

p.pass3Final = createFloatTextureRectangle(p.textureSize);

osg::ref_ptr<osg::Camera> pass3 =

createRTTCamera(osg::Camera::COLOR_BUFFER, p.pass3Final, true);

ss = setShaderProgram(pass3, "shaders/pass3.vert", "shaders/pass3.frag");

ss->setTextureAttributeAndModes(0, p.pass2Positions);

ss->setTextureAttributeAndModes(1, p.pass2Normals);

ss->setTextureAttributeAndModes(2, p.pass2Colors);

ss->setTextureAttributeAndModes(3, p.pass1Shadows);

ss->addUniform(new osg::Uniform("posMap", 0));

ss->addUniform(new osg::Uniform("normalMap", 1));

ss->addUniform(new osg::Uniform("colorMap", 2));

ss->addUniform(new osg::Uniform("shadowMap", 3));

// Light position.

ss->addUniform(new osg::Uniform("lightPos", lightPos));

// Graph.

p.graph->addChild(pass1);

p.graph->addChild(pass2);

p.graph->addChild(pass3);

return p;

}

-- 
You received this message because you are subscribed to the Google Groups 
"OpenSceneGraph Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/osg-users/25d27628-d352-45fa-9d00-1126f438cdb6n%40googlegroups.com.

Reply via email to