查看: 2992|回复: 7

对于大数据量的动态面片,效率为什么很低?

[复制链接]

该用户从未签到

发表于 2009-1-12 22:25:14 | 显示全部楼层 |阅读模式
在用osg模拟水花时,用到了很多三角形组成的网格来模拟水波,通过改变三角形的顶点高度来模拟水的波动。之前用opengl实现256*256大小的网格(有131072个三角形),帧率一直是85帧。但是用osg来做,帧率就很低。我用了三种方法:
(1)在OSG中直接用:        waveGeometry->setVertexArray(vertices); 来画三角形帧率只有10帧左右。
(2)在OSG中调用opengl的代码,并且自己计算包围盒,帧率有一点点提高,但是也只有20帧左右。
(3)在OSG中使用camera的回调:        myViewer.getCamera()->setPostDrawCallback(new CWaveCallBack);帧率有55帧左右
但是这三种方法都没有达到opengl的85帧。
我想知道是原因导致帧率这么低?有可能在OSG中达到85的帧率吗?
附件中是第二种方法的主要代码。

[ 本帖最后由 flying5 于 2009-1-12 22:36 编辑 ]

wave.rar

1.57 KB, 下载次数: 169, 下载积分: 威望 1

wave.rar

1.57 KB, 下载次数: 135, 下载积分: 威望 1

该用户从未签到

发表于 2009-1-12 23:27:42 | 显示全部楼层
我想也许应该推荐您使用VBO来操作动态数组,设置好setUseVertexBufferObjects()函数,不要反复调用setVertexArray来进行设置,直接获取顶点的Vec3Array指针然后在更新回调中操作就可以了。

如果想要直接调用OpenGL代码,那么glBegin/glEnd的效率也是比较低下的,依然推荐使用VBO。还有您附件里的代码有些效率上的问题,不知为什么您要在仿真循环中反复使用setDrawCallback?还有您的drawImplementation函数不应该在Callback中被执行。如果想要派生Drawable写自己的OpenGL绘制对象,请记得关闭显示列表的支持setSupportsDisplayList(false),否则派生的Drawable::drawImplementation只会被执行一次(因为这之后的图形显示都会直接调用编译好的显示列表)。

不过模拟水波最好的方法是使用着色语言,否则无论怎样优化都很难达到实时渲染的效果。此外OSG缺省启用了窗口的垂直同步,因此帧速不会超过60fps。不过对于人眼的分辨能力而言这已经足够了。

该用户从未签到

发表于 2009-1-13 08:46:06 | 显示全部楼层
关注下,俺马上也要做这个东西,楼主做好能否共享下看看

该用户从未签到

 楼主| 发表于 2009-1-13 22:53:56 | 显示全部楼层
我也是初学,osg也不懂,还没有做出好的效果来
水波的实现可以参考这篇文章 http://www.gamedev.net/reference/articles/article915.asp

该用户从未签到

发表于 2009-1-14 00:10:19 | 显示全部楼层
我好像在论坛里也贴过一个GLSL实现水波的例子,楼主也不妨找来看看,希望对您能有所帮助

该用户从未签到

 楼主| 发表于 2009-1-15 00:17:54 | 显示全部楼层
找到了老大的文章:http://www.osgchina.org/bbs/view ... &page=1#pid4831
很有借鉴意义,不过似乎真实感不是很强哦。

我要实现的是水滴到地面后的溅射和波纹,以此增强雨天场景的真实感
因为要场景中大量使用,还是考虑用shader实现

该用户从未签到

发表于 2009-1-22 18:13:23 | 显示全部楼层

请教:弱弱的问下

你们,在帧率达到怎么高的时候,cpu的利用率如何

该用户从未签到

发表于 2009-1-22 20:19:52 | 显示全部楼层
对于直接使用while循环的示例程序来说,CPU的利用率通常是100%,即使在循环中什么都不做也是如此;如果使用MFC,Qt等开发库的线程或事件函数来实现的话,自然不会有这么高,取决于触发间隔等设置。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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