glTexImage2D()
和glTexImage1D()
有什么区别?实际上,我无法想象一维纹理。某物如何具有1D纹理?
纹理不是您在三角形上绘制的图片。纹理是值的查找表,您的着色器可以访问该表并从中获取数据。您可以使用纹理作为“您在三角形上绘制的图片”,但您不应该将思维局限于此。
一维纹理是仅具有一个维度的纹理:宽度。这是一条线。它是一维函数:f(x)
。您提供一个纹理坐标,就可以得到一个值。
2D纹理是具有两个维度的纹理:宽度和高度。它是一个矩形。它是二维的函数:f(x, y)
。您提供两个纹理坐标,然后得到一个值。
一维纹理可用于任何一维函数的离散近似。您可以预先计算一些Fresnel specular factors并访问1D纹理以获取它们,而不是在着色器中对其进行计算。一维纹理可以代表高斯镜面项,就像我在the first chapter on texturing in my book中所做的那样。
一维纹理可以是任何一维函数。
2D纹理具有高度和宽度,而1D纹理具有仅1个像素的高度。这基本上意味着纹理是一行像素。当我们想要将某个数值映射到一种颜色或将一种颜色映射到另一种颜色时(例如,在单元格着色技术中),通常会使用它们。