glTexImage*参数解释

本文探讨了OpenGL中glTexImage2D函数的参数含义,特别是第3个和第7个参数如何影响纹理颜色通道。通过实例代码展示了GL_RED参数的使用,引发对纹理数据格式和通道传递的思考。文章指出,BLOB作为二进制大对象,存储图像数据,而glTexImage2D的参数设置决定了如何从BLOB中提取并处理颜色信息。
摘要由CSDN通过智能技术生成

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对象的源数据的格式、类型和指针。

glTexImage2D函数是用来指定一个二维纹理图像的函数。其参数如下: ```C++ void glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *data); ``` - target:指定要设置的纹理目标。可以是以下几个值之一: - GL_TEXTURE_1D:一维纹理。 - GL_TEXTURE_2D:二维纹理。 - GL_TEXTURE_3D:三维纹理。 - GL_TEXTURE_CUBE_MAP_POSITIVE_X:立方体贴图的正 X 面。 - GL_TEXTURE_CUBE_MAP_POSITIVE_Y:立方体贴图的正 Y 面。 - GL_TEXTURE_CUBE_MAP_POSITIVE_Z:立方体贴图的正 Z 面。 - GL_TEXTURE_CUBE_MAP_NEGATIVE_X:立方体贴图的负 X 面。 - GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:立方体贴图的负 Y 面。 - GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:立方体贴图的负 Z 面。 - level:指定要设置的纹理的细节级别。0 表示最底层的细节级别。 - internalformat:指定纹理中每个像素的颜色组件数量和类型。可以是以下几个值之一: - GL_RED:一个组件,每个组件8位。 - GL_RG:两个组件,每个组件8位。 - GL_RGB:三个组件,每个组件8位。 - GL_RGBA:四个组件,每个组件8位。 - GL_DEPTH_COMPONENT:一个深度值,每个组件16或24位。 - GL_DEPTH_STENCIL:一个深度值和一个模板值,每个组件24或32位。 - width:纹理图像的宽度,以像素为单位。 - height:纹理图像的高度,以像素为单位。 - border:指定纹理边界的宽度。必须为0或1。 - format:指定像素数据的格式。可以是以下几个值之一: - GL_RED:每个像素一个红色组件。 - GL_RG:每个像素两个组件:红色和绿色。 - GL_RGB:每个像素三个组件:红色、绿色和蓝色。 - GL_RGBA:每个像素四个组件:红色、绿色、蓝色和 alpha 值。 - GL_DEPTH_COMPONENT:每个像素一个深度值。 - GL_DEPTH_STENCIL:每个像素一个深度值和一个模板值。 - type:指定像素数据的类型。可以是以下几个值之一: - GL_UNSIGNED_BYTE:每个组件8位无符号整数。 - GL_BYTE:每个组件8位有符号整数。 - GL_UNSIGNED_SHORT:每个组件16位无符号整数。 - GL_SHORT:每个组件16位有符号整数。 - GL_UNSIGNED_INT:每个组件32位无符号整数。 - GL_INT:每个组件32位有符号整数。 - GL_FLOAT:每个组件32位浮点数。 - GL_UNSIGNED_BYTE_3_3_2:每个像素3位红色、3位绿色和2位蓝色,以8位无符号整数表示。 - GL_UNSIGNED_SHORT_5_6_5:每个像素5位红色、6位绿色和5位蓝色,以16位无符号整数表示。 - GL_UNSIGNED_SHORT_4_4_4_4:每个像素4位红色、4位绿色、4位蓝色和4位 alpha 值,以16位无符号整数表示。 - GL_UNSIGNED_SHORT_5_5_5_1:每个像素5位红色、5位绿色、5位蓝色和1位 alpha 值,以16位无符号整数表示。 - data:指向包含纹理图像数据的指针。 注意,glTexImage2D函数并不会直接将纹理图像加载到 GPU 内存中。它只是告诉 OpenGL 现在有一个纹理图像,需要分配内存并加载到显存中。实际上,纹理图像的加载是在纹理绑定后调用glTexSubImage2D函数发生的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值