OpenGL之纹理映射

1.1 Texture Mapping

1.1.1 在OpenGL编程中,应用纹理主要分为四步:

  • 创建纹理对象,并为它装载一个纹理;
glGenTexture(1,&texName);				//为每个纹理编号,1代表生成一个编号
glBindTexture(GL_TEXTURE_2D,texName);	//绑定纹理,将会对绑定的纹理进行操作;
glTexImage2D(...);						//装载纹理,从内存载入显存;

glDeleteTextures(GLsizei n,const GLuint *textures);
  • 确定纹理如何应用到每个像素上;
glTexEnvf(GLenum target,GLenum pname,GLfloat param);
/*
	target 必须是GL_TEXTURE_ENV;
	pname必须是GL_TEXTURE_ENV_MODE;
	param 可以为:GL_MODULATE、GL_DECAL、GL_BLEND、GL_REPLACE;纹理应用到每个像素的方式,就是在片元处理阶段是相乘、混合还是替代;
*/
  • 启用纹理贴图功能;
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D,texName);
  • 绘制场景,提供纹理坐标和几何图形坐标;
glTexCoord2f(...);

/*
	纹理坐标范围是[0,1]之间,如果出现超出范围的情况,可以设置纹理的wrap方式;
	glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT); //设置S方向REPEAT,即重复;
	glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP); //设置T方向CLAP,即截断;
*/
glVertex3f(...);

1.1.2 纹理的几何变换

glMatrixMode(GL_TEXTURE);
glTranslate(x,y,z);
glRotatef(angle,x,y,z);
glScalef(sx,sy,sz);
glMatrixMode(GL_MODELVIEW);
  • 常见的应用是实现流动水面的效果;

1.1.3 一维纹理与三维纹理

  • glTexImage1D
  • glTexImage3D

1.2 在图形流水线中,纹理映射为:

  • 在顶点处理阶段,给定顶点的纹理坐标;
  • 光栅化阶段:插值得到每个片元的纹理坐标;
  • 在片元处理阶段,根据纹理坐标获取片元的纹理值;

1.2.1 纹理数据的获取

  • 程序生成;
  • 读取图片文件
  • 拷贝屏幕的部分区域为当前纹理;
glCopyTexImage2D();

在这里插入图片描述

  • 替换纹理图像的一部分;
glTexSubImage2D();

在这里插入图片描述

  • 拷贝屏幕并替换当前纹理的一部分区域;
glCopyTexSubImage2D();

在这里插入图片描述

  • 使用帧缓冲区对象直接渲染到纹理;

1.2.2 BMP、JPEG等图像文件中不包含透明度信息,而TGA文件可以携带透明度信息,还具有压缩格式和非压缩格式两种存储方式。另外,png、dds等也可以携带透明通道信息。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

秘境之眼

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

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

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

打赏作者

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

抵扣说明:

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

余额充值