繁体   English   中英

什么是纹理采样器2D查找GLSL中的纹理坐标P

[英]What is texture coordinate P in texture sampler2d lookup GLSL

我一直在浏览OpenGLSL ES 3.0规范 ,但找不到关于内置函数texture(sampler, p)定义P的vec2 。我知道它是vec2

它是在0.0到1.0之间的标准化浮点,定义了从左上方到右按钮的缩放比例吗?

还是像texelFetch()函数一样,将texel从0查找到尺寸大小减去1?

还是更复杂,并以某种方式在纹理属性中定义? 此处指出“纹理坐标可以被规范化或在texel空间中”。 但我对此表示怀疑,因为我看不到任何将纹理标准化的地方。

如前所述, texelFetch()系列函数通过指定图像数据的实际整数texel坐标来访问特定texel。

相反,用于GLSL函数的texture()的纹理坐标与实际的texel坐标之间的映射要复杂一些。

首先,将纹理坐标定义为浮点,并且从概念上讲,采样纹理表示评估连续的 1-,2-或3D函数,而不访问离散数组。 过滤器模式当然定义了在纹理本身提供的数据点之间采样时获得的值。 您应该意识到,第一个区别是在通常情况下对纹理进行采样并不意味着要寻址单个纹理像素,而是要使用多个纹理像素,以及使用滤波模式(以及其他情况,例如tex坐标)定义在操作过程中必须对哪些texel进行特征处理。

为“普通” 2D纹理的texcoords被限定为使得(0,0)限定了左下角纹理像素的左下角 ,和(1,1)的右上像素的右上角。 请注意,此定义意味着当您要在整数texel坐标(i,j)的texel中心位置进行精确采样时,0 <= i <= texWidth -1和0 <= j <= texHeight -1使用纹理坐标((i + 0.5)/ texWidth,(j + 0.5)/ texHeight)。

如果指定了[0,1]范围之外的纹理坐标,则使用纹理的环绕模式来确定如何将其映射到该范围。 基本上,您可以选择夹紧它们,或重复纹理(镜像的而不是镜像的)。

还是更复杂,并以某种方式在纹理属性中定义?

过滤和环绕模式是采样器状态的一部分。 GLES 3支持Sampler Objects ,使您可以独立于纹理对象指定采样器状态。 在传统的GL中,纹理对象确实包含采样器状态。 采样器对象使您可以选择覆盖该状态。

此处指出“纹理坐标可以被规范化或在texel空间中”。 但我对此表示怀疑,因为我看不到任何将纹理标准化的地方。

好吧,这是指台式机GL,而不是GLES3。您给出的链接实际上是在您从中退出paraghaph之后对此进行解释的。 矩形纹理使用一种映射,其中[0,width)x [0,height)以纹理坐标表示整个图像,而不是规范化的[0,1]范围。 但是在ES3中,不支持矩形纹理,因此此处无关紧要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM