Opengl es 确定碎片中的纹理

Opengl es 确定碎片中的纹理,opengl-es,textures,texture-mapping,Opengl Es,Textures,Texture Mapping,考虑本OpenGL ES for iOS手册中的以下引用: OpenGL ES支持几种不同的采样模式:考虑当生成三角形的碎片少于绑定纹理中可用的纹理数时会发生什么。当包含大量texel的纹理映射到仅覆盖帧缓冲区中几个像素的三角形时,这种情况随时可能发生。相反的情况也可能发生。包含少量纹理的纹理可能会映射到一个三角形,该三角形在帧缓冲区中生成许多片段 这句话: 使用值GL_LINEAR指定参数GL_TEXTURE_MIN_FILTER[glTexParameteri]告诉OpenGLES,每当有

考虑本OpenGL ES for iOS手册中的以下引用:

OpenGL ES支持几种不同的采样模式:考虑当生成三角形的碎片少于绑定纹理中可用的纹理数时会发生什么。当包含大量texel的纹理映射到仅覆盖帧缓冲区中几个像素的三角形时,这种情况随时可能发生。相反的情况也可能发生。包含少量纹理的纹理可能会映射到一个三角形,该三角形在帧缓冲区中生成许多片段

这句话:

使用值GL_LINEAR指定参数GL_TEXTURE_MIN_FILTER[glTexParameteri]告诉OpenGLES,每当有多个texel对应于一个片段时,从几个合适的texel中采样颜色,并使用线性插值混合颜色,以产生纹理对片段的贡献。生成的片段颜色可能最终成为纹理中不存在的颜色。例如,如果纹理由交替的黑色和白色纹理组成,则线性采样将混合纹理颜色,片段最终将为灰色


我的问题是如何确定图像中有多少texel以及这些texel有多大。如果我没弄错的话,1 texel!=1像素,因此无法通过计算像素来确定texel的数量。例如,第二个引号描述了具有黑白交替纹理的图像。您如何知道您的图像是否由黑白纹理组成。。。。谁定义了纹理大小??谁说一个texel里面没有黑白两种颜色。考虑到纹理没有设定的大小、边界等,我怎么可能确定给定图像中的一个纹理是什么样的呢?

当纹理大于或小于要绘制的曲面时,纹理可能由图像上的许多像素组成。即使图像被旋转或平移,也可能发生同样的情况。在空闲情况下,当将纹理/图像绘制到帧缓冲区时,片段将请求图像上的特定像素并呈现它,但在大多数情况下,存在请求像素之间位置的像素(放大)或与纹理上的一组像素相对应的位置(缩小)的片段。在任何情况下,您都需要插值颜色值
GL_LINEAR
,或者取最近的像素
GL_nearest
,openGL可以很好地做到这一点

因此,关于“如何确定图像中有多少个纹理以及这些纹理有多大”的问题无法回答,因为您提出的问题取决于您将如何绘制它

“你怎么知道你的图像是由黑白纹理组成的”是在看它而不是一个选项,还是我没有理解这个问题?您发布的引文提出了一个黑白图像的假设情况:假设它是2x2、2个黑色(.0)和2个白色(1.0)像素,如果您使用GL_LINEAR将其绘制到缓冲区1x1,您将得到一个灰色(.5)的像素,因此帧缓冲区中的像素包含原始图像上不存在的颜色

“谁定义texel大小”我不太确定是否应该说texel大小,但让我们将其转换为“谁定义将使用多少纹理像素来组成一个帧缓冲区像素”,然后openGL应该是答案,因为它是如何处理这种情况的构建

“谁说一个texel中没有黑白呢”这实际上是矩阵设置、图像本身、开发人员的组合。。。你可以把GL_放在最近的位置,它总是一个或另一个,但不是两个,在任何其他情况下,你可以尝试计算结果,或者制作黑白图像并查看输出

“考虑到texel没有设定的大小、边界等,我如何确定给定图像中的一个texel是什么样的呢?”你可以从纹理大小和绘制到的曲面的比例中得到一个基本概念;从输出来看;一步一步地了解openGL的功能,并尝试计算它


总而言之,这一切在后台如何运作并不重要,重要的是知道这些事情确实发生了。例如,您应该知道的原因是尝试绘制一些清晰的文本,并将其在某个方向上转换一半像素,结果将是文本的模糊性(一个非常常见的问题),因为帧缓冲区像素将在字母边框上具有“混合”颜色。另一个问题是,当结果根本没有颜色,而是一些用于后处理的值,例如一些表格查找值、法线变形、坐标变形。。。在这些情况下,您可能会得到完全没有意义的值。

我所说的黑白texel图像是这样的:如果1 texel!=1像素和texel没有定义的边界,谁知道一个texel从哪里结束,另一个texel从哪里开始?以您描述的2X2图像为例,我知道将有2个黑色像素和2个白色像素。。那么有多少特克斯?如果一个texel!=对于一个像素,我如何确定texel的数量?可以有两个texel,每个texel包含相同的颜色,也可以有4个texel,每个texel包含自己的像素真的,在纹理如何对应像素的问题上,我完全错了吗?谢谢:)此外,纹理是否必须由相同颜色的像素组成,例如,一个纹理可以包含一个白色像素和一个黑色像素?你可以说,要绘制的纹理的数量与片段的数量相同(或输出像素计数)。帧缓冲区的片段将从纹理调用texel,因此您不能谈论只有纹理的texel或只有缓冲区的texel,您需要它们之间的关系。此外,texel不能开始和结束,它们可以重叠,甚至是相同的:绘制到2x2缓冲区的1像素纹理将调用4个texel,并且它们都是相同的。texel可以由多种颜色组成,因此为灰色