opengl - 如何分两个阶段编写 OpenGL 片段着色器?
问题描述
我正在编写一个绘制曼德布罗集的程序。对于每个像素,我运行一个函数,它返回一个介于 0 和 1 之间的激活数。目前,这是在片段着色器中完成的,激活是我的颜色。
但是想象一下你放大分形,突然你在屏幕上看到的所有激活值都在 0.87 到 0.95 之间。你不能很好地看到差异。
我正在寻找一种方法来首先计算所有激活并将它们存储在一个数组中,然后根据该数组选择颜色。出于性能原因,这两者都需要在 GPU 上运行。
解决方案
所以你需要找到你渲染的图片的最小和最大强度。这不能在一次绘制中完成,因为这些值是非本地的。一种可能的方法是递归地应用将图像缩小一半的管道,计算 2x2 正方形的最小值和最大值并将它们存储在例如 RG 纹理中(一种 mipmap 生成,使用 min/max 而不是平均颜色)。最后,您有一个 1x1 纹理,其中包含图像的唯一像素中的最小值和最大值。您可以在将激活值映射到颜色的最终渲染中对该纹理进行采样。
推荐阅读
- javascript - 将所有 html 样式属性替换为 React 兼容样式
- python - pipenv 安装 Django 失败
- python - PYINSTALLER 未能执行脚本(使用了 pynput)
- android - Kotlin:如何更新 RecyclerView 的值
- c# - 减慢硒中的击键
- python - 无法理解机器学习 sentdex 教程中有关线性回归的部分代码
- function - 以圆盘或圆形模拟波浪
- google-chrome-extension - 从 chrome 扩展发送 ICMP ping
- node.js - 模拟节点js控制器功能-调用服务的getSubscriber
- flutter - 哪个类或小部件在颤振中使用更好的响应式布局?