OpenGL 学习笔记(四) 基础纹理

(一) 载入纹理

1.从磁盘中载入Targa 文件

GLbyte *gltReadTGABits(const *szFileName,GLint *iWidth,GLint *iHeight,GLint *iComponents,GLenum *eFormat);  如果调用成功,返回指向图形的指针,否则 null 

2.将 纹理载入内存

void glTexImage1D(GLenum target,GLint level,GLint internalformat,GLsizei width,GLint border,GLenum format,GLenum type,void *data);

void glTexImage2D(GLenum target,GLint level,GLint internalformat,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,void *data);

void glTexImage3D(GLenum target,GLint level,GLint internalformat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,void *data);

target 参数为 GL_TEXTURE_1D,GL_TEXTURE_2D,GL_TEXTURE_3D    level 参数指定了这些函数所加载的mip贴图层数,一般设为0.    internalformat 如果之前用了gltReadTGABits函数,就可以用iComponents 作为参数,  

 

 width height depth 指定了被加载纹理的宽度,高度,深度

border 为纹理贴图指定一个边界宽度  format 可以使用gltReadTGABits函数 的eFormat参数

type 用GL_UNSIGNED_BYTE data 用gltReadTGABits函数的返回值

3.更新纹理

void glTexSubImage1D(GLenum target,GLint level,GLint xOffset,GLsizei width,GLint border,GLenum format,GLenum type,void *data);

 void glTexSubImage2D(GLenum target,GLint level,GLint xOffset,GLint yOffset,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,void *data);

 void glTexSubImage2D(GLenum target,GLint level,GLint xOffset,GLint yOffset,GLint zOffset,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,void *data);

4.纹理对象

void glGenTextures(GLsizei n,GLuint *textures);

这个函数 指定纹理对象的数量,和一个指向每一个对象的指针

绑定和切换纹理对象

void glBindTexture(GLenum target,GLuint texture);

删除纹理对象

void glDeleteTextures(GLsizei n,GLuint *textures);

(二)纹理应用

1.基本过滤

最邻近过滤

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

线性过滤

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAE);

2.纹理环绕

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);

 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

3.指定纹理坐标

Batch.Begin(GL_TRIANGLES,int,int n);

n 是应用的纹理数

Batch.Normal3f(x,y,z); 添加一个表面法线

Batch.MultiTexCoord2f(x,y,z);  添加了一个纹理坐标  x是纹理层次 一般为0

Batch.Vertex3f(x,y,z); 添加一个顶点坐标

(三)Mip贴图

glGenerateMipmap(GL_TEXTURE_2D); 生成mip层

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值