Hi all, I solved this by rolling my own geometry and dropping the use of osg::Box. This function replaces the createCube function from the previously posted code snippet.
I simply define my own color, vertex and normal buffer using Quad primitives. Now the wireframe looks sane again. static osg::Geode* createCube(float fRadius, osg::Vec3 vPosition, osg::Vec4 color) { osg::Geode* geode = new osg::Geode(); osg::Geometry* cubeGeom = new osg::Geometry(); osg::Vec4Array *colors = new osg::Vec4Array; colors->push_back(color); // define normals for each face osg::ref_ptr<osg::Vec3Array> cube_normals = new osg::Vec3Array; cube_normals->push_back(osg::Vec3( 0.0f,-1.0f, 0.0f)); cube_normals->push_back(osg::Vec3( 0.0f,-1.0f, 0.0f)); cube_normals->push_back(osg::Vec3( 0.0f,-1.0f, 0.0f)); cube_normals->push_back(osg::Vec3( 0.0f,-1.0f, 0.0f)); cube_normals->push_back(osg::Vec3( 0.0f,+1.0f, 0.0f)); cube_normals->push_back(osg::Vec3( 0.0f,+1.0f, 0.0f)); cube_normals->push_back(osg::Vec3( 0.0f,+1.0f, 0.0f)); cube_normals->push_back(osg::Vec3( 0.0f,+1.0f, 0.0f)); cube_normals->push_back(osg::Vec3(+1.0f,+0.0f, 0.0f)); cube_normals->push_back(osg::Vec3(+1.0f,+0.0f, 0.0f)); cube_normals->push_back(osg::Vec3(+1.0f,+0.0f, 0.0f)); cube_normals->push_back(osg::Vec3(+1.0f,+0.0f, 0.0f)); cube_normals->push_back(osg::Vec3(-1.0f,+0.0f, 0.0f)); cube_normals->push_back(osg::Vec3(-1.0f,+0.0f, 0.0f)); cube_normals->push_back(osg::Vec3(-1.0f,+0.0f, 0.0f)); cube_normals->push_back(osg::Vec3(-1.0f,+0.0f, 0.0f)); cube_normals->push_back(osg::Vec3( 0.0f,+0.0f,-1.0f)); cube_normals->push_back(osg::Vec3( 0.0f,+0.0f,-1.0f)); cube_normals->push_back(osg::Vec3( 0.0f,+0.0f,-1.0f)); cube_normals->push_back(osg::Vec3( 0.0f,+0.0f,-1.0f)); cube_normals->push_back(osg::Vec3( 0.0f,+0.0f,+1.0f)); cube_normals->push_back(osg::Vec3( 0.0f,+0.0f,+1.0f)); cube_normals->push_back(osg::Vec3( 0.0f,+0.0f,+1.0f)); cube_normals->push_back(osg::Vec3( 0.0f,+0.0f,+1.0f)); vPosition += osg::Vec3(+fRadius/2, +fRadius/2, +fRadius/2); // note, counterclockwise winding order with respect to normals osg::Vec3 myCoords[] = { // bottom face osg::Vec3(-fRadius, -fRadius, -fRadius) + vPosition, osg::Vec3(+fRadius, -fRadius, -fRadius) + vPosition, osg::Vec3(+fRadius, -fRadius, +fRadius) + vPosition, osg::Vec3(-fRadius, -fRadius, +fRadius) + vPosition, // top face osg::Vec3(-fRadius, +fRadius, +fRadius) + vPosition, osg::Vec3(+fRadius, +fRadius, +fRadius) + vPosition, osg::Vec3(+fRadius, +fRadius, -fRadius) + vPosition, osg::Vec3(-fRadius, +fRadius, -fRadius) + vPosition, // right face osg::Vec3(+fRadius, -fRadius, -fRadius) + vPosition, osg::Vec3(+fRadius, +fRadius, -fRadius) + vPosition, osg::Vec3(+fRadius, +fRadius, +fRadius) + vPosition, osg::Vec3(+fRadius, -fRadius, +fRadius) + vPosition, // left face osg::Vec3(-fRadius, -fRadius, +fRadius) + vPosition, osg::Vec3(-fRadius, +fRadius, +fRadius) + vPosition, osg::Vec3(-fRadius, +fRadius, -fRadius) + vPosition, osg::Vec3(-fRadius, -fRadius, -fRadius) + vPosition, // front face osg::Vec3(-fRadius, +fRadius, -fRadius) + vPosition, osg::Vec3(+fRadius, +fRadius, -fRadius) + vPosition, osg::Vec3(+fRadius, -fRadius, -fRadius) + vPosition, osg::Vec3(-fRadius, -fRadius, -fRadius) + vPosition, // back face osg::Vec3(-fRadius, -fRadius, +fRadius) + vPosition, osg::Vec3(+fRadius, -fRadius, +fRadius) + vPosition, osg::Vec3(+fRadius, +fRadius, +fRadius) + vPosition, osg::Vec3(-fRadius, +fRadius, +fRadius) + vPosition }; int numCoords = sizeof(myCoords)/sizeof(osg::Vec3); osg::Vec3Array* vertices = new osg::Vec3Array(numCoords,myCoords); cubeGeom->setVertexArray(vertices); cubeGeom->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::QUADS,0,numCoords)); cubeGeom->setColorArray(colors); cubeGeom->setColorBinding(osg::Geometry::BIND_OVERALL); cubeGeom->setNormalArray(cube_normals.get()); cubeGeom->setNormalBinding(osg::Geometry::BIND_PER_VERTEX); geode->addDrawable(cubeGeom); return geode; } _______________________________________________ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org