【问题标题】:glsl store float data in textureglsl 将浮点数据存储在纹理中
【发布时间】:2016-05-31 07:14:50
【问题描述】:

我正在寻找一种将数据存储在纹理中而不是使用制服的有效方法。目标是将骨骼矩阵存储在纹理中。 我目前正在这样做:

- one RGBA pixel = one float
- (128, 255, 32, 14) = 0.128 255 032 014

它很有效,而且比通过制服传递 var 快得多。不过,我认为做这样一件小事需要大量的计算。

那么您知道从 RGBA 像素构造浮点数的更好方法吗? 有没有一种内置方法可以从几个 RGBA 像素构造一个 4*4 矩阵?

【问题讨论】:

  • "它可以工作,而且比通过制服传递 var 快得多。" 你怎么认为它更快?您尚未读取 等量 量的数据。
  • 假设你没有原生浮点纹理支持你仍然可以pack your data like this。老实说,虽然在极少数情况下纹理读取会“比通过制服传递 vars 快得多”......
  • 感谢您的回答。我说它更快,因为我有一个身体(83 块骨头,126 000 个三角形),我尝试了两种方法。第一种方法,我通过制服传递预先计算的矩阵,我得到了 340 FPS。第二种方法,我绑定一个存储矩阵的纹理,我得到了 390 FPS。感谢您的链接,我会看看这个(但我需要一些时间才能正确理解)。我认为纹理读取可以比制服更快,因为纹理读取只使用 GPU,而制服使用 CPU-GPU 流,据我所知,这是当今 3d API 最大的弱点。
  • 经过测试,完美运行,再次感谢。说到性能,成本几乎为零。我目前正在以 449 FPS(340 使用标准统一矩阵而不是纹理存储矩阵)运行我的测试模型。我试图用一个简单的单位矩阵替换纹理中的矩阵构造,但我只获得了 3 FPS。所以我觉得值得。我的模型有 83 个骨骼,126 000 个三角形,每个顶点最多可以有 8 个骨骼,所以我认为这个测试具有足够的代表性。
  • 你的目标 openGL 版本是什么?我的意思是您也可以只使用浮动纹理 (GL_R32F)、UBO、SSBO 之类的东西……有很多选择。

标签: glsl textures


【解决方案1】:

感谢 LJ,这是answer。 还没试过,但这是完全相同的问题。

【讨论】:

    猜你喜欢
    • 2019-07-09
    • 1970-01-01
    • 2019-08-06
    • 2017-02-09
    • 2018-07-08
    • 1970-01-01
    • 1970-01-01
    • 2018-09-06
    • 2021-04-20
    相关资源
    最近更新 更多