2011-07-07 36 views
2

当我在webgl中渲染5个包含1个纹理的盒子时,所有应用都以60 fps的速度运行,不错。但是当我渲染70个盒子时,性能分辨率降低到〜40fps,但在视图中仍然是5.Webgl Frustum视图

我调试了应用程序,并且当没有需要时,所有70个盒子都使用每片段着色器,因为其中65个的平截体。我认为gl.viewport声明是从视图多边形裁剪出来的,但不是。

我想知道是否fustrum culling是避免这种技术?我如何激活消毒选择?有没有任何webgl命令或我必须手动执行?

在此先感谢,

+0

这是来自其他问答的复制粘贴吗?在你的问题的第一句话中,LinkedIn,Twitter和FB等“分享”标题是否正确? “0投票最爱分享[分享]分享[分享] [分享]”。听起来非常不真实,特别是在标题中有'疑问'。 –

+0

是的,它是一个来自opengl es的未回复旧帖子的复制粘贴。 – JoniPichoni

+0

请不要在Stack Exchange网络中交叉发布:http://gamedev.stackexchange.com/questions/14587/webgl-rendering-performance-and-frustum-culling –

回答

1

您猜对了:您必须手动执行此操作。

但是,这种技术是在对象级别。在视口之外的个别三角形应该由硬件自动挑选。

您的绘图循环有没有可能导致其他效率低下,这可能会随着盒子数量的增加而减慢速度?例如,你是否绑定每个盒子的纹理?或者用getAttribLocation或getUniformLocation查询着色器?或者做其他WebGL查询(所有这些都会显着减慢管道)?

+0

我修复了代码,我实现了截锥体在渲染之前剪切平面(球体技术[link](http://www.lighthouse3d.com/tutorials/view-frustum-culling/)),并且所有工作都更好。正如你所说,我已经命令纹理不要绑定每个盒子。所以现在我再次以60 fps的速度运行,谢谢。 – JoniPichoni

+0

如果有强化片段着色器,我推荐使用Z预通过。 – JoniPichoni

+0

@Joni,我很好奇,如果你删除了截锥体剔除,你还能得到60fps吗? – brainjam