Hi,

Some hints:

1. Be sure that test->size() is equal to numVertex

2. I don't know what the "at" method is, I couldn't find it either on
the TemplateArray class or the std::vector class. Try with the vector []
operator, ie: (*test)[i] = trans

3. If you are updating the vertex data once per frame, don't use display
lists, it is the worst thing that you can ever do! It is cheaper even to
use direct mode. Use vertex buffer objects and configure the VBO
(getOrCreateVertexBufferObject) in streaming mode (GL_STREAM_DRAW).

Hope this helps.

Regards.

Rubén

El mié, 06-02-2008 a las 14:08 +0100, lucas Grijander escribió:
> Dear all,
> 
> I have to create a 3D surface, and then such surface will be modified during 
> the application with several deformations. I've tried to create a Geometry 
> object, then I set the VertexArray, and finally inside the render callback I 
> update such vertex with the new ones. I got some errors during the rendering:
> 
> Warning: detected OpenGL error "value not valid" after RenderBin::draw(,)
> 
> Does anyone has an idea of such error? In addition, I'm sure the way I am 
> accessing the vertex is not the right one, anybody knows the best way?
> 
> here is the code:
> 
> 
> //Create the 3D geometry
> -------------------------------------------------------------------------
> osg::Vec3Array(m*n));
>     osg::Vec2Array& t    = *(new osg::Vec2Array(m*n));
>     osg::Vec4Array& col  = *(new osg::Vec4Array(1));
>     
>     col[0][0] = col[0][1] = col[0][2] = col[0][3] = 1.0f;
> 
>       int index = 0;
>     for( i = 0; i < m; i++ )
>     {
>               for(j = 0; j < n; j++)
>               {
>                       v[index][0] = i;
>                       v[index][1] = 0;
>                       v[index][2] = j;
> 
>                       t[index][0] = (float)i/(m-1);
>                       t[index][1] = (float)j/(n-1);
> 
>                       index++;
>               }
>     }
> 
>       myGeom = new osg::Geometry;
> 
>     myGeom->setVertexArray( &v );
>     myGeom->setTexCoordArray( 0, &t );
> 
>     myGeom->setColorArray( &col );
>     myGeom->setColorBinding( osg::Geometry::BIND_OVERALL );
> 
>     for( i = 0; i < m-1; i++ )
>     {
>         osg::DrawElementsUShort* elements = new 
> osg::DrawElementsUShort(osg::PrimitiveSet::TRIANGLE_STRIP);
>         elements->reserve(m*2);
>         for( j = 0; j < n; j++ )
>         {
>             elements->push_back((i+0)*n+j);
>             elements->push_back((i+1)*n+j);
>         }
>         myGeom->addPrimitiveSet(elements);
>     }
> 
> 
>       osg::Texture2D *tex = new osg::Texture2D;
> 
>     tex->setImage(osgDB::readImageFile("Images/breast.png"));
> 
>       osg::StateSet *dstate = new osg::StateSet;
>     dstate->setMode( GL_LIGHTING, osg::StateAttribute::OFF );
>     dstate->setTextureAttributeAndModes(0, tex, osg::StateAttribute::ON );
>       dstate->setTextureAttribute(0, new osg::TexEnv );
> 
>     myGeom->setStateSet( dstate );
> 
>     osg::Geode *geode = new osg::Geode;
>     geode->addDrawable( myGeom );
> 
> -------------------------------------------------------
> 
> //Accessing the elements
> -------------------------------------------
> 
> osg::Vec3Array *test = dynamic_cast(myGeom->getVertexArray());        
>       
> for(int i = 0; i < numVertex; i++)
> {
>     NxMat34 pose = listShapes.at(i)->shape->getGlobalPose();      
>    osg::Vec3f trans = osg::Vec3(pose.t.x,pose.t.y,pose.t.z);
> 
>    test->at(i) = trans;
>                       
>                       
>               
> }     
> myGeom->dirtyDisplayList();
> myGeom->dirtyBound();
> --------------------------------------------
> 
> thank you very much for your help!!!
> 
> Crisalix.
> 
> 
> _________________________________________________________________
> Express yourself instantly with MSN Messenger! Download today it's FREE!
> http://messenger.msn.click-url.com/go/onm00200471ave/direct/01/
> _______________________________________________
> osg-users mailing list
> osg-users@lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
> 

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

Reply via email to