Example #1
0
static void
addPlaneData( const osg::Vec3& corner,
             const osg::Vec3& u, unsigned short uSteps,
             const osg::Vec3& v, unsigned short vSteps,
             const osg::Vec3& normal, osg::Geometry* geom )
{
    osg::Vec3Array* vert( static_cast< osg::Vec3Array* >( geom->getVertexArray() ) );
    osg::Vec3Array* norm( static_cast< osg::Vec3Array* >( geom->getNormalArray() ) );
    osg::Vec2Array* texc( static_cast< osg::Vec2Array* >( geom->getTexCoordArray( 0 ) ) );

    unsigned short uIdx, vIdx;
    for( vIdx=0; vIdx<=vSteps; vIdx++ )
    {
        const float vPct( (float)vIdx / (float)vSteps );
        const osg::Vec3 vVec( v * vPct );

        osg::ref_ptr< osg::DrawElementsUInt > deui;
        if( vIdx < vSteps )
            deui = new osg::DrawElementsUInt( GL_TRIANGLE_STRIP );

        unsigned int startIdx( vert->size() ), idx( 0 );
        for( uIdx=0; uIdx<=uSteps; uIdx++ )
        {
            const float uPct( (float)uIdx / (float)uSteps );
            osg::Vec3 vertex( corner + vVec + (u * uPct) );

            vert->push_back( vertex );
            norm->push_back( normal );
            texc->push_back( osg::Vec2( uPct, vPct ) );
            if( deui.valid() )
            {
                deui->push_back( startIdx + idx + uSteps + 1 );
                deui->push_back( startIdx + idx );
                idx++;
            }
        }
        if( deui.valid() )
            geom->addPrimitiveSet( deui.get() );
    }
}
Example #2
0
void gl4es_glMultiTexCoordPointer(GLenum texunit, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) {
    texc(glTexCoordPointer(size, type, stride, pointer));
}