Hi Erf???
Can't make any sense of your email, and not about to go trying to sieve
through your example code trying to work out what you might mean.
Please try and be specific, tell us what error you get, a compile, and link
error, a runtime error????
Also try telling us which version of the OSG you are talking about? 2.x
doesn't have any SceneView examples for instance...
Robert.
On Tue, Apr 8, 2008 at 12:50 PM, <[EMAIL PROTECTED]> wrote:
> I try to use OpenSceneGraph and SceneView as shown in example when using
> an existing renderer, but get an error when calling "SceneView->draw()" or
> more spesific in
>
>
>
> "_localStateSet->setAttribute(getViewport());"
>
>
>
> The example code I use is as following:
>
>
>
> int CMapRenderThread::InitOpenSceneGraph()
>
> {
>
> root = new osg::Group;
>
> pyramidGeode = new osg::Geode;
>
> pyramidGeometry = new osg::Geometry;
>
>
>
> // Associate the pyramid geometry with the pyramid geode
>
> // Add the pyramid geode to the root node of the scene graph.
>
> pyramidGeode->addDrawable(pyramidGeometry);
>
> root->addChild(pyramidGeode);
>
>
>
> // Declare an array of vertices.
>
> osg::Vec3Array* pyramidVertices = new osg::Vec3Array;
>
> pyramidVertices->push_back( osg::Vec3( 0, 0, 0) ); // front left
>
> pyramidVertices->push_back( osg::Vec3(10, 0, 0) ); // front right
>
> pyramidVertices->push_back( osg::Vec3(10,10, 0) ); // back right
>
> pyramidVertices->push_back( osg::Vec3( 0,10, 0) ); // back left
>
> pyramidVertices->push_back( osg::Vec3( 5, 5,10) ); // peak
>
> pyramidGeometry->setVertexArray( pyramidVertices );
>
>
>
> // Create a primitive set and add it to the pyramid geometry.
>
> osg::DrawElementsUInt* pyramidBase =
> newosg::DrawElementsUInt(osg::PrimitiveSet::QUADS, 0);
>
> pyramidBase->push_back(3);
>
> pyramidBase->push_back(2);
>
> pyramidBase->push_back(1);
>
> pyramidBase->push_back(0);
>
> pyramidGeometry->addPrimitiveSet(pyramidBase);
>
>
>
> // Repeat the same for each of the four sides. Again, vertices are
>
> // specified in counter-clockwise order.
>
> osg::DrawElementsUInt* pyramidFaceOne =
> newosg::DrawElementsUInt(osg::PrimitiveSet::TRIANGLES, 0);
>
> pyramidFaceOne->push_back(0);
>
> pyramidFaceOne->push_back(1);
>
> pyramidFaceOne->push_back(4);
>
> pyramidGeometry->addPrimitiveSet(pyramidFaceOne);
>
>
>
> osg::DrawElementsUInt* pyramidFaceTwo =
> newosg::DrawElementsUInt(osg::PrimitiveSet::TRIANGLES, 0);
>
> pyramidFaceTwo->push_back(1);
>
> pyramidFaceTwo->push_back(2);
>
> pyramidFaceTwo->push_back(4);
>
> pyramidGeometry->addPrimitiveSet(pyramidFaceTwo);
>
>
>
> osg::DrawElementsUInt* pyramidFaceThree =
> newosg::DrawElementsUInt(osg::PrimitiveSet::TRIANGLES, 0);
>
> pyramidFaceThree->push_back(2);
>
> pyramidFaceThree->push_back(3);
>
> pyramidFaceThree->push_back(4);
>
> pyramidGeometry->addPrimitiveSet(pyramidFaceThree);
>
>
>
> osg::DrawElementsUInt* pyramidFaceFour =
> newosg::DrawElementsUInt(osg::PrimitiveSet::TRIANGLES, 0);
>
> pyramidFaceFour->push_back(3);
>
> pyramidFaceFour->push_back(0);
>
> pyramidFaceFour->push_back(4);
>
> pyramidGeometry->addPrimitiveSet(pyramidFaceFour);
>
>
>
> // Declare and load an array of Vec4 elements to store colors.
>
> osg::Vec4Array* colors = new osg::Vec4Array;
>
> colors->push_back(osg::Vec4(1.0f, 0.0f, 0.0f, 1.0f) ); //index 0 red
>
> colors->push_back(osg::Vec4(0.0f, 1.0f, 0.0f, 1.0f) ); //index 1
> green
>
> colors->push_back(osg::Vec4(0.0f, 0.0f, 1.0f, 1.0f) ); //index 2
> blue
>
> colors->push_back(osg::Vec4(1.0f, 1.0f, 1.0f, 1.0f) ); //index 3
> white
>
>
>
> // Declare the variable that will match vertex array elements to
> color
>
> // array elements.
>
> osg::TemplateIndexArray<unsigned int, osg::Array::UIntArrayType,4,4>
> *colorIndexArray;
>
> colorIndexArray = new osg::TemplateIndexArray<unsigned int,
> osg::Array::UIntArrayType,4,4>;
>
> colorIndexArray->push_back(0); // vertex 0 assigned color array
> element 0
>
> colorIndexArray->push_back(1); // vertex 1 assigned color array
> element 1
>
> colorIndexArray->push_back(2); // vertex 2 assigned color array
> element 2
>
> colorIndexArray->push_back(3); // vertex 3 assigned color array
> element 3
>
> colorIndexArray->push_back(0); // vertex 4 assigned color array
> element 0
>
>
>
> // The next step is to associate the array of colors with the
> geometry,
>
> // assign the color indices created above to the geometry and set
> the
>
> // binding mode to BIND_PER_VERTEX.
>
> pyramidGeometry->setColorArray(colors);
>
> pyramidGeometry->setColorIndices(colorIndexArray);
>
> pyramidGeometry->setColorBinding(osg::Geometry::BIND_PER_VERTEX);
>
>
>
> // Declare and initialize a transform node.
>
> pyramidTwoXForm = new osg::PositionAttitudeTransform;
>
>
>
> // Use the 'addChild' method of the osg::Group class to
>
> // add the transform as a child of the root node and the
>
> // pyramid node as a child of the transform.
>
> root->addChild(pyramidTwoXForm);
>
> pyramidTwoXForm->addChild(pyramidGeode);
>
>
>
> // Declare and initialize a Vec3 instance to change the
>
> // position of the model in the scene
>
>
>
> //m_pRenderer->
>
>
>
> //double x,y,z;
>
> //LatLonAltToXYZ(61.0, 10.0, 500.0, &x, &y, &z, this);
>
> //osg::Vec3 pyramidTwoPosition(x,y,z);
>
> //pyramidTwoXForm->setPosition( pyramidTwoPosition );
>
>
>
> pyramidTwoXForm->setScale(osg::Vec3d(100,100,100));
>
>
>
> // The final step is to set up and enter a simulation loop.
>
> /*
>
> osgViewer::Viewer viewer;
>
> viewer.setSceneData( root );
>
> viewer.setCameraManipulator(new osgGA::TrackballManipulator);
>
> viewer.realize();
>
>
>
> while( !viewer.done() )
>
> {
>
> viewer.frame();
>
> }
>
> */
>
>
>
> //visitor = new
> osg::NodeVisitor(osg::NodeVisitor::TRAVERSE_ACTIVE_CHILDREN);
>
> //visitor = new osg::NodeVisitor;
>
>
>
> sceneViewer = new osgUtil::SceneView();
>
>
>
> sceneViewer->setDefaults();
>
> sceneViewer->setComputeNearFarMode(
> osgUtil::CullVisitor::DO_NOT_COMPUTE_NEAR_FAR );
>
> sceneViewer->setSceneData(root);
>
>
>
> return 0;
>
> }
>
>
>
> int CMapRenderThread::DrawOpenSceneGraph()
>
> {
>
> // init
>
> GLint viewParams[4];
>
> glGetIntegerv( GL_VIEWPORT, viewParams );
>
> sceneViewer->setViewport(viewParams[0], viewParams[1],
> viewParams[2], viewParams[3]);
>
>
>
> GLfloat glMat[16];
>
> osg::Matrix osgMat;
>
>
>
> glGetFloatv( GL_PROJECTION_MATRIX, glMat );
>
> osgMat.set( glMat );
>
> sceneViewer->setProjectionMatrix(osgMat);
>
>
>
> glGetFloatv( GL_MODELVIEW_MATRIX, glMat );
>
> osgMat.set( glMat );
>
> sceneViewer->setViewMatrix(osgMat);
>
>
>
>
>
> // reset all
>
> glPushAttrib(GL_ALL_ATTRIB_BITS );
>
> glMatrixMode(GL_PROJECTION);
>
> glPushMatrix();
>
> glMatrixMode(GL_TEXTURE);
>
> glPushMatrix();
>
> glMatrixMode(GL_MODELVIEW);
>
> glPushMatrix();
>
>
>
>
>
> // draw objects in scenegraph
>
> sceneViewer->draw();
>
>
>
>
>
> // set back
>
> glMatrixMode(GL_TEXTURE);
>
> glPopMatrix();
>
> glMatrixMode(GL_PROJECTION);
>
> glPopMatrix();
>
> glMatrixMode(GL_MODELVIEW);
>
> glPopMatrix();
>
> glPopAttrib();
>
>
>
> return 0;
>
> }
>
>
>
> _______________________________________________
> 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