_____  

From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of Renan
Mendes
Sent: Sunday, December 02, 2007 3:40 PM
To: OpenSceneGraph Users
Subject: Re: [osg-users] Creating shapes using Geometry


Hey, Jean-Sébastien.

Now I'm asking for that example code you've offered me, if that still
stands...  I haven't tried hard enough, to be honest, but I sure have no
extra time to deal with this properly right now. Not to mention the guy I
work with, which is breathing down my neck... I would appreciate that favor
very much. 

Thanks.

Renan M Z Mendes
 

Hi Renan -- Not sure exactly what aspect of this you're having trouble with.
I've attached some very simple code for drawing a unit circle into one of
the three coordinate planes; if this simple code insults your intelligence,
I apologize. Expanding this code to draw spheres, cones, cylinders, etc., is
an exercise in trig and use of the OpenGL primitive types.
 
Hope this helps get you started...
   -Paul
 
 
#include <osg/LineWidth>
#include <osg/Geometry>
#include <osg/math>
#include <math.h>
 

osg::Vec3Array*
circleVerts( int plane, int approx )
{
    const double angle( osg::PI * 2. / (double) approx );
    osg::Vec3Array* v = new osg::Vec3Array;
    int idx;
    for( idx=0; idx<approx; idx++)
    {
        double cosAngle = cos(idx*angle);
        double sinAngle = sin(idx*angle);
        double x(0.), y(0.), z(0.);
        switch (plane) {
            case 0: // X
                y = cosAngle;
                z = sinAngle;
                break;
            case 1: // Y
                x = cosAngle;
                z = sinAngle;
                break;
            case 2: // Z
                x = cosAngle;
                y = sinAngle;
                break;
        }
        v->push_back( osg::Vec3( x, y, z ) );
    }
    return v;
}
 
osg::Geode*
circles( int plane, int approx )
{
    osg::Geode* geode = new osg::Geode;
    osg::LineWidth* lw = new osg::LineWidth( 3. );
    geode->getOrCreateStateSet()->setAttributeAndModes( lw,
osg::StateAttribute::ON );
 

    osg::Geometry* geom = new osg::Geometry;
    osg::Vec3Array* v = circleVerts( plane, approx );
    geom->setVertexArray( v );
 
    osg::Vec4Array* c = new osg::Vec4Array;
    c->push_back( osg::Vec4( 1., 1., 1., 1. ) );
    geom->setColorArray( c );
    geom->setColorBinding( osg::Geometry::BIND_OVERALL );
    geom->addPrimitiveSet( new osg::DrawArrays( GL_LINE_LOOP, 0, approx ) );
 
    geode->addDrawable( geom );
    return geode;
}
 
 
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to