当前位置: 首页 > news >正文

Opengl纹理采样

纹理采样(Texture Sampling)详解

纹理采样 是在着色器中使用纹理坐标,从纹理中获取对应像素颜色值(texel)的过程。它是计算机图形学中实现真实感图像、细节贴图、光照等效果的核心技术之一。


🧱 基本概念

  • 纹理(Texture):一个图像,通常为 2D,但也可以是 1D、3D、立方体图等。

  • 纹理坐标(UV坐标):二维坐标,通常范围在 [0.0, 1.0],用于表示纹理图像中的位置。

  • 采样(Sampling):在着色器中根据纹理坐标提取纹理颜色的过程。


✅ GLSL 中常用采样函数

texture()

这是 GLSL 中最常用的采样函数:

vec4 texture(sampler2D tex, vec2 uv);
  • sampler2D tex:纹理采样器变量,链接到 OpenGL 纹理单元

  • vec2 uv:纹理坐标,通常传自顶点着色器

  • 返回值:一个 vec4,表示纹理该坐标位置的 RGBA 颜色值


🧪 示例代码(片元着色器)

uniform sampler2D uTexture; // 传入的纹理
in vec2 vTexCoord;          // 顶点着色器传来的纹理坐标
out vec4 fragColor;void main() {fragColor = texture(uTexture, vTexCoord); // 执行纹理采样
}

🔍 精度与插值方式(由 OpenGL 控制)

当纹理坐标 不精确对齐某个像素 时,OpenGL 会用以下方式决定采样结果:

设置类型参数值说明
过滤方式(Filter)GL_NEAREST选择最近的 texel
GL_LINEAR插值多个 texel
mipmap 过滤GL_LINEAR_MIPMAP_LINEAR用于缩放时平滑采样


🔄 与纹理环绕模式配合

当 UV 坐标超出 [0,1] 时,配合纹理环绕模式决定采样行为:

  • GL_REPEAT:重复纹理

  • GL_CLAMP_TO_EDGE:取边缘像素

  • GL_MIRRORED_REPEAT:镜像重复


📚 进阶采样函数(仅在特定场景使用)

函数名描述
textureLod()指定 mipmap 层级进行采样
textureProj()投影采样,用于阴影映射等
texelFetch()以整数像素索引访问纹理,不进行插值
textureGrad()指定自定义导数采样,用于高质量 mipmap 控制


📌 注意事项

  • 使用采样器时,需在 CPU 侧绑定纹理到对应的纹理单元:

    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D, textureID);
    glUniform1i(glGetUniformLocation(shaderID, "uTexture"), 0); // 对应 GL_TEXTURE0
    

  • 着色器中只能采样在片元着色器、几何着色器、计算着色器等阶段。

  • 必须启用对应纹理对象,并设置好环绕和过滤参数。

注:本文参考自chatgpt

http://www.xdnf.cn/news/697951.html

相关文章:

  • 【C语言练习】069. 使用goto语句实现复杂的跳转
  • XCTF-web-mfw
  • socket编程预备
  • 基于DFT码本的波束方向图生成MATLAB实现
  • 【AUTOSAR OS 】保护功能解析:从原理到应用与源代码解析(上篇)
  • MySQL复杂查询与Union操作
  • SQLite数据库取证分析
  • 用 Python 构建跨平台前端界面:深入解读 Flet 库
  • windows本地虚拟机上运行docker-compose案例
  • QT开发技术 【元对象系统反射机制 】三
  • 中阳视角:如何通过波动率识别市场节奏变化
  • Android Zygote通信协议深度解析
  • c++lambda表达式
  • Linux文件传输——curl命令详介
  • SAR ADC 比较器的offset 校正
  • 西门子SCL语言编写两台电机正反转控制程序,并涵盖从选型、安装到调试全过程的详细步骤指南(上)
  • vs中添加三方库的流程
  • 根据基因名称自动获取染色体上的位置
  • STM32 ADC工作原理与配置详解
  • 渐进够增强和优雅降级的区别
  • 8.5 Q1|中山大学CHARLS发文 | 甘油三酯葡萄糖-腰身高比指数与中国中老年人心血管疾病的关系
  • (8)python+ selenium自动化测试-获取当前页面的title
  • MCU与CPU时钟概念详解:从基础到面试高频问题
  • 第三届宁波技能大赛网络安全赛项样题
  • uniapp-商城-73-shop(6-商品列表,步进器添加数据到购物车,步进器数据同步(深度监听))
  • STM32定时器的死区时间(DTR)如何计算
  • Cancer Cell|从临床病例到AI空间组学 | 空间生物标志物如何精准预测HER2阳性乳腺癌ADC疗效?
  • 瑞数6代jsvmp简单分析(天津电子税x局)
  • B2146 Hermite 多项式
  • 15.为什么HashMap的容量是2的幂次方