Hi!

I add the vbo->dirty() but it doesn't change anything. I had a look to the vbo 
data and it's fine, it changes, but the render is not updated.... any idea??

regards,

Crisalix.



> From: [EMAIL PROTECTED]
> To: [email protected]
> Date: Thu, 7 Feb 2008 23:38:00 +0100
> Subject: Re: [osg-users] How to modify the array of vertex    from    a       
> Geometry        object
> 
> Hi,
> 
> I think that the only thing missing is a vbo->dirty()
> 
> Regards
> 
> El jue, 07-02-2008 a las 19:31 +0100, lucas Grijander escribió:
> > Thanks Rubén,
> > 
> > I'm trying to use VBO, but I think something is missing... I added
> > this to the creation of my geometry:
> > 
> > myGeom->setSupportsDisplayList(false);
> > myGeom->setUseDisplayList(false);
> > myVertexBuffer = myGeom->getOrCreateVertexBufferObject();
> > myVertexBuffer->setArray(0,&v);
> > myVertexBuffer->setUsage(GL_STREAM_DRAW_ARB);
> > myGeom->setUseVertexBufferObjects(true);
> > 
> > and then inside the callback I'm try to modify the vertex data:
> > 
> > osg::Vec3Array *test = dynamic_cast<osg::Vec3Array
> > *>(testNx->myVertexBuffer->getArray(0));
> > 
> > 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;
> > } 
> > 
> > but nothing changes in the render.... the object does not move. Does
> > anybody know what is missing??
> > 
> > thanks in advance
> > 
> > Crisalix.
> > 
> > 
> > 
> > ______________________________________________________________________
> > > From: [EMAIL PROTECTED]
> > > To: [email protected]
> > > Date: Wed, 6 Feb 2008 21:33:51 +0100
> > > Subject: Re: [osg-users] How to modify the array of vertex from a
> > Geometry object
> > > 
> > > 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
> > > > [email protected]
> > > >
> > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
> > > > 
> > > 
> > > _______________________________________________
> > > osg-users mailing list
> > > [email protected]
> > >
> > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
> > 
> > 
> > ______________________________________________________________________
> > Express yourself instantly with MSN Messenger! MSN Messenger
> > _______________________________________________
> > osg-users mailing list
> > [email protected]
> > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
> 
> _______________________________________________
> osg-users mailing list
> [email protected]
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

_________________________________________________________________
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
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to