0

在 OpenGL 1.x 中,您可以简单地将纹理附加到四边形顶点以显示图像,使用线性放大镜参数,您可以将纹理拉伸或最小化到以像素为单位的边角大小,而不会“看到”它变得“像素化” .

在 OpenGL es 2.0 中有另一种渲染方法:使用顶点和片段着色器。因此,您只需将纹理(图像)渲染到屏幕上,就需要为其编写自己的片段着色器-例如:

uniform sampler2D texture;
varying vec2 point; // coming from the vertex 

void main () {
   gl_fragColor(texture2D(texture, point));
}

这里的问题是发生的放大镜类型是 NEAREST 类型。它采用变量“point”指向的最近像素的值。

我需要一个线性放大镜。

我的问题是:我如何在代码方面实现这样的事情?还是我从一开始就做错了什么?

根本没有片段着色器的预设可用于这种类型的事情。

4

1 回答 1

0

片段着色器中没有为此进行预设,因为它使用与固定功能管道相同的状态。统一是可编程管道中纹理单元的sampler2D接口,当您在 ES 2.0 中对绑定到纹理单元的纹理进行采样时,包裹状态、过滤器模式等都取自当前绑定的纹理对象。您可以像在 ES 1.0 中一样设置这些状态。您是正确的,您不能在片段或顶点着色器中更改它们,但您不需要,只需将纹理对象绑定到适当的状态即可。

Desktop GL (3.3/4.0+) 定义了一个叫做采样器对象的东西,它将包裹模式和过滤器与实际的纹理对象分离。老实说,这一直是它应该工作的方式,让纹理对象定义数据存储和采样器状态是浪费的。不幸的是,这在 OpenGL ES 2.0 中不存在,所以请记住,您提到的过滤器状态与纹理对象相关联,您无法在着色器中进行可编程设置。

于 2013-11-02T21:05:49.483 回答