【问题标题】:Webgl Frustum viewWebgl 视锥体视图
【发布时间】:2011-07-07 15:39:44
【问题描述】:

当我用 1 个纹理在 webgl 中渲染 5 个盒子时,应用程序以 60 fps 的速度运行,很好。但是当我渲染 70 个盒子时,性能下降到 ~40fps,但在视图中体积仍然是 5。

我已经调试了应用程序,并且所有 70 个框都在不需要时使用每个片段着色器,因为其中 65 个框已超出截锥体。我认为 gl.viewport 声明从视图多边形中剪掉了,但没有。

我想知道 fustrum culling 是否是避免这种情况的技术?如何激活 fustrum 剔除?是否有任何 webgl 命令或者我必须手动执行?

提前致谢,

【问题讨论】:

  • 这是其他问答的复制粘贴吗?在您问题的第一句话中使用“分享”标题,如 LinkedIn、Twitter 和 FB? “0 反对票最喜欢的分享 [fb] 分享 [tw] 分享 [in]”。听起来很不真实,尤其是标题中的“怀疑”。
  • 是的,它是来自 opengl es 的未答复旧帖子的复制粘贴。
  • 请不要在 Stack Exchange 网络中交叉发布:gamedev.stackexchange.com/questions/14587/…

标签: webgl


【解决方案1】:

你猜对了:你必须手动完成。

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

随着盒子数量的增加,您的绘图循环是否可能存在其他效率低下的问题?例如,您是否为每个盒子绑定了纹理?或者使用 getAttribLocation 或 getUniformLocation 查询着色器?或者执行其他 WebGL 查询(所有这些都会显着减慢管道)?

【讨论】:

  • 我修复了代码,在渲染之前我已经实现了平截头体剪裁平面(球体技术link),一切都运行得更好。正如你所说,我已经命令纹理不要绑定每个盒子。所以现在我再次以 60 fps 运行,谢谢。
  • 如果还有密集的片段着色器,我建议使用 Z pre-pass。
  • @Joni,我很好奇,如果你去掉截锥体剔除,你还能得到 60fps 吗?
  • @Joni - 早期 Z 通道有益的场景非常有限(正如您所指出的,它仅有助于非常密集的片段着色器)。因此,除非您有证据表明您是片段有限的,否则我通常不建议实施它。听起来好像不是这样。
猜你喜欢
  • 2016-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多