javascript - 是否可以在 WebGL 中设置条件?
问题描述
我正在寻找一种在着色器中渲染时跳过实例的方法。我有 100 万个实例,为了实现性能,基于当前的 viewbox,我将根据它们的边界跳过实例。
有什么地方可以写条件代码吗?
JS比GPU慢,所以我正在寻找如何在GLSL中制作这个条件
解决方案
你不能“跳过”一个实例。您可以将其所有顶点移出屏幕
attribute float visible;
...
gl_Position = mix(vec4(0, 0, -2, 1), gl_Position, visible);
或类似的东西。如果visible
是 1.0,那么你得到的和你一直得到的一样。如果visible
是 0.0,那么它的所有顶点都在裁剪空间之外。
您也可以以某种形式(中心+半径,aabb)传递边界并有效地做同样的事情。计算该中心 + 半径是否在视锥中,如果未设置gl_Position
为剪辑空间之外的内容。当然,如果他们已经在剪辑空间之外,那么这将无济于事。
尽管如此,对于大多数 GPU 来说,一百万个实例可能太多了
推荐阅读
- android - 嵌套滚动视图中的recyclerview加载缓慢
- php - 无法将输入时间格式转换为 mysql 识别的格式
- python - CSV 到 JSON,带有 Python 的子列表数组
- postgresql - 在 Debian 8.6 Jessie 上启动 PostgreSQL 11 的 Docker 构建权限问题
- c# - 如何创建一组唯一的随机数?
- linux - 在linux perl中从任何编码到utf-8的文件编码
- ubuntu - 我在哪里可以找到从 Ubuntu 内核的终端安装下载的应用程序?
- ios - Swift 4 - 以编程方式创建垂直 UIScroll
- domain-driven-design - DDD:有时我们应该绕过领域模型吗?
- google-apps-script - 有没有办法定义像 getRange(predeterminedRow, [range of columns]) 这样的范围?