美文网首页
纹理texture

纹理texture

作者: 逐叶 | 来源:发表于2020-04-19 03:20 被阅读0次

1. 读取数据

1.1 从颜色缓存取内容作为像素图直接读取

glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels);

参数解析

x: 矩形左下⻆角的窗⼝口坐标

y: 矩形左下⻆角的窗⼝口坐标

width: 矩形的宽,以像素为单位

height: 矩形的⾼高,以像素为单位

format: OpenGL 的像素格式

type: 像素数据的数据类型,解释参数pixels指向的数据,告诉OpenGL 使⽤用缓存区中的什数据类型来存储颜⾊色分量

pixels: 指向图形数据的指针

1.2 从TGA文件中读取像素图

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

参数解析

szFileName:纹理文件名称

iWidth、iHeight:文件宽高的指针

iComponents:文件组件的指针

eFormat:文件格式的指针

返回值 指向图像数据的指针

2. 载入数据

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

参数解析

target:GL_TEXTURE_1D、GL_TEXTURE_2D、GL_TEXTURE_3D,一般只用 GL_TEXTURE_2D

level:指定所加载的mip贴图层次。一般我们都把这个参数设置为0 。

internalformat:每个纹理理单元中存储多少颜⾊色成分

width、height:加载纹理理的宽度、高度

这些值一般是2的整数次⽅。(这是因为OpenGL 旧版本上的遗留留下的一个要求。当然现在已经可以⽀支持不是 2的整数次方)

border:允许为纹理贴图指定⼀个边界宽度

format:

type:

pixels:像素数据的数据类型,解释参数pixels指向的数据,告诉OpenGL 使⽤用缓存区中的什数据类型来存储颜色分量

3.使用函数分配纹理对象

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

void glGenTextures(GLsizei n, GLuint *textTures);

参数解析

n:指定纹理对象的数量

textTures:指向一个无符号整形的数组的指针

4.绑定纹理状态

void glBindTexture(GLenum target, GLunit texture);

参数解析

target:GL_TEXTURE_1D、GL_TEXTURE_2D、GL_TEXTURE_3D

texture:需要绑定的纹理对象

5.删除绑定纹理对象

void glDeleteTextures(GLsizei n, GLuint *textures);

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

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

GLboolean glIsTexture(GLuint texture);

7.设置纹理参数

voidglTexParameterf(GLenum target, GLenum pname, GLfloat param)

voidglTexParameterfv(GLenum target, GLenum pname,constGLfloat *params)

voidglTexParameteri(GLenum target, GLenum pname, GLint param)

voidglTexParameteriv(GLenum target, GLenum pname,constGLint *params)

参数解析

target:GL_TEXTURE_1D、GL_TEXTURE_2D、GL_TEXTURE_3D

pname:指定需要设定的纹理参数

param:设定指定的纹理参数的值

7.1 过滤方式

GL_TEXTURE_MIN_FILTER // 纹理缩小

GL_TEXTURE_MAG_FILTER // 纹理放大

GL_NEAREST // 邻近过滤,取最近的点的颜色

GL_LINEAR // 线性过滤,去周围点的颜色的混合值

通常

纹理缩小时,使用邻近过滤

glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST)

纹理放大时,使⽤线性过滤

glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR)

7.2 环绕方式

GL_TEXTURE_WRAP_S、GL_TEXTURE_T、GL_TEXTURE_R(3D),针对s,t,r坐标

GL_REPEAT // 默认行为,在纹理坐标超过1.0的方向上对纹理进行重复

GL_CLAMP

GL_CLAMP_TO_EDGE // 强制对范围之外的纹理坐标沿着合法的纹理单元的最后一行或者最后一列来进行采样,超出范围的会重复纹理边缘,拉伸效果

GL_CLAMP_TO_BORDER // 超出范围的使用边界纹理单元

8.纹理坐标

纹理坐标左下角为零点,在映射时,可以任意映射,但不可相交

9.Mip贴图(mipmap)

mipmap是一种功能强大的纹理技巧,可以提高渲染性能的同时还可以改善场景的显示质量。

只有在使用缩小过滤的时候,才会去设置mipmap。

glGenerateMipmap(GL_TEXTURE_2D);

相关文章

  • glTexParameter

    设置纹理参数 指定活动纹理单元的目标纹理,必须是GL_TEXTURE_2D GL_TEXTURE_CUBE_MAP...

  • 纹理-Texture

    首先我们要知道什么是纹理,纹理在Unity中就是图片,图片是由编程者自己导入的,下面就一步一步介绍怎么创建和改变纹...

  • 纹理texture

    1. 读取数据 1.1从颜色缓存取内容作为像素图直接读取 glReadPixels(GLint x, GLint ...

  • OpenGL学习4——纹理

    纹理(Texture) 纹理(Texture) 是一个2D图像(也有1D和3D纹理存在)用于给一个对象添加细节信息...

  • 第二章:图形绘制

    Texture 1.纹理(Texture):图片从原始格式,解码并上传到GPU的过程,被称之为纹理。2.用途:其实...

  • OpenGL纹理常用API

    读取纹理 载⼊入纹理 其他纹理操作 纹理对象 设置纹理参数 关于贴图方式(GL_TEXTURE_WRAP_S、GL...

  • 高级纹理

    这章介绍 立方体纹理(cubeMap)实现环境映射,渲染纹理(Render Texture)和程序纹理(Proce...

  • 二 纹理(texture)

    cocos2d-x技术群新群:117871561c++技术交流群:593010226这是一个换图的实例,同过这个实...

  • OpenGL - 纹理

    GitHub Demo : Texture 纹理的一些相关知识

  • 深度纹理生成及可视化渲染(three.js webgl_dept

    three.js中的webgl_depth_texture例子首先将场景渲染到深度纹理(depth texture...

网友评论

      本文标题:纹理texture

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