美文网首页OpenGL
08-OpenGL 纹理基础(上)

08-OpenGL 纹理基础(上)

作者: SPIREJ | 来源:发表于2019-05-24 11:02 被阅读0次

1. 读取文件

GLbyte *gltReadTGABits(const char *szFileName,
                       GLint *iWidth,
                       GLint *iHeight,
                       GLint *iComponents,
                       GLenum *eFormat,
                       GLbyte *pData = NULL);

szFileName:纹理文件名称
iWidth、iHeight:宽度地址、高度地址
iComponents:组件地址
eFormat:格式地址
返回值:GLbyte* 指向图像数据的指针

2. 载入纹理

void GLAPIENTRY glTexImage2D (GLenum target,
                              GLint level,
                              GLint internalformat,
                              GLsizei width,
                              GLsizei height,
                              GLint border,
                              GLenum format,
                              GLenum type,
                              const GLvoid *pixels);

target: 纹理维度 GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D
level: mip贴图层次,一般设置为0
internalformat: 每个纹理单元中存储多少颜色成分
width、height、depth: 加载纹理的宽度、高度、深度。习惯使用2的整数次方去设置这些参数
border: 允许为纹理贴图指定一个边界宽度
format: OpenGL 像素格式
type: 解释参数pixels指向的数据,
告诉OpenGL 使⽤缓存区中的什么数据类型来存储颜⾊分量,像素数据的数据类型,
参考 表1-2
pixels: 指向图形数据的指针

3. 设置纹理参数

void glTexParameterf (GLenum target, GLenum pname, GLint param);
void glTexParameteri (GLenum target, GLenum pname, GLint param);
void glTexParameterfv (GLenum target, GLenum pname, GLint param);
void glTexParameteriv (GLenum target, GLenum pname, GLint param);

target: 纹理维度 GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D
pname:指定需要设置哪个纹理参数
param:指定特定的纹理参数的值

//参数1:纹理维度
//参数2:为S/T坐标设置模式
//参数3:环绕模式
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );


//参数1:纹理维度
//参数2:线性过滤

//纹理缩小时,使用邻近过滤
glTexParameteri (FL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

//纹理放大时,使用线性过滤
glTexParameteri (FL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

4. 分配纹理对象

void glGenTextures (GLsizei n, GLuint *textures);

指定纹理对象的数量指针(指针指向一个无符号整型数组,由纹理对象标识符填充)

5. 绑定纹理状态

void glBindTexture (GLenum target, GLuint texture);

target:GL_TEXTURE_1D、GL_TEXTURE_2D、GL_TEXTURE_3D
texture:需要绑定的纹理对象

6. 删除绑定纹理对象

void glDeleteTextures (GLsizei n, const GLuint *textures);

7. 测试纹理对象是否有效

GLboolean glIsTexture (GLuint texture);

如果texture是一个已经分配空间的纹理对象,那么这个函数会返回GL_TRUE,否则会返回GL_FALSE

表1-1环绕方式

环绕方式 描述
GL_REPEAT 对纹理的默认行为。重复纹理图像
GL_MIRRORED_REPEAT 和GL_REPEAT一样,但每次重复图像是镜像放置的
GL_CLAMP_TO_EDGE 纹理坐标会被约束在0到1之间,超出的部分会重复纹理坐标的边缘,产生一种边缘被拉伸的效果
GL_CLAMP_BORDER 超出的坐标为用户指定的边缘颜色

表 1-2OpenGL 像素格式

常量 描述
GL_RGB 描述红、绿、蓝顺序排列的颜色
GL_RGBA 按照红、绿、蓝、Alpha顺序排列的颜⾊
GL_BGR 按照蓝、绿、红顺序排列颜⾊
GL_BGRA 按照蓝、绿、红、Alpha顺序排列颜⾊
GL_RED 每个像素只包含了了⼀个红⾊分量
GL_GREEN 每个像素只包含了一个绿⾊分量
GL_BLUE 每个像素只包含了⼀个蓝色分量
GL_RG 每个像素依次包含了一个红色和绿色的分量
GL_RED_INTEGER 每个像素包含了⼀个整数形式的红色分量
GL_GREEN_INTEGER 每个像素包含了一个整数形式的绿⾊分量
GL_BLUE_INTEGER 每个像素包含了一个整数形式的蓝⾊分量
GL_RG_INTEGER 每个像素依次包含了一个整数形式的红⾊、绿色分量
GL_RGB_INTEGER 每个像素包含了一个整数形式的红⾊、蓝色、绿色分量
GL_RGBA_INTEGER 每个像素包含了一个整数形式的红色、蓝色、绿色、Alpah分量
GL_BGR_INTEGER 每个像素包含了一个整数形式的蓝色、绿⾊、红⾊分量
GL_BGRA_INTEGER 每个像素包含了一个整数形式的蓝色、绿色、红⾊、Alpah分量
GL_STENCIL_INDEX 每个像素只包含了一个模板值
GL_DEPTH_COMPONENT 每个像素只包含一个深度值
GL_DEPTH_STENCIL 每个像素包含⼀个深度值和⼀个模板值

相关文章

  • 08-OpenGL 纹理基础(上)

    1. 读取文件 szFileName:纹理文件名称iWidth、iHeight:宽度地址、高度地址iCompone...

  • OpenGLEs 纹理的基础知识

    纹理的基础知识 2D 纹理 2d纹理是OpenGlES中最基础和普遍的一种纹理结构。一个2d纹理,就是图片的数据的...

  • 基础纹理

    纹理只是一种能够应用到场景中的三角形上的图像数据,它通过经过过滤的纹理单元(texel,相当于纹理的像素)填充到实...

  • 纹理基础

    纹理基础 之前我们对图元渲染都是用线段或者表面颜色,但这样的效果还不够现实,如果加上纹理贴图,会让渲染效果非常逼真...

  • 基础纹理

    存储在每个顶点上。纹理映射坐标定义了该顶点在纹理中对应的 2D 坐标。通常,这些坐标使用一个二维变量(u, v)来...

  • Ⅱ基础纹理

    基础纹理 单张纹理 关于纹理导入设置用途知识跳转至https://docs.unity.cn/cn/current...

  • android-opengles3.0开发【5】绘制纹理

    简介 本文在上一篇文章的基础上完成纹理的绘制。 绘制纹理流程也不复杂: 一张作为纹理的图片 编写相应的着色器 准备...

  • OpenGL大小球纹理镜像

    这个案例是基于OpenGL综合练习基础上增加纹理和镜像效果的实现。 一、SetupRC函数 纹理的顶点数据设置完成...

  • 十、GLKit 纹理立方体旋转

    前面的文章——GLkit加载纹理图片介绍了如何利用GLKit加载纹理图片,本文就在其基础上,实现一些进阶内容,绘制...

  • 纹理翻转的实现方式

    本文将的内容是在前一篇的基础上延伸的OpenGL ES 实战三-使用GLES加载图片 一.修改纹理坐标 修改纹理坐...

网友评论

    本文标题:08-OpenGL 纹理基础(上)

    本文链接:https://www.haomeiwen.com/subject/jchvzqtx.html