我试图在 OpenGL ES 2.0 片段着色器中处理 mipmaped 纹理的细节级别。
根据这个答案,不可能使用bias
参数来texture2D
访问片段着色器中特定级别的细节。根据这篇文章,详细程度是根据相邻片段的并行执行自动计算的。我必须相信事情就是这样运作的。
我无法理解的是它的原因。为什么不能访问特定级别的详细信息,而这样做确实应该非常简单?为什么必须依赖复杂的固定功能呢?
对我来说,这似乎非常违反直觉。毕竟,整个 OpenGL 相关的东西都是从固定的功能演变而来的。并且 OpenGL ES 旨在覆盖比 OpenGL 更广泛的硬件范围,因此仅支持许多事物的更简单版本。因此,如果规范的开发人员决定 LOD 参数是强制性的(可能默认为零),并且着色器程序员以他认为合适的任何方式来制定适当的 LOD,我将完全理解。添加一个自动执行该计算的函数似乎是我在桌面 OpenGL 中所期望的。
不提供对特定级别的直接访问对我来说根本没有任何意义,无论我如何看待它。特别是因为该bias
参数表明我们确实被允许调整细节级别,所以显然这不是关于从内存中仅针对并行处理的一堆片段的单个级别获取数据。我想不出任何其他原因。
当然,为什么问题往往会吸引意见。但由于 Stack Overflow 不接受基于意见的答案,因此请将您的意见仅作为评论发表。另一方面,答案应该基于可验证的事实,例如有明确知识的人的陈述。如果有开发者讨论这个事实的记录,那就完美了。如果里面有人发博文讨论这个问题,那还是很好的。
由于堆栈溢出问题应该处理真正的编程问题,有人可能会争辩说,询问原因是一个糟糕的问题。获得答案不会使明确的 lod 访问突然出现,因此不会帮助我解决眼前的问题。但我觉得这里的原因可能是由于 OpenGL ES 如何工作的一些重要方面,我到目前为止还没有掌握。如果是这样,那么理解这一决定背后的动机将有助于我和其他人更好地理解 OpenGL ES 作为一个整体,从而在他们的程序中更好地利用它,在性能、准确性、可移植性等方面. 因此,我可能会将这个问题表述为“我错过了什么?”,这对我来说是一个非常现实的编程问题。