查看: 3076|回复: 6

实时更新顶点坐标

[复制链接]

该用户从未签到

发表于 2012-7-5 18:45:36 | 显示全部楼层 |阅读模式
遇到一个问题:
比如绘制好了一个矩形,后期想动态实时重绘该矩形,但获取了数组指针,更新后并没有反应,是不是还要有其他操作
如下,坐标被更新了,但显示没有变化:
osg::ref_ptr<osg::Vec3Array> rtVerts = dynamic_cast<osg::Vec3Array*>(rtGeom->getVertexArray());
                         (*rtVerts)[0].set(0,0,0);
                        (*rtVerts)[1].set(w,0,0);
                        (*rtVerts)[2].set(w,h,0);
                        (*rtVerts)[3].set(0,h,0);

                        rtGeom->setVertexArray(rtVerts);

如果重新构建一个数组设置进去,就没有问题,如下:
osg::ref_ptr<osg::Vec3Array> rtVerts = new osg::Vec3Array;
                                            rtVerts->push_back(osg::Vec3(0,0,0));
                        rtVerts->push_back(osg::Vec3(w,0,0));
                        rtVerts->push_back(osg::Vec3(w,h,0));
                        rtVerts->push_back(osg::Vec3(0,h,0));
                                           rtGeom->setVertexArray(rtVerts);

但第二种方式明显又不合理,希望朋友们帮我解答一二,谢谢了

该用户从未签到

发表于 2012-7-5 20:06:05 | 显示全部楼层
更新完顶点后,把显示列表销毁了,下次绘制的时候就是新更新的模型了。

该用户从未签到

发表于 2012-7-6 08:04:23 | 显示全部楼层
setUseDisplayList(false)

该用户从未签到

 楼主| 发表于 2012-7-6 09:34:21 | 显示全部楼层
本帖最后由 gis_wudi 于 2012-7-6 09:41 编辑

感谢二位解答,thanks again
看了下源码,如果强制重新编译显示列表会不会更好一些
dirtyDisplayList()

该用户从未签到

发表于 2012-7-10 09:58:02 | 显示全部楼层
VBO在这种时候显然是最正确的选择:
geometry->setUseDisplayList( false );
geometry->setUseVertexBufferObjects( true );

该用户从未签到

 楼主| 发表于 2012-7-16 10:47:01 | 显示全部楼层
VBO在这种时候显然是最正确的选择:
geometry->setUseDisplayList( false );
geometry->setUseVertexBufferObjects( true );

/** When set to true, ignore the setUseDisplayList() settings, and hints to the drawImplementation
            method to use OpenGL vertex buffer objects for rendering.*/
        virtual void setUseVertexBufferObjects(bool flag);

看这个解释,将setUseVertexBufferObjects设置true, setUseDisplayList() 已经被忽略了

该用户从未签到

 楼主| 发表于 2012-7-16 10:50:07 | 显示全部楼层
主要还是我对opengl底层绘制时对显示列表的操作原理不太了解
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表