Perhaps others can have a look at the problem, I rather too swept off my feet right now to try out user code.
On 5 October 2013 18:15, Sajjadul Islam <[email protected]> wrote: > Thanks Robert!! > > I got it worked. There is some minor issue though . > > The mouse interaction is not functional. I checked the simplegl3 example > and the mouse interaction is working fine there. What i could have missed > again ? > > Here goes the whole source so that you can try it in your end. > > > Code: > > #include <osg/ref_ptr> > #include <osgDB/Registry> > #include <osgDB/WriteFile> > #include <osg/Notify> > #include <osg/Geode> > #include <osg/GraphicsContext> > #include <osg/Geometry> > #include <osg/Shader> > #include <osg/Program> > #include <osg/Camera> > #include <osgViewer/Viewer> > > #include <iostream> > > using std::endl; > > osg::ref_ptr<osg::Node> createSceneGraph(); > > int main() > { > osg::ref_ptr<osg::Node> root = createSceneGraph(); > > const std::string version("3.1"); > osg::ref_ptr<osg::GraphicsContext::Traits> traits = new > osg::GraphicsContext::Traits(); > traits->x = 20; > traits->y = 30; > traits->width = 800; > traits->height = 600; > traits->windowDecoration = true; > traits->doubleBuffer = true; > traits->glContextVersion = version; > > > osg::ref_ptr< osg::GraphicsContext > gc = > osg::GraphicsContext::createGraphicsContext( traits.get() ); > > if( !gc.valid() ) > { > osg::notify( osg::FATAL ) << "Unable to create OpenGL v" << version > << " context." << std::endl; > return( 1 ); > } > > osg::ref_ptr<osg::Camera> camera = new osg::Camera; > camera->setGraphicsContext(gc.get()); > camera->setViewport(new osg::Viewport(0,0,traits->width,traits->height)); > > osgViewer::Viewer viewer; > viewer.setCamera(camera.get()); > viewer.setSceneData(root.get()); > > return viewer.run() ; > } > > osg::ref_ptr<osg::Node> createSceneGraph() > { > //create an object to store the geometry in > osg::ref_ptr<osg::Geometry> geom = new osg::Geometry; > > //create an array of four vertices > osg::ref_ptr<osg::Vec3Array> v = new osg::Vec3Array; > > v->push_back(osg::Vec3(-0.8f, -0.8f, 0.0f)); > v->push_back(osg::Vec3(0.8f, -0.8f, 0.0f)); > v->push_back(osg::Vec3(0.0f, 0.8f, 0.0f)); > > // geom->setVertexArray(v.get()); > > //make sure that vertex array is used > geom->setUseDisplayList(false); > geom->setVertexAttribArray(0,v.get()); > geom->setVertexAttribBinding(0,osg::Geometry::BIND_PER_VERTEX); > > //create an array of three colors > osg::ref_ptr<osg::Vec3Array> c = new osg::Vec3Array; > c->push_back(osg::Vec3(1.0f, 0.0f, 0.0f)); > c->push_back(osg::Vec3(0.0f, 1.0f, 0.0f)); > c->push_back(osg::Vec3(0.0f, 0.0f, 1.0f)); > > // geom->setColorArray(c.get()); > geom->setColorBinding(osg::Geometry::BIND_PER_VERTEX); > geom->setVertexAttribArray(1,c.get()); > geom->setVertexAttribBinding(1,geom->getColorBinding()); > > > //draw a three-vertex tringle from the stored data > geom->addPrimitiveSet(new > osg::DrawArrays(osg::PrimitiveSet::TRIANGLES,0,3)); > > //add the geometry to the geode and return the geode > osg::ref_ptr<osg::Geode> geode = new osg::Geode; > geode->addDrawable(geom.get()); > > > osg::ref_ptr<osg::StateSet> primitiveState = > geode->getOrCreateStateSet(); > > > osg::ref_ptr<osg::Program> basicPrimitiveShaderProg = new osg::Program; > > osg::ref_ptr<osg::Shader> > primitiveVertexShader(osg::Shader::readShaderFile(osg::Shader::VERTEX,"shader/basic.vert")); > osg::ref_ptr<osg::Shader> > elephantFragmentShader(osg::Shader::readShaderFile(osg::Shader::FRAGMENT,"shader/basic.frag")); > > basicPrimitiveShaderProg->addShader(primitiveVertexShader.get()); > basicPrimitiveShaderProg->addShader(elephantFragmentShader.get()); > > basicPrimitiveShaderProg->addBindAttribLocation("VertexPosition",0); > basicPrimitiveShaderProg->addBindAttribLocation("VertexColor",1); > > > primitiveState->setAttributeAndModes(basicPrimitiveShaderProg.get(),osg::StateAttribute::ON); > > > return geode.get(); > } > > > > > And the shaders are : > > > Code: > > #version 400 > > in vec3 VertexPosition; > in vec3 VertexColor; > > out vec3 Color; > > void main() > { > Color = VertexColor; > > gl_Position = vec4(VertexPosition,1.0); > } > > > > > And the fragment shader > > > Code: > > #version 400 > > in vec3 Color; > > out vec4 FragColor; > > void main() > { > FragColor = vec4(Color,1.0); > } > > > > > Please try it on your end and let me know!! > > Regards > Sajjadul > > ------------------ > Read this topic online here: > http://forum.openscenegraph.org/viewtopic.php?p=56633#56633 > > > > > > _______________________________________________ > osg-users mailing list > [email protected] > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org >
_______________________________________________ osg-users mailing list [email protected] http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

