美文网首页
OpenGL 纹理

OpenGL 纹理

作者: 丸疯 | 来源:发表于2020-07-21 17:13 被阅读0次

图像的存储空间

图像的存储空间 = 图像的高 * 图像的宽 * 每个像素的字节数

纹理文件

  • OpenGL:TGA
  • OpenGL ES、iOS:PNG

函数认识

改变像素存储方式

glPixelStorei(<#GLenum pname#>, <#GLint param#>)

恢复像素存储方式

glPixelStoref(<#GLenum pname#>, <#GLfloat param#>)
参数 释义
pname GL_UNPACK_ALIGNMENT指定OpenGL如何从缓存区中解包图像数据
param 表示参数GL_UNPACK_ALIGNMENT设置的值

Example:glPixelStorei(GL_UNPACK_ALIGNMENT,1),GL_UNPACK_ALIGNMENT指内存中每个像素行起点的排列请求,允许设置为1(byte排列)、2(排列为偶数byte的行)、4(字Word的排列)、8(行从双字节边界开始)

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

glReadPixels(<#GLint x#>, <#GLint y#>, <#GLsizei width#>, <#GLsizei height#>, <#GLenum format#>, <#GLenum type#>, <#GLvoid *pixels#>)
参数 释义
x 矩形左下角的窗口坐标
y 矩形右下角的窗口坐标
width 矩形的宽,以像素为单位
height 矩形的高,以像素为单位
format OpenGL像素格式GLenum枚举值(见图例-1)
type 像素数据的数据类型(见图例-2)
pixels 指向图形数据的指针

载入纹理函数

glTexImage1D(<#GLenum target#>, <#GLint level#>, <#GLint internalformat#>, <#GLsizei width#>, <#GLint border#>, <#GLenum format#>, <#GLenum type#>, <#const GLvoid *pixels#>)
glTexImage2D(<#GLenum target#>, <#GLint target#>, <#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_EXT)
target 指定加载的MIP贴图层次,一般设为0
internalformat 每个纹理单元中存储的多少颜色成分
width
height
depth
纹理的宽度,高度,深度(通常为2的次方)
border 允许为纹理贴图指定一个边界宽度
其余参数 同上

更新纹理

glTexSubImage1D(<#GLenum target#>, <#GLint level#>, <#GLint xoffset#>, <#GLsizei width#>, <#GLenum format#>, <#GLenum type#>, <#const GLvoid *pixels#>)
glTexSubImage2D(<#GLenum target#>, <#GLint level#>, <#GLint xoffset#>, <#GLint yoffset#>, <#GLsizei width#>, <#GLsizei height#>, <#GLenum format#>, <#GLenum type#>, <#const GLvoid *pixels#>)

插入替换纹理

glTexSubImage2D(<#GLenum target#>, <#GLint level#>, <#GLint xoffset#>, <#GLint yoffset#>, <#GLsizei width#>, <#GLsizei height#>, <#GLenum format#>, <#GLenum type#>, <#const GLvoid *pixels#>)
glTexSubImage1D(<#GLenum target#>, <#GLint level#>, <#GLint xoffset#>, <#GLint yoffset#>, <#GLsizei width#>, <#GLsizei height#>, <#GLenum format#>, <#GLenum type#>, <#const GLvoid *pixels#>)

使用颜色缓冲区加载数据,形成新的纹理使用

glCopyTexImage1D(<#GLenum target#>, <#GLint level#>, <#GLenum internalFormat#>, <#GLint x#>, <#GLint y#>, <#GLsizei width#>, <#GLint border#>)
glCopyTexImage2D(<#GLenum target#>, <#GLint level#>, <#GLenum internalFormat#>, <#GLint x#>, <#GLint y#>, <#GLsizei width#>, <#GLsizei height#>, <#GLint border#>)
  • x,y 在颜色缓存区中指定了开始读取微粒数据的位置;缓存区里的数据是缓存区通过glReadBuffer设置的。

纹理对象

  • 使用函数分配纹理对象;指定纹理对象的数量和指针(指针指向一个无符号整形数组,由纹理对象标识符填充)。
glGenTextures(<#GLsizei n#>, <#GLuint *textures#>)
  • 绑定纹理状态
glBindTexture(<#GLenum target#>, <#GLuint texture#>)
  • 删除绑定纹理对象
glDeleteTextures(<#GLsizei n#>, <#const GLuint *textures#>)
  • 测试纹理对象是否有效
glIsTexture(<#GLuint texture#>)

设置纹理参数

    glTexParameterf(<#GLenum target#>, <#GLenum pname#>, <#GLfloat param#>)
    glTexParameteri(<#GLenum target#>, <#GLenum pname#>, <#GLint param#>)
    glTexParameterfv(<#GLenum target#>, <#GLenum pname#>, <#const GLfloat *params#>)
    glTexParameteriv(<#GLenum target#>, <#GLenum pname#>, <#const GLint *params#>)
参数 释义
target 指定纹理模式
pname 指定需要设置的纹理参数
params 设定指定纹理参数的值

设置过滤方式

  • 邻近过滤(GL_NEAREST)


    邻近过滤.png
  • 线性过滤(GL_LINEAR)
    线性过滤.png
    邻近过滤和线性过滤对比.png
    Example:glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)
  • 设置环绕方式
glTexParameteri(<#GLenum target#>, <#GLenum pname#>, <#GLint param#>)

Example:glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE)

参数 释义
target GL_TEXTURE_2D
GL_TEXTURE_1D
GL_TEXTURE_3D
GL_TEXTURE_WRAP_S
GL_TEXTURE_WRAP_T
GL_TEXTURE_WRAP_R
针对s,r,t坐标
GL_REPEAT
GL_CLAMP
GL_CLAMP_TO_EDGE
GL_CLAMP_TO_BORDER
GL_REPEAT:在纹理坐标超过1.0的方向上重复
GL_CLAMP:所需纹理单元取自纹理边界或者TEXTURE_BORDER_COLOR
GL_CLAMP_TO_EDGE:环绕模式强制对范围之外的纹理坐标沿合法的纹理单元的最后一行或者最后一列来进行采样
GL_CLAMP_TO_BORDER:在纹理坐标在0.0到1.0范围之外的只使用边界纹理单元。边界纹理单元是作为围绕基本图像的额外的行和列,并且和基本纹理一起加载

上述四种环绕方式图解


环绕方式.png 图例-1 图例-2

相关文章

  • GLKit常用API解析

    GLKTextureInfo 创建OpenGL纹理信息 name: OpenGL上下文中纹理名称 target: ...

  • OpenGL ES GLKit 􏰼􏰜常用API解析

    GLKTextureInfo创建OpenGL纹理信息 name : OpenGL上下文中纹理名称 target :...

  • OpenGL纹理内容

    纹理可以理解为一张图片,OpenGL渲染图片会将图片的像素保存在纹理缓存中。 OpenGL常用纹理函数 载入纹理 ...

  • OpenGL纹理

    纹理可以理解为一张图片,OpenGL渲染图片会将图片的像素保存在纹理缓存中。OpenGL常用纹理函数 载入纹理 纹...

  • OPenGL ES纹理翻转解决方案

    纹理翻转 在使用OpenGL函数加载纹理到图形时,经常遇到纹理上下颠倒的问题。原因是因为OpenGL要求纹理坐标原...

  • OpenGL坐标概念

    openGL 顶点,坐标系,纹理坐标Android OpenGL es 纹理坐标设定与贴图规则对Android o...

  • OpenGL之纹理及应用案例

    纹理介绍 OpenGL使用的图片数据(纹理)都是tga格式的,而iOS/OpenGL ES使用PNG/JPEG格式...

  • OpenGL 纹理翻转策略

    Open GL纹理翻转 在使用OpenGL函数加载纹理到图形时,经常遇到纹理上下颠倒的问题。原因是因为OpenGL...

  • OpenGL ES之旅(三)-- OpenGL ES 纹理翻转解

    纹理翻转概述 在使用OpenGL ES函数加载纹理到图形时,经常遇到纹理上下颠倒的问题。原因是因为OpenGL E...

  • 案例08:隧道

    OpenGL + OpenGL ES +Metal 系列文章汇总 本案例主要目的多个纹理如何使用,加深对纹理的使用...

网友评论

      本文标题:OpenGL 纹理

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