OpenGL如何设置抗锯齿

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zxm317122667/article/details/79149322

Texture mapping is a technique that applies an image onto an object’s surface as if the image were a decal or cellophane shrink-wrap. The image is created in texture space, with an (s, t) coordinate system. A texture is a two-dimensional or cube-mapped image and a set of parameters that determine how samples are derived from the image.

OpenGL提供了GLUtils.textImage2D()方法来实现以上效果,但是在调用此方法之前可以设置
纹理过滤函数 glTexParameterf()

glTexParmeterf()函数来确定如何把图象从纹理图象空间映射到帧缓冲图象空间(如:映射时为了避免多边形上的图像失真,而重新构造纹理图像等)。

纹理象素映射成像素,部分参数功能说明如下:
1、glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
  GL_TEXTURE_2D: 操作2D纹理.
  GL_TEXTURE_WRAP_S: S方向上的贴图模式.
  GL_CLAMP: 将纹理坐标限制在0.0,1.0的范围之内.如果超出了会如何呢.不会错误,只是会边缘拉伸填充.

2、glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
  这里同上,只是它是T方向

3、glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  这是纹理过滤
  GL_TEXTURE_MAG_FILTER: 放大过滤
  GL_LINEAR: 线性过滤, 使用距离当前渲染像素中心最近的4个纹素加权平均值.

4、glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
  GL_TEXTURE_MIN_FILTER: 缩小过滤
  GL_LINEAR_MIPMAP_NEAREST: 使用GL_NEAREST对最接近当前多边形的解析度的两个层级贴图进行采样,然后用这两个值进行线性插值

注意:
GL_NEAREST和GL_LINEAR
前者表示“使用纹理中坐标最接近的一个像素的颜色作为需要绘制的像素颜色”,
后者表示“使用纹理中坐标最接近的若干个颜色,通过加权平均算法得到需要绘制的像素颜色”。
前者只经过简单比较,需要运算较少,可能速度较快,
后者需要经过加权平均计算,其中涉及除法运算,可能速度较慢(但如果有专门的处理硬件,也可能两者速度相同)。
从视觉效果上看,前者效果较差,在一些情况下锯齿现象明显,后者效果会较好(但如果纹理图象本身比较大,则两者在视觉效果上就会比较接近)

最后:texImage2D方法详解

texImage2D
GL_APICALL void GL_APIENTRY glTexImage2D(GLenum target, GLint level, GLenum internalformat,
GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void* pixels);
参数说明:
target 指定目标纹理,这个值必须是GL_TEXTURE_2D。
level 执行细节级别。0是最基本的图像级别,表示第N级贴图细化级别。
internalformat 指定纹理中的颜色组件,这个取值和后面的format取值必须相同。可选的值有GL_ALPHA,GL_RGB,GL_RGBA,GL_LUMINANCE, GL_LUMINANCE_ALPHA 等几种。
width 指定纹理图像的宽度,必须是2的n次方。纹理图片至少要支持64个材质元素的宽度
height 指定纹理图像的高度,必须是2的m次方。纹理图片至少要支持64个材质元素的高度
border 指定边框的宽度。必须为0。
format 像素数据的颜色格式,必须和internalformatt取值必须相同。可选的值参考internalformat。
type 指定像素数据的数据类型。可以使用的值有GL_UNSIGNED_BYTE,GL_UNSIGNED_SHORT_5_6_5,GL_UNSIGNED_SHORT_4_4_4_4,GL_UNSIGNED_SHORT_5_5_5_1。
pixels 指定内存中指向图像数据的指针
功能:
该函数的功能是,根据指定的参数,生成一个2D纹理(Texture)。相似的函数还有glTexImage1D、glTexImage3D。
需注意的是,internalformat的取值,OpenGL ES2.0和OpenGL 1.0是不同的。OpenGL1.0版本支持的取值是1,2,3,4,在部分系统下可以向前兼容,但不是所有的系统下都支持向前兼容,所以在使用OpenGL ES 2.0时最好传入上面所述的那些值作为实际参数。
在调用该函数之前,必须调用glBindTexture(GL_TEXTURE_2D, mTextureID );以指定要操作的纹理ID,此处是mTextureID。
应用方式如下如下:
unsigned int mTextureID;
glGenTextures(1, &mTextureID);

glBindTexture(GL_TEXTURE_2D, mTextureID );
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);//此为纹理过滤参数设置

glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
//width、height等参数必需符合要求,此处不赘述。pData是指像素数据
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width,height, 0, GL_RGB, GL_UNSIGNED_BYTE, pData );

猜你喜欢

转载自blog.csdn.net/zxm317122667/article/details/79149322