1)纹理坐标
纹理坐标范围0-1,左下角(0,0),右上角(0,1),使用纹理坐标获取纹理颜色叫做采样。
2)纹理环绕方式
如果纹理坐标超过0-1,OpenGL提供了几种环绕方式:
可以用glTexParameter函数来设置:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT);
如果选择了GL_CLAMP_TO_BORDER,可以用以下代码设置颜色:
float borderColor[] = { 1.0f, 1.0f, 0.0f, 1.0f };
glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, borderColor);
3)纹理过滤
当纹理和物体相差很大时,会涉及到纹理缩放,通过以下代码来设置缩放选项:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
4)多级渐远纹理
可使用glGenerateMipmaps创建多级渐远纹理。
在渲染中切换多级渐远纹理级别(Level)时,OpenGL在两个不同级别的多级渐远纹理层之间会产生不真实的生硬边界。就像普通的纹理过滤一样,切换多级渐远纹理级别时你也可以在两个不同多级渐远纹理级别之间使用NEAREST和LINEAR过滤。为了指定不同多级渐远纹理级别之间的过滤方式,你可以使用下面四个选项中的一个代替原有的过滤方式:
一个常见的错误是,将放大过滤的选项设置为多级渐远纹理过滤选项之一。这样没有任何效果,因为多级渐远纹理主要是使用在纹理被缩小的情况下的。
5)加载纹理
图片格式多种多样,可以用stb_image.h(下载)库来加载图片。加入以下两行代码,预处理器会修改头文件,让其只包含相关的函数定义源码。
#define STB_IMAGE_IMPLEMENTATION
#include "stb_image.h"
使用stbi_load加载图片:
int width, height, nrChannels;
unsigned char *