You need to call cull() before you call draw otherwise you will have nothing to draw, the cull sets up the draw records to be drawn for the frame., so no cull nothing to draw .
__________________________________________________________ Gordon Tomlinson Email : <mailto:[EMAIL PROTECTED]> [EMAIL PROTECTED] YIM/AIM : gordon3dBrit MSN IM : <mailto:[EMAIL PROTECTED]> [EMAIL PROTECTED] Website : <http://www.vis-sim.com> www.vis-sim.com <http://www.gordontomlinson.com> www.gordontomlinson.com __________________________________________________________ From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of [EMAIL PROTECTED] Sent: Tuesday, April 08, 2008 7:51 AM To: [email protected] Subject: [osg-users] SceneView error 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 = new osg::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 = new osg::DrawElementsUInt(osg::PrimitiveSet::TRIANGLES, 0); pyramidFaceOne->push_back(0); pyramidFaceOne->push_back(1); pyramidFaceOne->push_back(4); pyramidGeometry->addPrimitiveSet(pyramidFaceOne); osg::DrawElementsUInt* pyramidFaceTwo = new osg::DrawElementsUInt(osg::PrimitiveSet::TRIANGLES, 0); pyramidFaceTwo->push_back(1); pyramidFaceTwo->push_back(2); pyramidFaceTwo->push_back(4); pyramidGeometry->addPrimitiveSet(pyramidFaceTwo); osg::DrawElementsUInt* pyramidFaceThree = new osg::DrawElementsUInt(osg::PrimitiveSet::TRIANGLES, 0); pyramidFaceThree->push_back(2); pyramidFaceThree->push_back(3); pyramidFaceThree->push_back(4); pyramidGeometry->addPrimitiveSet(pyramidFaceThree); osg::DrawElementsUInt* pyramidFaceFour = new osg::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

