资讯动态

The Book of Shaders 词汇总解:GLSL 中 textureCube 立方体贴图采样函数详解

发布时间:2026/10/16 2:55:31 来源:尧图企业网站定制
【免费下载链接】thebookofshadersStep-by-step guide through the abstract and complex universe of Fragment Shaders.项目地址https://gitcode.com/gh_mirrors/th/thebookofshaders点击查看免费下载本文基于 The Book of Shaders 词汇总Glossary中的 textureCube 词条 展开。词汇总收录于仓库的glossary/目录按术语建立子目录、以README.md作为词条正文并通过 glossary/index.php 动态渲染。读完本篇你将完整掌握textureCube()的两个函数签名、sampler/coord/bias三个参数的确切含义、bias参与 MIP 细节层次level of detail计算的时机以及它与 2D 采样函数texture2D()在坐标模型上的本质差异。一、textureCube 是做什么的词条开头给出的功能定义只有一句话Retrieving texels from a texture从纹理中获取纹素 / 取色textureCube是 GLSL ES 中的纹理查询函数Texture Lookup Function。它接收一个立方体贴图采样器和一个三维坐标返回该坐标处纹素的颜色值。词汇总在 glossary/README.md 的 TEXTURE LOOKUP FUNCTIONS 主题分类下仅收录了两个查询函数texture2D()与textureCube()两者互为姊妹函数。词条原文英文 glossary/textureCube/README.md的描述可以概括为三点函数返回一个纹素即给定坐标处纹理的颜色值第一个入参类型是samplerCube纹理绑定所在的 uniform 采样器第二个入参类型是vec3要查询的纹素的三维坐标存在一个可选的第三个float参数bias。与texture2D接收vec2的 UV 平面坐标不同textureCube接收的是vec3方向向量——这也是立方体采样最核心的设计它不是在第几张图的第几个像素而是从立方体中心朝哪个方向看出去。二、函数声明词条给出的两个签名如下vec4 textureCube(samplerCube sampler, vec3 coord) vec4 textureCube(samplerCube sampler, vec3 coord, float bias)两个签名都以vec4返回前三个分量.rgb是纹理颜色第四个分量.a是透明度分量值与纹理存储精度一致通常落在 0.0 到 1.0 区间。这一点在本书第 15 章讲 2D 纹理时有明确印证图像被加载为sampler后忘了 255 这种悲伤的字节值通道全部变成 0.01.0 的连续浮点值见 15/README.md。第一个签名是最常用形式第二个签名在 MIP 链场景下额外暴露了bias调节旋钮下面分参数细讲。三、参数逐项解析3.1sampler绑定纹理的采样器词条原文samplerspecifies the sampler to which the texture from which texels will be retrieved is bound. sampler指定从其中获取纹素的那张纹理所绑定的采样器。即一个uniform samplerCube变量。shader 内部看不到图像数据本身CPU 端负责把图像上传到 GPU 并关联到某个纹理单元再把该 uniform 传进 shader。本书第 15 章对 2D 纹理的说明同样强调了这一点这一切发生在 shader 之外All that happens outside the shadershader 拿到的只是一个uniform sampler句柄。对应的 shader 端声明形如uniform samplerCube u_cubeTex; // 由宿主程序绑定立方体贴图顺带说明词汇总中 glossary/samplerCube/README.md 词条目前只是空骨架仅有 Declaration / Parameters / Description 等标题无正文因此samplerCube类型的语义需要结合textureCube词条本身来理解——它本质上就是绑定了一张 6 面立方体贴图的 uniform 句柄。3.2coord三维采样坐标词条原文coordspecifies the texture coordinates at which texture will be sampled. coord指定将要在何处对纹理进行采样的纹理坐标。对textureCube而言这个vec3坐标的几何含义是从立方体中心出发的方向向量。硬件会取该向量三个分量中绝对值最大的分量决定视线穿入哪一面x/-x/y/-y/z/-z六个面之一再将其余两个分量除以该分量把坐标归一化到所选面的 [-1, 1] 范围内取纹素。因此坐标的绝对长度并不重要方向才重要(0.5, 0.5, 0.5)与(1.0, 1.0, 1.0)指向同一个纹素这也是为什么经典用法里可以直接用视角向量或光线方向vec3作为坐标例如uniform samplerCube u_cubeTex; void main() { // dir 是任意方向向量如视线方向、法线方向 vec4 color textureCube(u_cubeTex, dir); gl_FragColor color; }这个方向即坐标的模型正是天空盒skybox、环境反射等效果的实现基础给每个像素一个方向就能查回包围盒该方向的天空颜色。3.3biasMIP 计算时的可选偏置词条原文biasspecifies an optional bias to be applied during level-of-detail computation. bias指定在细节层次LOD计算期间要应用的可选偏置。描述段落进一步说明了它的作用时机There is an additional third input parameter of the typefloat. After calculating the appropriate level of detail for a texture with mipmaps the bias is added before the actual texture lookup operation is executed. 存在一个额外的第三个float类型入参。对于带 MIP 纹理在计算出合适的细节层次后bias 会在实际执行纹理查询操作之前被加上。即bias的加入顺序是先由硬件根据采样坐标计算出 MIP 层级 → 再叠加bias→ 最后按修正后的层级取纹素。其实际意义bias 0向更低分辨率的 MIP 层偏移纹理显得更模糊/更平滑常用于远处物体或防止走样闪烁bias 0向更高分辨率的 MIP 层偏移保留更多细节若纹理没有 MIP 链bias不参与层级选择。这与texture2D词条 glossary/texture2D/README.md 中bias的定义完全一致——两个查询函数共享同一套 bias 语义只是坐标维度不同vec2vsvec3。四、与 texture2D 的对比同一个采样范式两种坐标空间词汇总把texture2D和textureCube并列在同一分类下两者See Also互相指引用。对比两张签名即可看出差异的边界// 2D平面 UV 坐标 vec4 texture2D(sampler2D sampler, vec2 coord) vec4 texture2D(sampler2D sampler, vec2 coord, float bias) // Cube三维方向坐标 vec4 textureCube(samplerCube sampler, vec3 coord) vec4 textureCube(samplerCube sampler, vec3 coord, float bias)维度texture2DtextureCube采样器类型sampler2DsamplerCube坐标类型vec20.01.0 归一化平面坐标vec3方向向量长度无关纹理结构单张图像6 面立方体bias 语义相同LOD 计算后叠加相同LOD 计算后叠加返回类型vec4RGB alphavec4RGB alpha典型用途图像后处理、纹理贴图天空盒、环境反射本书第 15 章 15/README.md 对 2D 纹理坐标的讲解是理解 Cube 版坐标系换了维度的最佳铺垫纹理坐标与我们一直使用的归一化空间坐标完美匹配取值在 0.0 到 1.0 之间。texture2D的vec2坐标正是这种归一化平面坐标而textureCube跳出了平面 UV范式改用方向向量寻址立方体的六个面。仓库中第 15 章的最小 2D 采样示例 15/texture.frag 展示了完整的采样范式可视为textureCube的2D 版本模板void main () { vec2 st gl_FragCoord.xy/u_resolution.xy; vec4 color vec4(st.x,st.y,0.0,1.0); color texture2D(u_tex0,st); gl_FragColor color; }把其中的vec2 st换成一个vec3方向、把texture2D(u_tex0, st)换成textureCube(u_cubeTex, dir)就得到了立方体采样的最小骨架。五、平台限制iOS 上只能在片段着色器中采样词条末尾保留了平台约束说明原文 Side noteOn iOS devices texture lookup functionality is only available in the fragment shader. 在 iOS 设备上纹理查询功能仅在片段着色器中可用。这意味着在 iOS 的 GLSL ES 实现中顶点着色器里不能调用textureCube或任何纹理查询函数。需要纹理结果的逻辑如按方向预取环境色再传给片段着色器必须在片段阶段完成或依赖其他数据通路。这条限制来自词汇总的明确陈述属于移动端移植立方体贴图效果时的首要检查项。六、在词汇总中的位置与延伸阅读词条正文英文glossary/textureCube/README.md乌克兰语版glossary/textureCube/README-ua.md越南语版glossary/textureCube/README-vi.md词汇总入口与主题分类glossary/README.mdTEXTURE LOOKUP FUNCTIONS 小节列有texture2D()与textureCube()渲染入口glossary/index.php通过 Parsedown 将词条 Markdown 渲染为网页姊妹词条glossary/texture2D/README.md采样器类型占位词条glossary/samplerCube/README.md、glossary/sampler2D/README.md2D 纹理实操章节15/README.md纹理上传、u_tex0Resolution宽高比修正、vec2连续插值特性七、小结textureCube(sampler, coord[, bias])是 GLSL ES 中针对立方体贴图的纹素查询函数sampler是被绑定纹理的samplerCubeuniformcoord是决定采样方向的vec3向量长度无关分量绝对值最大者决定命中面可选的bias在 MIP 层级计算完成之后、实际取色之前叠加用于主动控制细节层次。它与texture2D共享返回vec4、共享 bias 语义唯一根本区别是把平面 UV 坐标换成了三维方向坐标——这也正是天空盒与环境反射类效果的底层寻址方式。同时需注意词条声明的平台约束iOS 上纹理查询只在片段着色器中可用。赞分享【免费下载链接】thebookofshadersStep-by-step guide through the abstract and complex universe of Fragment Shaders.项目地址https://gitcode.com/gh_mirrors/th/thebookofshaders点击查看免费下载相关推荐The Book of Shaders 词汇表精读GLSL smoothstep() 平滑 Hermite 插值函数The Book of Shaders 词汇表精读GLSL smoothstep 平滑 Hermite 插值函数 本文围绕 The Book of ShadeThe Book of Shaders 术语表:GLSL tan() 正切函数详解The Book of Shaders 术语表:GLSL tan 正切函数详解 本文基于 The Book of Shaders 术语表 glossary 中的GLSL step() 函数详解The Book of Shaders 中的阶梯函数与阈值控制GLSL step 函数详解The Book of Shaders 中的阶梯函数与阈值控制 step 是 GLSL 内置的硬件加速比较函数通过比较 x 与上一篇10分钟上手Pup从auth login到第一条监控命令新手避坑清单下一篇k-skill 技能解析saramin-talent-search——사람인 인재풀登录会话中的候选人检索、评分与付费阅读前短名单构建创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑