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.