在webgl中纹理有很多的用途,可以进行数据的保存、贴图等方面的用途。

下面我记录一下在webgl中,最简单纹理的使用,参考文章为一叶斋 | WebGL 纹理详解

本文使用图片也来自一叶斋 | WebGL 纹理详解 中demo提供的
1、首页创建顶点、片元着色器
const VERTEX = `attribute vec2 a_position;
varying vec2 vPos;
void main(){vPos = a_position;gl_Position = vec4(2.0 * a_position - 1.0, 0.0, 1.0);
}`const FRAGEMENT = `precision mediump float;
varying vec2 vPos;
uniform sampler2D u_img;
// uniform sampler2D tMap;
void main() {vec4 color =  texture2D(u_img, vPos*5.0);gl_FragColor = color;
}`
const vertexShader = gl.createShader(gl.VERTEX_SHADER)!;gl.shaderSource(vertexShader, VERTEX);gl.compileShader(vertexShader);const fragShader = gl.createShader(gl.FRAGMENT_SHADER)!;gl.shaderSource(fragShader, FRAGEMENT);gl.compileShader(fragShader);
2、创建程序
 const program = gl.createProgram()!;gl.attachShader(program, vertexShader);gl.attachShader(program, fragShader);gl.linkProgram(program);gl.useProgram(program);
3、创建缓冲区并传递顶点
const posBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, posBuffer);
gl.bufferData(gl.ARRAY_BUFFER,new Float32Array(positions),gl.STATIC_DRAW
);
4、获取位置信息并启用
const aPosition = gl.getAttribLocation(program, 'a_position');
gl.vertexAttribPointer(aPosition, 2, gl.FLOAT, false, 0, 0);
gl.enableVertexAttribArray(aPosition);
5、创建纹理绑定纹理
//加载图片
const img  = await loadImg(img_url)
const texture = gl.createTexture();
// 设置预处理函数,由于图片坐标系和WebGL坐标的Y轴是反的,这个设置可以将图片Y坐标翻转一下
gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);
// 激活指定纹理单元,WebGL有多个纹理单元,因此在Shader中可以使用多个纹理
gl.activeTexture(gl.TEXTURE0);
// 将纹理绑定到当前上下文
gl.bindTexture(gl.TEXTURE_2D, texture);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, img);
// 设置纹理的一些参数
// gl.TEXTURE_WRAP_S 纹理在X方向的包裹方式、
// 取值有gl.REPEAT、gl.MIRRORED_REPEAT、gl.CLAMP_TO_EDGE
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
// gl.TEXTURE_WRAP_T 纹理在Y方向的包裹方式、
// 取值有gl.REPEAT、gl.MIRRORED_REPEAT、gl.CLAMP_TO_EDGE
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
// 纹理缩小时过滤方式,可以取值为gl.LINEAR、gl.NEAREST
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
// 纹理方大时过滤方式,可以取值为gl.LINEAR、gl.NEAREST
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST )
// 解除纹理绑定
gl.bindTexture(gl.TEXTURE_2D, null);
6、绘制
gl.drawArrays(gl.TRIANGLE_FAN, 0, positions.length / 2);

图片素材来自一叶斋 | WebGL 纹理详解

webgl基础之纹理使用相关推荐

  1. WebGL学习之纹理盒

    原文地址:WebGL学习之纹理盒 我们之前已经学习过二维纹理 gl.TEXTURE_2D,而且还使用它实现了各种效果.但还有一种立方体纹理 gl.TEXTURE_CUBE_MAP,它包含了6个纹理代表 ...

  2. 【第二届青训营-寒假前端场】- 「WebGL基础」笔记

    Why WebGL / Why GPU? 现代的图像系统 The Pipeline GPU WebGL & OpenGL关系 WebGL绘图步骤 创建WebGL上下文 创建WebGL Prog ...

  3. JavaScript WebGL 基础概念

    引子 看了一个库的源码,里面用到了 WebGL ,就开始找 WebGL 的资料.发现相关的知识点很多,按照自己的理解习惯进行了整理记录. Origin My GitHub 简介 WebGL 是一个跨平 ...

  4. webgl 基础渲染demo_WebGL + ThreeJS 实现实时水下焦散 Part 1

    知乎视频​www.zhihu.com 采用 WebGL 和 ThreeJS 运行实时焦散运算,需要一点相关基础.本文主要介绍焦散的原理以及计算方法 原作者 https://github.com/mar ...

  5. js 判断支持webgl_「WebGL基础」:第一部分

    WebGL是一种基于OpenGL的浏览器内置3D渲染器,它可以让你在HTML5页面中直接显示3维内容. 在本教程中,我会介绍你使用此框架所需的所有基础内容. 介绍 开始学习之前,有几件事你是需要了解的 ...

  6. WebGL基础:着色器基础知识

    今天由字节跳动的"yancy"童鞋给大家重磅推出一篇WebGL的干货接下来让我们开启奇幻旅程,进入 3D 的世界. 本文作者:yancy 1. 认识3D 首先我们要介绍的是几个概念 ...

  7. 二维特征分类的基础_纹理特征1:灰度共生矩阵(GLCM)

    GLCM复习备用: 纹理分析是对图像灰度(浓淡)空间分布模式的提取和分析.纹理分析在遥感图像.X射线照片.细胞图像判读和处理方面有广泛的应用.关于纹理,还没有一个统一的数学模型.它起源于表征纺织品表面 ...

  8. 基于WebGL的球体纹理贴图实现全景展示

    1 绘制球体 1.1 将球面映射到二维平面 三维球面坐标与二维坐标系之间的映射关系如下: 归一化表示为: 1.2 离散化 将坐标系沿两轴划分多份,横轴每份宽度为δu,纵轴每份宽度为δv,下图便可以确定 ...

  9. webgl学习六 纹理贴图

    <html><head><title>纹理贴图</title><script type="text/javascript" s ...

  10. webgl叠加多重纹理

     效果:有点像变装,因为没有变装的图片,所以采用了一张图分两半来代替,本文为了突出效果,给下半部分加了个移动,这样就可以体现纹理的叠加效果了,所以在制作图片的时候背景应当设置为黑色,这样就不会因为叠加 ...

最新文章

  1. 计算机教案word格式模板,用自定义模板编辑教案
  2. 为什么CSS使用假元素?
  3. 安卓手机管理器_@你,请查收这款最强的安卓文件管理器
  4. nyoj-Human Gene Functions
  5. 《软件工程》实验报告——需求获取与分析
  6. 02.pipeline常用processor
  7. Java Web Token - JWT
  8. tsv文件导oracle窜列,TSV(tsv文档怎么转换excel)
  9. 高焕堂Android架构技术全集
  10. 【MDVRP】基于matlab遗传算法求解多仓库车辆路径规划问题【含Matlab源码 1481期】
  11. 2019大数据分析软件介绍
  12. 产品经理面试必问问题与答题模板
  13. 20种PLC对应Modbus地址表
  14. 有 4 名同学到一家公司参加三个阶段的面试
  15. 阿里云 root ssh远程登录 及 普通非root用户 ssh远程登录 Ubuntu1604
  16. python制作一个简单的“一键死机”白屏小程序
  17. 记录手机root后安装xposed框架后变砖无法开机的问题
  18. mysql查询出当前年份的12个月
  19. element-plus 源码学习——radio
  20. Arduino与Proteus仿真实例-ULN2003驱动直流电机仿真

热门文章

  1. Vue弹框中使用tinymce只有第一次可使用
  2. 真无线蓝牙耳机怎么挑?双11发烧友专属高性能蓝牙耳机推荐
  3. 11.27 愚公家族多少人僵尸大战加特林
  4. 升级 gmp linux,升级gcc,安装依赖库gmp-4.3.2出现错误,求大神指点
  5. java 实例,为每一行的输入自动编号
  6. Matlab实现图像处理并以xml格式存入文件
  7. 2017-2018-1 201553334 实验四 外设驱动程序设计
  8. Windows电脑便签如何新增文件夹?
  9. B. Array Cloning Technique
  10. jqxtreegrid使用方式