OpenGLES---纹理的API

本文深入探讨了OpenGLES 2.0中的纹理API,详细讲解了如何创建、加载和应用纹理到3D图形。通过实例解析关键函数用法,帮助开发者掌握纹理映射的核心技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


{目录
	//关联纹理层(GL_TEXTURE0 ~ GL_TEXTURE31)
	glActiveTexture (GLenum texture);
	//生成纹理
	glGenTextures (GLsizei n, GLuint* textures); 
	//删除纹理
	glDeleteTextures (GLsizei n, const GLuint* textures); 
	//绑定纹理
	glBindTexture (GLenum target, GLuint texture);
	//将图片数据传给opengl
	glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels); 
	//将图片局部数据传给opengl
	glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid* pixels);
	//压缩纹理
	glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data);
	//将图片局部数据传给opengl
	glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data);
	//拷贝纹理
	glCopyTexImage2D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
	//拷贝局部纹理
	glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
	
	glTexParameterf (GLenum target, GLenum pname, GLfloat param);
	glTexParameterfv (GLenum target, GLenum pname, const GLfloat* params);
	//设置纹理参数
	glTexParameteri (GLenum target, GLenum pname, GLint param);
	glTexParameteriv (GLenum target, GLenum pname, const GLint* params);

	glGetTexParameterfv (GLenum target, GLenum pname, GLfloat* params);
	//获取纹理参数
	glGetTexParameteriv (GLenum target, GLenum pname, GLint* params);
	glGenerateMipmap (GLenum target);
}


/** 关联纹理层(GL_TEXTURE0 ~ GL_TEXTURE31)
 * @param  texture 纹理层一共能关联32个 GL_TEXTURE0 ~ GL_TEXTURE31
 * @return 
 */
GL_APICALL void GL_APIENTRY glActiveTexture (GLenum texture);

/** 生成纹理的索引
 * 功能:函数根据纹理参数返回n个纹理索引。纹理名称集合不必是一个连续的整数集合。
 * @param  n  用来生成纹理的数量
 * @param  textures 存储纹理索引的第一个元素指针
 *  删除
 * 		unsigned tId=0;
 *		glGenTextures(1,&tId);//生成纹理的索引
 *		...
 *		glDeleteTextures(1,&tId);
 */
GL_APICALL void GL_APIENTRY glGenTextures (GLsizei n, GLuint* textures);

/** 删除纹理
 * @param  n 产生纹理的数量
 * @param  textures 存储纹理索引的第一个元素指针
 *  删除
 * 		unsigned tId=0;
 *		glGenTextures(1,&tId);
 *		...
 *		glDeleteTextures(1,&tId);
 */
GL_APICALL void GL_APIENTRY glDeleteTextures (GLsizei n, const GLuint* textures);

/** 绑定纹理
 * @param  target   纹理是几维的
 * @param  texture  纹理id
 * @return 
 */
GL_APICALL void GL_APIENTRY glBindTexture (GLenum target, GLuint texture);

/** 将图片数据传给opengl
* @param  target 纹理是几维的 GL_TEXTURE_2D ...
* @param  level 纹理层级别[0,10] 0最大,10最小
* @param  internalformat 纹理存储格式(显冲用的纹理格式)
* @param  width 纹理宽度,老一点的显卡,不支持不规则的纹理,即宽度和高度不是2^n。
* @param  height 纹理高度,老一点的显卡,不支持不规则的纹理,即宽度和高度不是2^n。
* @param  border 是否有边框
* @param  format 数据的格式(传入图片数据的格式)RGB,GRBA ...
* @param  type 纹理数据类型  unsigned byte ...
* @param  pixels 纹理数据
*/
GL_APICALL void GL_APIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels);

/** 将图片局部数据传给opengl
* @param  target  纹理是几维的 GL_TEXTURE_2D ...
* @param  level 纹理层级别[0,10] 0最大,10最小
* @param  xoffset 偏移量x(相对整张图片(0,0)点偏移多少)
* @param  yoffset 偏移量y
* @param  width 纹理宽度,老一点的显卡,不支持不规则的纹理,即宽度和高度不是2^n。
* @param  height 纹理高度,老一点的显卡,不支持不规则的纹理,即宽度和高度不是2^n。
* @param  format 数据的格式(传入图片数据的格式)RGB,GRBA ... 
* @param  type 纹理数据类型  unsigned byte ...
* @param  pixels 纹理数据 
*/
GL_APICALL void GL_APIENTRY glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid* pixels);

/** 压缩纹理
 * @param  target 纹理是几维的 GL_TEXTURE_2D ...
 * @param  level 纹理层级别[0,10] 0最大,10最小       
 * @param  internalformat 压缩格式
 * @param  width  纹理宽度
 * @param  height  纹理高度
 * @param  border  是否有边框
 * @param  imageSize 
 * @param  data   纹理数据 
 * @return 
 */
GL_APICALL void GL_APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data);

/** 将图片局部数据传给opengl
 * @param  target  纹理是几维的 GL_TEXTURE_2D ...
 * @param  level   纹理层级别[0,10] 0最大,10最小    
 * @param  xoffset  偏移量x(相对整张图片(0,0)点偏移多少) 
 * @param  yoffset  偏移量y
 * @param  width   纹理宽度
 * @param  height  纹理高度
 * @param  format  数据的格式(传入图片数据的格式)RGB,GRBA ... 
 * @param  imageSize 
 * @param  data    纹理数据  
 * @return 
 */
GL_APICALL void GL_APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data);

/** 拷贝纹理
 * @param  target 纹理是几维的 GL_TEXTURE_2D ...
 * @param  level 纹理层级别[0,10] 0最大,10最小   
 * @param  internalformat 
 * @param  x 起始位x(相对屏幕(0,0)点偏移多少)
 * @param  y 起始位x
 * @param  width 纹理宽度
 * @param  height 纹理高度
 * @param  border 是否有边框
 */
GL_APICALL void GL_APIENTRY glCopyTexImage2D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);

/** 拷贝局部纹理
 * @param  target  纹理是几维的 GL_TEXTURE_2D ...
 * @param  level  纹理层级别[0,10] 0最大,10最小   
 * @param  xoffset 偏移量x(相对屏幕(0,0)点偏移多少) 
 * @param  yoffset 偏移量y
 * @param  x 
 * @param  y 
 * @param  width 纹理宽度
 * @param  height 纹理高度
 */
GL_APICALL void GL_APIENTRY glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);

/**
 * @param  target 
 * @param  pname  
 * @param  param  
 * @return 
 */
GL_APICALL void GL_APIENTRY glTexParameterf (GLenum target, GLenum pname, GLfloat param);
GL_APICALL void GL_APIENTRY glTexParameterfv (GLenum target, GLenum pname, const GLfloat* params);

/** 设置纹理参数
 * @param  target 纹理是几维的 GL_TEXTURE_2D ...
 * @param  pname  	
 *         	GL_TEXTURE_MAG_FILTER  放大滤波(参数)
 *				GL_NEAREST  最近的(用第0级)
 *				GL_LINEAR   线性的(用第0级)
 *			GL_TEXTURE_MIN_FILTER  缩小滤波(参数)
 *				GL_NEAREST 最近的(用第0级)
 *				GL_LINEAR  线性的(用第0级)
 *				GL_NEAREST_MIPMAP_NEAREST(用mipmap)   	(NEAREST:本级之间的算法,GL_LINEAR:级与级之间是否做了差值过滤)
 *				GL_LINEAR_MIPMAP_NEAREST (用mipmap)
 *				GL_NEAREST_MIPMAP_LINEAR (用mipmap)
 *				GL_LINEAR_MIPMAP_LINEAR  (用mipmap)  最好级别
 *			GL_TEXTURE_WRAP_S  s方向(水平方向,uv坐标xy轴,这st是一个意思)
 *			GL_TEXTURE_WRAP_T  t方向(垂直方向)
 *				GL_REPEAT          重复(默认)
 *				GL_CLAMP_TO_EDGE   用边缘的像素填充(纹理超过1的话)
 *				GL_MIRRORED_REPEAT 纹理镜像重复(纹理超过1的话)
 * @param  param 
 */
GL_APICALL void GL_APIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param);
GL_APICALL void GL_APIENTRY glTexParameteriv (GLenum target, GLenum pname, const GLint* params);


GL_APICALL void GL_APIENTRY glGetTexParameterfv (GLenum target, GLenum pname, GLfloat* params);

/** 获取纹理参数
 * @param  target 纹理是几维的 GL_TEXTURE_2D ...
 * @param  pname  参数
 * @param  params 内容
 * @return 
 */
GL_APICALL void GL_APIENTRY glGetTexParameteriv (GLenum target, GLenum pname, GLint* params);


/**
 * @param  target 
 * @return 
 */
GL_APICALL void GL_APIENTRY glGenerateMipmap (GLenum target);

不一定全,以后还会更新的。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值