我正在将 OpenGL 应用程序移植到网络上,并发现 WebGL 1.0 不支持 3D 纹理(将在 2.0 中支持)。我使用 16 x 16 x 16 纹理作为一些简单模型的颜色信息(用于块状外观)。
现在不支持 3D 模型,我意识到我可以将 16 层分散到 4 x 4 平面上,如下所示:
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 = layer
结果是 64 x 64“伪 3D”纹理。
这引出了我的问题:GPU 上的 3D 和 2D 纹理有什么区别?在可以使用 2D 纹理而不是 3D 纹理的情况下(如我的示例中),两者之间是否存在性能差异?
我猜 3D 纹理具有沿 z 轴插值的硬件支持,而对于 2D 纹理,则需要两个 texel 提取,并且在它们之间进行手动插值,以获得相同的结果。