讲道理,这个自己研究了一阵子,现在做一个总结。这里所使用的过滤都是线性过滤,以及我们这里给s轴和t轴设置的都是一样的环绕模式也就是我们在下面设置的什么就是什么,这里的wrapMode指的就是下面设置的那些模式
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrapMode);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, wrapMode);
首先我们使用三角形批次类来设置下顶点数据和纹理数据,我们准备画一个正方形先,坐标如下所示
这里就简单的介绍下顶点数据和纹理数据的对应,这里其实就是去指定顶点数据和纹理数据的对应,就用四个顶点,然后使用GL_TRIANGLE_STRIP方式进行连接填充,
pyramidBatch.Begin(GL_TRIANGLE_STRIP, 4,1);
pyramidBatch.MultiTexCoord2f(0, 0.0f, 0.0f);
pyramidBatch.Vertex3f(-1.0f, -1.0f, 0.0f);
pyramidBatch.MultiTexCoord2f(0, 0.5f, 0.0f);
pyramidBatch.Vertex3f(1.0f, -1.0f, 0.0f);
//设置顶点对应的纹理坐标
// MultiTexCoord2f(GLuint texture, GLclampf s, GLclampf t);
//参数1:纹理的层次
//参数2:s坐标
//参数3:t坐标
pyramidBatch.MultiTexCoord2f(0, 0.0f, 0.5f);
//设置顶点坐标
pyramidBatch.Vertex3f(-1.0f, 1.0f, 0.0f);
pyramidBatch.MultiTexCoord2f(0, 0.5f, 0.5f);
pyramidBatch.Vertex3f(1.0f, 1.0f, 0.0f);
//结束批次设置
pyramidBatch.End();
这里我们把纹理放大了两倍,其实吧纹理坐标从1.0缩小为0.5就是放大了两倍
如果把纹理坐标变成1的两倍就是缩小,如下图所示
注意这里使用的是GL_CLAMP_TO_BORDER,所以我们纹理坐标变成了2,才没有什么拉伸的效果,因为GL_CLAMP_TO_BORDER不在[0,1]范围内的纹理坐标会使用用户设置的边框颜色来拉伸,如果没有设置边框,那么就使用默认的颜色黑色;例如下面我们设置了边框和设置了边框的颜色,如下所示
接下来我们测试下GL_MIRRORED_REPEAT,就是去镜像的设置重复的去设置了纹理,就比如说我们一开始纹理在右下角,这个时候左下角的显示的纹理就是它的镜像,它的上面的也是它的镜像
接下来来测试下GL_CLAMP_TO_EDGE,它是采用纹理边缘的纹理单元来进行拉伸处理
再来测试下GL_CLAMP,我们还是设置了下红色的边框,如下图,这个模式取的就是纹理边界或者是TEXTURE_BORDER_COLOR
不设置边框
如下图所示就是重复GL_REPEAT