天天看點

NeHe-OpenGL-Qt5-Lesson06-注釋與學習-TextureMapping

這節,添加紋理。

首先,看一下 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對最接近目前多邊形的解析度的兩個層級貼圖進行采樣,然後用這兩個值進行線性插值。

運作結果:

NeHe-OpenGL-Qt5-Lesson06-注釋與學習-TextureMapping

多謝,親愛的美美。

繼續閱讀