《高效学习OpenGL》 之 指定纹理 glTexImage2D(),gluScaleImage(), glCopyTexImage2D(),glTexSubImage2D()

更多精彩图形学视频教程,请访问 http://www.oxox.work/


定义一个二维纹理:

   glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, checkImageWidth, checkImageHeight, 
                0, GL_RGBA, GL_UNSIGNED_BYTE, checkImage);
   void glTexImage2D (GLenum target, GLint level, GLint internalformat
	   , GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
   //target参数用于定义二维纹理;
   //如果提供了多种分辨率的纹理图像,可以使用level参数,否则level设置为0;
   //internalformat确定了哪些成分(RGBA, 深度, 亮度和强度)被选定为图像纹理单元
   //width和height表示纹理图像的宽度和高度;
   //border参数表示边框的宽度
   //format和type参数描述了纹理图像数据的格式和数据类型
   //pixels参数包含了纹理图像的数据,这个数据描述了纹理图像本身和它的边框


改变纹理图像的大小:

   int gluScaleImage (
	   GLenum      format, 
	   GLint       widthin, 
	   GLint       heightin, 
	   GLenum      typein, 
	   const void  *datain,//存储的纹理图像数据 
	   GLint       widthout, 
	   GLint       heightout, 
	   GLenum      typeout, 
	   void        *dataout);//最终的纹理图像数据

从帧缓存区读取一块矩形像素,并且把它定义为纹理单元:

   void glCopyTexImage2D (GLenum target, GLint level, GLenum internalFormat, 
	   GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
   //纹理数组是从屏幕对齐的像素矩形读取的,它的左下角是(x, y)表示的坐标

查询纹理状态变量的值:

	void glGetTexLevelParameterfv (GLenum target, GLint level, GLenum pname, GLfloat *params);
	//params参数中,返回一个特定细节层的纹理参数值,这个细节层由level参数指定;
	//target参数定义了目标纹理


定义一个二维纹理图像,替换当前一副现有的二维图像的全部或一块连续的区域:

         glTexSubImage2D(GL_TEXTURE_2D, 0, 12, 44, subImageWidth,
                         subImageHeight, GL_RGBA,
                         GL_UNSIGNED_BYTE, subImage);
		 void glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height
			 , GLenum format, GLenum type, const GLvoid *pixels);
		 //pixels包含了表示子图像的纹理数据
		 //width和height表示表示子区域的宽度和高度
		 //xoffset和yoffset表示x和y方向上的纹理单元偏移量


### 关于 `glTexImage2D` 函数在 OpenGL 4.5 中的使用 #### 定义与功能 `glTexImage2D` 是用于定义二维纹理图像的一个重要函数。此函数允许指定纹理的具体参数,包括内部格式、尺寸以及像素数据等[^3]。 #### 参数说明 该函数接受多个参数来配置纹理属性: - **target**: 指定目标纹理对象类型;对于二维纹理而言通常是 `GL_TEXTURE_2D`. - **level**: 表示mipmap层次级别. - **internalformat**: 设定存储颜色组件的方式(例如RGB, RGBA),同时也影响到硬件如何处理这些数据. - **width**, **height**: 设置纹理宽度高度. - **border**: 边框宽度,在现代OpenGL版本里通常设为0. - **format**: 描述输入像素数据的颜色分量顺序 (如 GL_RGB). - **type**: 数据类型的指示器 (比如 unsigned byte, float etc.) - **pixels**: 指向实际图像数据的指针. ```cpp void glTexImage2D( GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void* pixels); ``` #### 使用实例 下面给出一段简单的代码片段展示怎样利用上述提到的信息创建并初始化一个基于内存中已有图片数据的新纹理: ```cpp GLuint textureID; glGenTextures(1, &textureID); // Generate one texture ID glBindTexture(GL_TEXTURE_2D, textureID); // Assuming 'imageData' contains valid pixel data and dimensions are known glTexImage2D( GL_TEXTURE_2D, /* Target */ 0, /* Level-of-detail number */ GL_RGBA8, /* Internal format */ imageWidth, /* Width */ imageHeight, /* Height */ 0, /* Border must be zero */ GL_RGBA, /* Format */ GL_UNSIGNED_BYTE, /* Type */ imageData /* Pointer to image data */ ); // Set up additional parameters as needed... glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); glGenerateMipmap(GL_TEXTURE_2D); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虚坏叔叔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值