8.5 OpenGL纹理和采样器:纹理图像规范

2024-02-25 03:44

本文主要是介绍8.5 OpenGL纹理和采样器:纹理图像规范,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

纹理图像规范 Texture Image Specification

void glTexImage3D( enum target, int level, int internalformat, sizei width, sizei height, sizei depth, int border, enum format, enum type, const void *data );

指定三维纹理图像。

  • target 必须是以下值之一:
    • TEXTURE_3D 表示三维纹理;
    • TEXTURE_2D_ARRAY 表示二维数组纹理;
    • TEXTURE_CUBE_MAP_ARRAY 表示立方体贴图数组纹理;
    • PROXY_TEXTURE_3D 表示三维代理纹理;
    • PROXY_TEXTURE_2D_ARRAY 表示二维数组代理纹理;
    • PROXY_TEXTURE_CUBE_MAP_ARRAY 表示立方体贴图数组代理纹理;
  • level 指定 mipmap 级别。0 表示基本纹理级别;更高的数值对应于更小分辨率的 mipmap 层次。
  • internalformat 可以指定为Table 8.11中列出的内部格式符号,也可以是Table 8.12-8.13中列出的尺寸化内部格式符号常量之一,或者是Table 8.14中列出的通用压缩内部格式符号常量之一,或者是在Table 8.14中列出的具体压缩内部格式符号常量之一。
  • widthheightdepth分别指定纹理的宽度、高度和深度(对于 3D 纹理而言)。
  • border设置为 0,因为大多数现代 OpenGL 实现不支持带边框的纹理。
  • formattypedata指定图像数据的格式、类型以及当前绑定的像素解包缓冲区或客户端内存中图像数据的引用,如第8.4.4节所述。

内存中的组被视为按照一系列相邻的矩形排列。每个矩形是一个二维图像,其大小和排列方式由TexImage3D函数中的宽度和高度参数决定。UNPACK_ROW_LENGTHUNPACK_ALIGNMENT值控制了这些图像行与行之间的间距,详情请参阅第8.4.4节。如果整数参数UNPACK_IMAGE_HEIGHT不为正,则每二维图像的行数为height;否则,行数为UNPACK_IMAGE_HEIGHT。每个二维图像包含整数个连续的行,并且紧邻其相邻图像。

选取三维图像子体积的机制依赖于整数参数UNPACK_SKIP_IMAGES。若该值为正,则在从内存获取第一个数据组之前,指针会向前移动UNPACK_SKIP_IMAGES乘以一个二维图像元素数量的距离。然后处理depth个二维图像,每个图像按照第8.4.4节描述的方式提取子图像。

如果基本内部格式为 DEPTH_STENCIL,而格式不是 DEPTH_STENCIL,则模板索引纹理分量的值是未定义的。

只有当目标为 TEXTURE_1DTEXTURE_2DTEXTURE_2D_MULTISAMPLETEXTURE_1D_ARRAYTEXTURE_2D_ARRAYTEXTURE_2D_MULTISAMPLE_ARRAYTEXTURE_RECTANGLETEXTURE_CUBE_MAPTEXTURE_CUBE_MAP_ARRAYPROXY_TEXTURE_1DPROXY_TEXTURE_2DPROXY_TEXTURE_2D_MULTISAMPLEPROXY_TEXTURE_1D_ARRAYPROXY_TEXTURE_2D_ARRAYPROXY_TEXTURE_2D_MULTISAMPLE_ARRAYPROXY_TEXTURE_RECTANGLEPROXY_TEXTURE_CUBE_MAPPROXY_TEXTURE_CUBE_MAP_ARRAY 之一时,才支持基本内部格式为 DEPTH_COMPONENTDEPTH_STENCILSTENCIL_INDEX 的纹理,使用纹理图像规范命令。如果将这些格式与其他目标结合使用,将生成 INVALID_OPERATION 错误。

基本内部格式为 DEPTH_COMPONENTDEPTH_STENCIL 的纹理要求具有深度分量数据或深度/模板分量数据。

具有其他基本内部格式的纹理要求 RGBA 分量数据。具有整数内部格式的纹理(参见表8.12)要求整数数据。

通用压缩内部格式不能直接用作纹理图像的内部格式。

所需的纹理格式 Required Texture Formats

实现必须至少支持每种基本内部格式的每种类型(unsigned int、float 等)的一个内部分量分辨率分配。

此外,实现必须支持以下尺寸化和压缩的内部格式。对于任何纹理类型请求这些尺寸化内部格式将至少分配内部分量大小,并且完全分配相应表中所示的该格式的组件类型:

  • 在表8.12的“Req. tex.”列中标记的颜色格式。
  • 表8.14中的所有特定压缩纹理格式。
  • 在表8.13的“Req. format”列中标记的深度、深度+模板和模板格式。

特殊内部格式的编码 Encoding of Special Internal Formats

R11F_G11F_B10FRGB9_E5需特殊处理。

如果指定了压缩内部格式,R、G、B 和 A 值映射到纹理组件的方式等同于表 8.11 中所指定相应基础内部格式组件的映射方式。指定的图像将通过由 GL 自行选择的一种(可能是有损的)压缩算法进行压缩。

OpenGL 实现可能会根据 TexImage3DTexImage2D(见下文)或 TexImage1D(见下文)参数中的任何值(除了目标 target 参数外)来变化其内部组件分辨率的分配或者压缩内部格式的选择,但是分配和选定的压缩图像格式不能依赖于任何其他状态,并且一旦确定后就不能更改。此外,压缩图像格式的选择不得受到 data 参数的影响。分配必须是不变的;每次使用相同参数值指定纹理图像时,都必须选择相同的分配方案和压缩图像格式。这些分配规则同样适用于代理纹理,代理纹理在第 8.22 节中有详细描述。

纹理图像结构 Texture Image Structure

  1. 纹理图像排列方式:纹理图像数据按照一组组数值序列排列,从纹理图像的左下后角开始,逐行逐列排列,最后按深度堆叠。每个组的R、G、B、A分量根据表8.11进行映射。

  2. 目标为TEXTURE_CUBE_MAP_ARRAY时的处理:纹理图像的深度索引k表示一个层面,每个层面对应一个立方体贴图面。

  3. 内部数据类型的处理:根据纹理图像的内部数据类型不同,颜色分量进行相应的转换或者截断处理。

  4. 细节级别(level)的定义:主纹理图像的细节级别为0,细节级别必须为非负整数。

  5. 纹理图像的最大尺寸限制:纹理图像的最大尺寸受纹理目标、细节级别和图像的内部格式等因素的影响,采用方程8.3进行计算,且不同纹理类型有不同的计算方式。

  6. 资源限制和内存耗尽:由于资源限制,实现可能无法成功创建最大尺寸的纹理,可能导致内存耗尽。

void glTexImage2D( enum target, int level, int internalformat, sizei width, sizei height, int border, enum format, enum type, const void *data );

指定二维纹理图像。

  • target 必须是以下之一:
    • TEXTURE_2D:表示一个二维纹理。
    • TEXTURE_1D_ARRAY:表示一维数组纹理。
    • TEXTURE_RECTANGLE:表示矩形纹理。
    • 表 8.19 中列出的立方体贴图面目标之一,用于立方体贴图纹理。
    • PROXY_TEXTURE_2D:表示二维代理纹理。
    • PROXY_TEXTURE_1D_ARRAY:表示一维代理数组纹理。
    • PROXY_TEXTURE_RECTANGLE:表示矩形代理纹理。
    • PROXY_TEXTURE_CUBE_MAP:表示立方体贴图代理纹理。

其他参数与 TexImage3D 函数中的对应参数相同。

对于解码纹理图像的目的,TexImage2D 等同于调用 TexImage3D 并设置深度为 1,但忽略 UNPACK_SKIP_IMAGES 参数。

二维或矩形纹理由单一的二维纹理图像组成。立方体贴图纹理是一组六个二维纹理图像。表 8.19 中列出的六个立方体贴图面目标共同构成一个立方体贴图纹理。这些目标分别更新相应的立方体贴图面二维纹理图像。请注意,在指定、更新或查询立方体贴图六张二维图像时使用立方体贴图面目标,但在绑定到立方体贴图纹理对象(即当整个立方体贴图作为一个整体访问而非特定二维图像)时,应使用 TEXTURE_CUBE_MAP 目标。

void TexImage1D( enum target, int level, int internalformat, sizei width, int border, enum format, enum type, const void *data );

指定一维纹理图像。

  • target 必须是 TEXTURE_1D,或者在第 8.22 节讨论的特殊情况下为 PROXY_TEXTURE_1D

从解码纹理图像的角度看,TexImage1D 等同于调用 TexImage2D 并设置高度为 1。


纹理图像中的元素(i, j, k)被称为纹理像素(texel)。对于二维纹理或一维数组纹理,k 参数无关紧要;对于一维纹理,j 和 k 都不相关。用于着色片段的纹理值通过在着色器中对纹理进行采样来确定,但可能并不对应任何实际的纹理像素。参见图 8.3。如果目标是 TEXTURE_CUBE_MAP_ARRAY,则纹理值由坐标 (s, t, r, q) 确定,其中 s、t 和 r 的定义与 TEXTURE_CUBE_MAP 相同,q 定义为立方体贴图数组中特定立方体贴图的索引。

如果TexImage1DTexImage2DTexImage3D的数据参数为NULL,并且像素解包缓冲对象为零,则将创建一个具有指定目标、级别、内部格式、边框、宽度、高度和深度的一维、二维或三维纹理图像,但是图像内容未指定。在这种情况下,不访问客户端内存中的像素值,也不执行像素处理。但是,将生成错误,就像数据指针有效一样。否则,如果像素解包缓冲对象不为零,则数据参数将按正常方式处理,以引用像素解包缓冲对象数据的开头。


Base Internal FormatRGBA, Depth, and Stencil ValuesInternal Components
DEPTH_COMPONENTDepthD
DEPTH_STENCILDepth,StencilD,S
REDRR
RGR,GR,G
RGBR,G,BR,G,B
RGBAR,G,B,AR,G,B,A
STENCIL_INDEXStencilS

Table 8.11: Conversion from RGBA, depth, and stencil pixel components to internal texture components. Texture components R, G, B, and A are converted back to RGBA colors during filtering as shown in table 15.1


Sized Internal FormatBase Internal FormatRGBAShareCRReq.rend.Req.tex.
R8RED8
R8_SNORMREDs8
R16RED16
R16_SNORMREDs16
RG8RG88
RG8_SNORMRGs8s8
RG16RG1616
RG16_SNORMRGs16s16
R3_G3_B2RGB332
RGB4RGB444
RGB5RGB555
RGB565RGB565
RGB8RGB888
RGB8_SNORMRGBs8s8s8
RGB10RGB101010
RGB12RGB121212
RGB16RGB161616
RGB16_SNORMRGBs16s16s16
RGBA2RGBA2222
RGBA4RGBA4444
RGB5_A1RGBA5551
RGBA8RGBA8888
RGBA8_SNORMRGBAs8s8s8s8
RGB10_A2RGBA1010102
RGB10_A2UIRGBAui10ui10ui10ui2
RGBA12RGBA12121212
RGBA16RGBA16161616
RGBA16_SNORMRGBAs16s16s16s16
SRGB8RGB888
SRGB8_ALPHA8RGBA8888
R16FREDf16
RG16FRGf16f16
RGB16FRGBf16f16f16
RGBA16FRGBAf16f16f16f16
R32FREDf32
RG32FRGf32f32
RGB32FRGBf32f32f32
RGBA32FRGBAf32f32f32f32
R11F_G11F_B10FRGBf11f11f10
RGB9_E5RGB9995
R8IREDi8
R8UIREDui8
R16IREDi16
R16UIREDui16
R32IREDi32
R32UIREDui32
RG8IRGi8i8
RG8UIRGui8ui8
RG16IRGi16i16
RG16UIRGui16ui16
RG32IRGi32i32
RG32UIRGui32ui32
RGB8IRGBi8i8i8
RGB8UIRGBui8ui8ui8
RGB16IRGBi16i16i16
RGB16UIRGBui16ui16ui16
RGB32IRGBi32i32i32
RGB32UIRGBui32ui32ui32
RGBA8IRGBAi8i8i8i8
RGBA8UIRGBAui8ui8ui8ui8
RGBA16IRGBAi16i16i16i16
RGBA16UIRGBAui16ui16ui16ui16
RGBA32IRGBAi32i32i32i32
RGBA32UIRGBAui32ui32ui32ui32

Table 8.12: Correspondence of sized internal color formats to base internal formats, internal data type, and desired component resolutions for each sized internal format. The component resolution prefix indicates the internal data type: f is floating-point, i is signed integer, ui is unsigned integer, s is signed normalized fixed-point, and no prefix is unsigned normalized fixed-point. The “CR”, “Req. tex.”, and “Req. rend.” columns are described in sections 9.4, 8.5.1, and 9.2.5, respectively


Sized Internal FormatBase Internal FormatD bitsS bitsReq.format
DEPTH_COMPONENT16DEPTH_COMPONENT16
DEPTH_COMPONENT24DEPTH_COMPONENT24
DEPTH_COMPONENT32DEPTH_COMPONENT32
DEPTH_COMPONENT32FDEPTH_COMPONENTf32
DEPTH24_STENCIL8DEPTH_STENCIL24ui8
DEPTH32F_STENCIL8DEPTH_STENCILf32ui8
STENCIL_INDEX1STENCIL_INDEXui1
STENCIL_INDEX4STENCIL_INDEXui4
STENCIL_INDEX8STENCIL_INDEXui8
STENCIL_INDEX16STENCIL_INDEXui16

Table 8.13: Correspondence of sized internal depth and stencil formats to base internal formats, internal data type, and desired component resolutions for each sized internal format. The component resolution prefix indicates the internal data type: f is floating-point, i is signed integer, ui is unsigned integer, and no prefix is fixed-point. The “Req. format” column is described in section 8.5.1


Compressed Internal FormatBase Internal FormatTypeBorder TypeCopyable
COMPRESSED_REDREDGenericunorm
COMPRESSED_RGRGGenericunorm
COMPRESSED_RGBRGBGenericunorm
COMPRESSED_RGBARGBAGenericunorm
COMPRESSED_SRGBRGBGenericunorm
COMPRESSED_SRGB_ALPHARGBAGenericunorm
COMPRESSED_RED_RGTC1REDSpecificunorm
COMPRESSED_SIGNED_RED_RGTC1REDSpecificsnorm
COMPRESSED_RG_RGTC2RGSpecificunorm
COMPRESSED_SIGNED_RG_RGTC2RGSpecificsnorm
COMPRESSED_RGBA_BPTC_UNORMRGBASpecificunorm
COMPRESSED_SRGB_ALPHA_BPTC_UNORMRGBASpecificunorm
COMPRESSED_RGB_BPTC_SIGNED_FLOATRGBSpecificfloat
COMPRESSED_RGB_BPTC_UNSIGNED_FLOATRGBSpecificfloat
COMPRESSED_RGB8_ETC2RGBSpecificunorm
COMPRESSED_SRGB8_ETC2RGBSpecificunorm
COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2RGBSpecificunorm
COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2RGBSpecificunorm
COMPRESSED_RGBA8_ETC2_EACRGBASpecificunorm
COMPRESSED_SRGB8_ALPHA8_ETC2_EACRGBASpecificunorm
COMPRESSED_R11_EACREDSpecificunorm
COMPRESSED_SIGNED_R11_EACREDSpecificsnorm
COMPRESSED_RG11_EACRGSpecificunorm
COMPRESSED_SIGNED_RG11_EACRGSpecificsnorm

Table 8.14: Generic and specific compressed internal formats. Specific formats are described in appendix D. The “Border Type” field determines how border colors are clamped, as described in section 8.14.2. The “Copyable” field specifies if the format may be used with non-compressed texture image commands


Major Axis DirectionTargetsctcma
+rxTEXTURE_CUBE_MAP_POSITIVE_X−rz−ryrx
−rxTEXTURE_CUBE_MAP_NEGATIVE_Xrz−ryrx
+ryTEXTURE_CUBE_MAP_POSITIVE_Yrxrzry
−ryTEXTURE_CUBE_MAP_NEGATIVE_Yrx−rzry
+rzTEXTURE_CUBE_MAP_POSITIVE_Zrx−ryrz
−rzTEXTURE_CUBE_MAP_NEGATIVE_Z−rx−ryrz

Table 8.19: Selection of cube map images based on major axis direction of texture coordinates

这篇关于8.5 OpenGL纹理和采样器:纹理图像规范的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/744292

相关文章

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

MySQL高性能优化规范

前言:      笔者最近上班途中突然想丰富下自己的数据库优化技能。于是在查阅了多篇文章后,总结出了这篇! 数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名识意,并且最后不要超过32个字符 临时库表必须以tmp_为前缀并以日期为后缀,备份

JavaEE7 Servlet 3.1(JSR 340)规范中文版

http://www.iteye.com/news/27727-jinnianshilongnian     Jave EE 7中的部分规范已正式获得批准通过,其中包括JSR340 Java Servlet 3.1规范,去年翻译了该规范,在此分享出来,希望对某些朋友有所帮助,不足之处请指正。   点击直接下载    在线版目录   Servlet3.1规范翻译

Verybot之OpenCV应用一:安装与图像采集测试

在Verybot上安装OpenCV是很简单的,只需要执行:         sudo apt-get update         sudo apt-get install libopencv-dev         sudo apt-get install python-opencv         下面就对安装好的OpenCV进行一下测试,编写一个通过USB摄像头采

【python计算机视觉编程——7.图像搜索】

python计算机视觉编程——7.图像搜索 7.图像搜索7.1 基于内容的图像检索(CBIR)从文本挖掘中获取灵感——矢量空间模型(BOW表示模型)7.2 视觉单词**思想****特征提取**: 创建词汇7.3 图像索引7.3.1 建立数据库7.3.2 添加图像 7.4 在数据库中搜索图像7.4.1 利用索引获取获选图像7.4.2 用一幅图像进行查询7.4.3 确定对比基准并绘制结果 7.

【python计算机视觉编程——8.图像内容分类】

python计算机视觉编程——8.图像内容分类 8.图像内容分类8.1 K邻近分类法(KNN)8.1.1 一个简单的二维示例8.1.2 用稠密SIFT作为图像特征8.1.3 图像分类:手势识别 8.2贝叶斯分类器用PCA降维 8.3 支持向量机8.3.2 再论手势识别 8.4 光学字符识别8.4.2 选取特征8.4.3 多类支持向量机8.4.4 提取单元格并识别字符8.4.5 图像校正

OPENGL顶点数组, glDrawArrays,glDrawElements

顶点数组, glDrawArrays,glDrawElements  前两天接触OpenGL ES的时候发现里面没有了熟悉的glBegin(), glEnd(),glVertex3f()函数,取而代之的是glDrawArrays()。有问题问google,终于找到答案:因为OpenGL ES是针对嵌入式设备这些对性能要求比较高的平台,因此把很多影响性能的函数都去掉了,上述的几个函数都被移除了。接

OpenGL ES学习总结:基础知识简介

什么是OpenGL ES? OpenGL ES (为OpenGL for Embedded System的缩写) 为适用于嵌入式系统的一个免费二维和三维图形库。 为桌面版本OpenGL 的一个子集。 OpenGL ES管道(Pipeline) OpenGL ES 1.x 的工序是固定的,称为Fix-Function Pipeline,可以想象一个带有很多控制开关的机器,尽管加工

OpenGL雾(fog)

使用fog步骤: 1. enable. glEnable(GL_FOG); // 使用雾气 2. 设置雾气颜色。glFogfv(GL_FOG_COLOR, fogColor); 3. 设置雾气的模式. glFogi(GL_FOG_MODE, GL_EXP); // 还可以选择GL_EXP2或GL_LINEAR 4. 设置雾的密度. glFogf(GL_FOG_DENSITY, 0