這節,添加紋理,
首先,看一下 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對最接近當前多邊形的決議度的兩個層級貼圖進行采樣,然后用這兩個值進行線性插值,
運行結果:

多謝,親愛的美美,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/259029.html
標籤:其他
