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

相关文章

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

c/c++的opencv图像金字塔缩放实现

《c/c++的opencv图像金字塔缩放实现》本文主要介绍了c/c++的opencv图像金字塔缩放实现,通过对原始图像进行连续的下采样或上采样操作,生成一系列不同分辨率的图像,具有一定的参考价值,感兴... 目录图像金字塔简介图像下采样 (cv::pyrDown)图像上采样 (cv::pyrUp)C++ O

JSR-107缓存规范介绍

《JSR-107缓存规范介绍》JSR是JavaSpecificationRequests的缩写,意思是Java规范提案,下面给大家介绍JSR-107缓存规范的相关知识,感兴趣的朋友一起看看吧... 目录1.什么是jsR-1072.应用调用缓存图示3.JSR-107规范使用4.Spring 缓存机制缓存是每一

Python+wxPython构建图像编辑器

《Python+wxPython构建图像编辑器》图像编辑应用是学习GUI编程和图像处理的绝佳项目,本教程中,我们将使用wxPython,一个跨平台的PythonGUI工具包,构建一个简单的... 目录引言环境设置创建主窗口加载和显示图像实现绘制工具矩形绘制箭头绘制文字绘制临时绘制处理缩放和旋转缩放旋转保存编

浅谈Redis Key 命名规范文档

《浅谈RedisKey命名规范文档》本文介绍了Redis键名命名规范,包括命名格式、具体规范、数据类型扩展命名、时间敏感型键名、规范总结以及实际应用示例,感兴趣的可以了解一下... 目录1. 命名格式格式模板:示例:2. 具体规范2.1 小写命名2.2 使用冒号分隔层级2.3 标识符命名3. 数据类型扩展命

python+OpenCV反投影图像的实现示例详解

《python+OpenCV反投影图像的实现示例详解》:本文主要介绍python+OpenCV反投影图像的实现示例详解,本文通过实例代码图文并茂的形式给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一、前言二、什么是反投影图像三、反投影图像的概念四、反向投影的工作原理一、利用反向投影backproj

使用Python实现图像LBP特征提取的操作方法

《使用Python实现图像LBP特征提取的操作方法》LBP特征叫做局部二值模式,常用于纹理特征提取,并在纹理分类中具有较强的区分能力,本文给大家介绍了如何使用Python实现图像LBP特征提取的操作方... 目录一、LBP特征介绍二、LBP特征描述三、一些改进版本的LBP1.圆形LBP算子2.旋转不变的LB

OpenCV图像形态学的实现

《OpenCV图像形态学的实现》本文主要介绍了OpenCV图像形态学的实现,包括腐蚀、膨胀、开运算、闭运算、梯度运算、顶帽运算和黑帽运算,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起... 目录一、图像形态学简介二、腐蚀(Erosion)1. 原理2. OpenCV 实现三、膨胀China编程(

通过Python脚本批量复制并规范命名视频文件

《通过Python脚本批量复制并规范命名视频文件》本文介绍了如何通过Python脚本批量复制并规范命名视频文件,实现自动补齐数字编号、保留原始文件、智能识别有效文件等功能,听过代码示例介绍的非常详细,... 目录一、问题场景:杂乱的视频文件名二、完整解决方案三、关键技术解析1. 智能路径处理2. 精准文件名