Thanks Jason,
true, I was using ShapeDrawables. However, I was already working on converting 
the geometries to use osg::Geometry. I have not done the cylinders yet; however 
I have converted the cubes, and, unfortunately the results are exactly the 
same. The code used to generate the cube geometry is pretty basic. Here it is:
Code:
osg::Geometry* CCubicPore::createCubeGeometry( const osg::Vec3& halfLengths, 
const osg::Vec4& color)
 {
    const float xMin( -halfLengths[ 0 ] );
    const float xMax( halfLengths[ 0 ] );
    const float yMin( -halfLengths[ 1 ] );
    const float yMax( halfLengths[ 1 ] );
    const float zMin( -halfLengths[ 2 ] );
    const float zMax( halfLengths[ 2 ] );

     osg::Geometry* cube = new osg::Geometry();
     osg::ref_ptr< osg::Vec3Array > vertices = osg::ref_ptr< osg::Vec3Array >( 
new osg::Vec3Array );
     osg::ref_ptr< osg::Vec3Array > normals = osg::ref_ptr< osg::Vec3Array >( 
new osg::Vec3Array );
     osg::ref_ptr< osg::Vec4Array > colors = osg::ref_ptr< osg::Vec4Array >( 
new osg::Vec4Array );

    // front face
     vertices->push_back( osg::Vec3(xMin,yMin,zMax) );
     vertices->push_back( osg::Vec3(xMax,yMin,zMax) );
     vertices->push_back( osg::Vec3(xMax,yMax,zMax) );
     vertices->push_back( osg::Vec3(xMin,yMax,zMax) );
     normals->push_back( osg::Vec3( 0.0, 0.0, -1.0 ) );

     // back face
     vertices->push_back( osg::Vec3(xMax,yMin,zMin) );
     vertices->push_back( osg::Vec3(xMin,yMin,zMin) );
     vertices->push_back( osg::Vec3(xMin,yMax,zMin) );
     vertices->push_back( osg::Vec3(xMax,yMax,zMin) );
     normals->push_back( osg::Vec3( 0.0, 0.0, 1.0 ) );

     // left
     vertices->push_back( osg::Vec3(xMin,yMax,zMax) );
     vertices->push_back( osg::Vec3(xMin,yMax,zMin) );
     vertices->push_back( osg::Vec3(xMin,yMin,zMin) );
     vertices->push_back( osg::Vec3(xMin,yMin,zMax) );
    normals->push_back( osg::Vec3( -1.0, 0.0, 0.0 ) );

    // right
    vertices->push_back( osg::Vec3(xMax,yMax,zMin) );
    vertices->push_back( osg::Vec3(xMax,yMax,zMax) );
    vertices->push_back( osg::Vec3(xMax,yMin,zMax) );
    vertices->push_back( osg::Vec3(xMax,yMin,zMin) );
     normals->push_back( osg::Vec3( 1.0, 0.0, 0.0 ) );

     // bottom
     vertices->push_back( osg::Vec3(xMax,yMin,zMax) );
     vertices->push_back( osg::Vec3(xMin,yMin,zMax) );
     vertices->push_back( osg::Vec3(xMin,yMin,zMin) );
     vertices->push_back( osg::Vec3(xMax,yMin,zMin) );
     normals->push_back( osg::Vec3( 0.0, -1.0, 0.0 ) );

     // top
     vertices->push_back( osg::Vec3(xMax,yMax,zMax) );
     vertices->push_back( osg::Vec3(xMax,yMax,zMin) );
     vertices->push_back( osg::Vec3(xMin,yMax,zMin) );
     vertices->push_back( osg::Vec3(xMin,yMax,zMax) );
     normals->push_back( osg::Vec3( 0.0, 1.0, 0.0 ) );
 
     cube->addPrimitiveSet( new osg::DrawArrays( osg::PrimitiveSet::QUADS, 0, 
vertices->size() ) );
     cube->setVertexArray( vertices );

     cube->setTexCoordArray( 0, vertices );

     cube->setNormalArray( normals );
     cube->setNormalBinding( osg::Geometry::BIND_PER_PRIMITIVE );

     colors->push_back( color );
     cube->setColorArray( colors );
     cube->setColorBinding( osg::Geometry::BIND_OVERALL );

     return cube;
 }



then I use osg::PositionAttitudeTransform to move the cubes to the correct 
position. 

Cheers,
Maurizio

------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=47295#47295





_______________________________________________
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to