這節,添加紋理。
首先,看一下 OpenGL ES2.0/3.0 glTexImage2D 函數詳解
https://blog.csdn.net/jeffasd/article/details/78135588
void glTexImage2D( | GLenum target, |
GLint level, | |
GLint internalformat, | |
GLsizei 寬度, | |
GLsizei 高度, | |
GLint 邊框, | |
GLenum format, | |
GLenum type, | |
const GLvoid * data) ; |
代碼:
void TextureMappingWindow::loadGLTexture()
{
QImage image(":/image/lena.jpg");
image = image.convertToFormat(QImage::Format_RGB888);
image = image.mirrored();
glGenTextures(1, &m_texture);
glBindTexture(GL_TEXTURE_2D, m_texture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, image.width(), image.height(),
0, GL_RGB, GL_UNSIGNED_BYTE, image.bits());
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
}
其中glTexParameteri()
https://blog.csdn.net/d04421024/article/details/5089641
圖象從紋理圖象空間映射到幀緩沖圖象空間(映射需要重新構造紋理圖像,這樣就會造成應用到多邊形上的圖像失真),這時就可用glTexParmeteri()函數來确定如何把紋理象素映射成像素.
部分參數功能說明如下:
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的範圍之内.如果超出了會如何呢.不會錯誤,隻是會邊緣拉伸填充.
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
這裡同上,隻是它是T方向
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
這是紋理過濾
GL_TEXTURE_MAG_FILTER: 放大過濾
GL_LINEAR: 線性過濾, 使用距離目前渲染像素中心最近的4個紋素權重平均值.
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
GL_TEXTURE_MIN_FILTER: 縮小過濾
GL_LINEAR_MIPMAP_NEAREST: 使用GL_NEAREST對最接近目前多邊形的解析度的兩個層級貼圖進行采樣,然後用這兩個值進行線性插值。
運作結果:
多謝,親愛的美美。