【问题标题】:Textures as particular powers of two?纹理作为二的特殊力量?
【发布时间】:2016-09-29 03:45:14
【问题描述】:

我正在使用纹理来使用着色器预先计算一些位置值,并且收到一个错误,即纹理不是 2 的幂。事实上,我确实确保将它们扩展为正方形(7,043,716 纹素,即 2654 的平方)但是我开始怀疑纹理必须是 2 的特定幂 - 可能可以被 8 整除?例如8x8、16x16、32x32、64x64,因为这些数字不断增加。是这样吗,如果是,有上限吗?

【问题讨论】:

  • 听起来你误解了“二的幂”是什么意思。
  • @WestLangley - 哦 - 确实。我只是查了一下,意识到我一直在混淆平方和 2 的幂。谢谢!

标签: three.js textures


【解决方案1】:

我认为您不需要是 2 的特定幂,但 gl.getParameter(gl.MAX_TEXTURE_SIZE) 应该告诉您您所使用的浏览器和硬件上可用的上限,并且必须是 至少 64. (警告:根据文档,这只是“粗略估计”;但在不尝试上传的情况下,它已经尽善尽美,我认为它的卖点不足)

我通常是 iOS 人,所以我可以不假思索地告诉你,iPhone 4 及以下的最高可达 2048,但 4s 及以上可以支持至少 4096。根据你的意愿得出这样的推论至此,假设您的代码无法处理低于 2654 的下限。

【讨论】:

  • 我确实实验性地将纹理提升到与 8x8、16x16、32x32 一致的幂...最终为 4096 x 4096,并且错误确实消失了。我在 NVIDIA GT970 上,它似乎从容应对如此大的缓冲区。我认为该错误可能特定于 Three.js。感谢您的帮助!
猜你喜欢
  • 2010-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-27
  • 1970-01-01
  • 2012-04-15
  • 1970-01-01
  • 2014-05-31
相关资源
最近更新 更多