Three.js中文网 Three.js中文网
首页
免费视频
系统课 (opens new window)
  • Three.js基础课程
  • Vue3+Threejs 3D可视化
  • Threejs进阶课程
  • 展厅3D预览漫游
  • Threejs Shader
  • Blender建模基础
  • 文章
WebGPU教程
  • WebGL教程
  • ES GLSL着色器语言
  • WebGL教程(旧版本)
3D案例
  • 本站部署(打开快) (opens new window)
  • 原官网文档 (opens new window)
首页
免费视频
系统课 (opens new window)
  • Three.js基础课程
  • Vue3+Threejs 3D可视化
  • Threejs进阶课程
  • 展厅3D预览漫游
  • Threejs Shader
  • Blender建模基础
  • 文章
WebGPU教程
  • WebGL教程
  • ES GLSL着色器语言
  • WebGL教程(旧版本)
3D案例
  • 本站部署(打开快) (opens new window)
  • 原官网文档 (opens new window)
Web3D系统课程视频
  • 1. 声明一个变量
  • 2. 声明一个常量const
  • 3. 数据类型—基本类型
  • 4. 数据类型-向量
  • 5. 数据类型-矩阵
  • 6. if-else语句和for语句
  • 7. 内置变量
  • 8. attribute、uniform、varying
  • 9. 顶点和片元着色器
  • 10. 取样器sampler2D
    • 11. 内置函数
    • 12. 着色器计算精度precision
    • 13. 函数
    • 14. 结构体
    • 15. discard舍弃片元
    • 16. 数组
    • 17. 预处理
    • ES GLSL着色器语言
    郭隆邦
    2026-05-22
    目录

    10. 取样器sampler2D

    # 取样器sampler2D

    WebGL在处理图片纹理编写片元着色器的时候,会通过sampler2D关键字声明一个纹理相关的变量,sampler2D和vec2、float表示一种数据类型,只不过sampler2D关键字声明的变量表示一种取样器类型变量,简单点说就是该变量对应纹理图片的像素数据。

    # 声明变量

    `uniform sampler2D u_Sampler;`
    

    在前面课程中讲解过,通过attribute关键字声明的顶点变量,需要通过javascript调用gl.vertexAttribPointer()等WebGL API传递attribute变量对应的顶点数据,对于片元着色器中表示图片像素数据的sampler2D变量,一样需要javascript调用gl.uniform1i()等WebGL API传递图像数据。所以sampler2D关键字声明变量的时候,需要使用uniform关键字进行修饰。

    # 内置函数texture2D

    WebGL着色器提供了内置函数texture2D,可以直接使用,通过texture2D函数,可以从纹理图像提取像素值,赋值给内置变量gl_FragColor

    // 采集纹素,逐片元赋值像素值
    gl_FragColor = texture2D(u_Sampler,v_TexCoord);
    
    <!-- 顶点着色器源码 -->
    <script id="vertexShader" type="x-shader/x-vertex">
      attribute vec4 a_Position;//顶点位置坐标
      attribute vec2 a_TexCoord;//纹理坐标
      varying vec2 v_TexCoord;//插值后纹理坐标
      void main() {
        //顶点坐标apos赋值给内置变量gl_Position
        gl_Position = a_Position;
        //纹理坐标插值计算
        v_TexCoord = a_TexCoord;
      }
    
    </script>
    <!-- 片元着色器源码 -->
    <script id="fragmentShader" type="x-shader/x-fragment">
      //所有float类型数据的精度是highp
      precision highp float;
      // 接收插值后的纹理坐标
      varying vec2 v_TexCoord;
      // 纹理图片像素数据
      uniform sampler2D u_Sampler;
      void main() {
        // 采集纹素,逐片元赋值像素值
        gl_FragColor = texture2D(u_Sampler,v_TexCoord);
      }
    </script>
    
    9. 顶点和片元着色器
    11. 内置函数

    ← 9. 顶点和片元着色器 11. 内置函数→

    Theme by Vdoing | Copyright © 2016-2026 豫ICP备16004767号-2
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式