glTexImage*参数解释

glTexImage2D(m_textureTarget, 0, GL_RGBA, m_image.columns(), m_image.rows(), 0, GL_RGBA, GL_UNSIGNED_BYTE, m_blob.data());


这是ogldev里的代码,作者在tutorial里建议把第3个参数改成GL_RED试试,结果显示为只输出了红色。

我把第7个参数也改成GL_RED,结果完全变了,为什么?


首先,最后三个参数分别表示传入texture对象的源数据的格式、类型和指针。

其次,作者在读取纹理时调用了Magick的库,将Magick::Image里的数据以"RGBA"的格式write进Magick::Bolb,如果Bolb格式在这儿已经定好,那么为什么在glTexImage2D里还需要写第二个GL_RGBA呢?

作者对BLOB作了一定描述:

The BLOB (Binary Large Object) is a useful mechanism for storing an encoded image in memory in a way that it can be used by external programs.(BLOB是一个能被外部程序调用的,在内存里存储已编码图像的有效机制然而这只是对功能的描述,没有说明实质。度娘的回答如下:

BLOB (binary large object),二进制大对象,是一个可以存储二进制文件的容器。

如果BOLB里只是一堆二进制数,那么,把它当图像的数据源使用就需要规定格式、类型。

最后,我理解为:

第7个参数说明texture对象建立几个颜色通道, 如: GL_RED 1个,GL_RGB 3个

第3个参数说明texture对象向pipeline传哪几个通道的值。


(还没有进一步查证,很有可能是错的,以后再完善吧。)


你可能感兴趣的:(OpenGL)