对于 3D 纹理,
对于三维纹理,z 索引指的是第三维。
这究竟意味着什么?
对于二维数组纹理,z 索引指的是切片索引。
如果我们有 4 层 2D 纹理,那么如果 z=2,它将引用第二个 2D 纹理切片。?
那么,当我们有目标 GL_TEXTURE_3D 和 GL_TEXTURE_2D_ARRAY 时,除了纹理坐标之间的差异之外,还有什么区别呢?
对于三维纹理,z 索引指的是第三维。这究竟意味着什么?
不管你want它的意思是。
纹理只不过是一个查找表。该查找表的索引称为纹理坐标。纹理坐标的含义完全取决于您打算如何使用它。它可能是太空中的一个位置。它可以是三维函数的 XYZ。可能有很多事情。
不要再将纹理视为图片。
在 2D 纹理中,纹理坐标的 S 和 T 分量表示沿纹理的 X 和 Y 轴访问的距离。如果S为1,则表示右侧。如果S为0,则表示左侧。等等。
3D 纹理和 STP 坐标也是如此。如果P为0,则表示3D纹理的“最远”深度。如果P为1,则表示“最近”的深度。
就您上传的数据而言,它始终基于右手坐标系进行工作。所以底部/左/后是 (0, 0, 0) 点,顶部/右/前是 (1, 1, 1) 点。您在数据中提供的第一个深度层是最远的深度层,下一层是第二远的深度层,依此类推。
对于二维数组纹理,z 索引指的是切片索引。如果我们有 4 层 2D 纹理,那么如果 z=2,它将引用第二个 2D 纹理切片。?
不,它将参考third。从零开始的索引,就像 C/C++ 中的其他所有内容一样。
那么,当我们有目标 GL_TEXTURE_3D 和 GL_TEXTURE_2D_ARRAY 时,除了纹理坐标之间的差异之外,还有什么区别呢?
二维数组的各层之间没有过滤。如果在 3D 纹理中将 GL_TEXTURE_MAG_FILTER 与 GL_LINEAR 一起使用,它将从 8 个纹素中采样值并在所有 3 个方向上进行插值。如果您使用 2D 数组执行此操作,它将选择一个特定的 Z 层进行采样,并选择该层内的 4 个纹素进行插值。
-
Mipmap 的工作方式有所不同。 3D 纹理包含 3D 图像。因此,每个 mipmap 也是 3D 的。因此,mipmap 缩减在三维上起作用。如果基础层是 32x32x32,那么下一个 mipmap 将为 16x16x16。
2D 数组纹理包含2D 图像。它们包含一组 2D 图像,但这是一个实现细节;它只是 2D 图像的集合。每个 2D 图像都有自己的 mipmap,但这些是2D mipmap。因此,2D 数组纹理的每个 mipmap 使用相同数量的图像和其他人一样。因此,如果 2D 数组的基础层使用 32x32 2D 图像,并且这些图像有 32 个,则下一个 mipmap 层将使用 16x16 2D 图像,但会有仍然是32个。
数组纹理使用整数值作为纹理坐标的第三个分量(要从中获取的数组层)。 3D 纹理对所有三个组件使用标准化值。
简而言之,除了你用来向它们上传数据的功能之外,他们毫无共同点。
通过以下方式了解更多信息查看 OpenGL wiki 上有关纹理的各个页面 http://www.opengl.org/wiki/Texture.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)