WebGL可视化基础(一)

WebGL可视化基础(一)

图形是如何绘制的

一个通用的计算机图形系统主要包括6个设备,分别是输入设备/中央处理单元/图形处理单元/存储器/帧缓存/输出设备
在这里插入图片描述

首先,数据经过CPU处理,转换为特定结构的几何信息,然后将这些信息送到GPU中进行处理。在GPU中要经过两个步骤生成光栅信息。这些光栅信息会输出到缓存中,最后渲染到屏幕上。

在这里插入图片描述

这个绘图过程主要做了2件事情,一是对给定的数据结合绘图的场景要素(例如相机/光源/遮挡物体等等)进行计算,最终将图形变为屏幕空间的2D坐标。二是为屏幕空间的每个像素点进行着色,把最终完成的图形输出到显示设备上。这整个过程是一步一步进行的,前一步的输出就是后一步的输入,所以我们也把这个过程叫做渲染管线(RenderPipelines)

如何用WebGL绘制三角形

浏览器提供的WebGL API是IpenGL ES的 JavaScript绑定版本,它赋予开发者操作GPU的能力。

  1. 创建WebGL 上下文
  2. 创建WebGL 程序
  3. 将数据存入缓冲区
  4. 将缓冲区的数据读取到GPU
  5. GPU执行WebGL程序,输出结果

步骤一: 创建WebGL上下文

	const canvas = document.querySelector("canvas");
	const gl = canvas.getContext("webgl");

步骤二: 创建WebGL 程序

  • 这里需要创建一个WebGLProgram 对象,它是给GPU最终运行着色器的程序。

  • 这里首先要编写两个着色器(Shader)。

const vertex = `
	attribute vec2 position;
	
  void main() {
		gl_PointSize = 1.0;
    gl_Position = vec4(position. 1.0, 1.0)
  }
`;

const fragment = `
  precision mediump float;
	
	void main() 
  {
    gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
  }
`;

​ 为什么需要两个着色器呢?这就需要理解顶点和图元的概念。在绘图的时候,WebGL是以顶点和四个图元来描述图形几何信息的。顶点就是几何图形的顶点,比如,三角形有三个顶点,四边形有四个顶点。图元是WebGL可直接处理的图形单元,由WebGL的糊涂模式决定,有点/线/三角形等等。

​ 所以,顶点和图元是绘图过程中必不可少的。因此,WebGL绘制一个图形的过程,一般都需要用到两段着色器。一段叫顶点着色器负责处理图形的顶点信息,另一段叫片元着色器负责处理图形的像素信息。

​ 我们可以把顶点着色器理解为处理顶点的GPU程序代码。他可以改变顶点的信息(如顶点的坐标/法线方向/材质等等),从而改变我们绘制出来的图形的形状或者大小等

​ 顶点处理完之后,WebGL就会根据顶点和绘图模式指定的图元,计算出需要着色的像素点,然后对它们进行执行片元着色器程序。

​ 这里其实很好理解,顶点是为了帮助我们绘制出图形,图元是为了帮助我们上色。

  • 开始绘制三角形
// 创建成shader对象
const vertexShader = gl.createShader(gl.VERTEX_SHADER);
gl.shaderSource(vertexShader, vertex);
gl.compileShader(vertexShader);

const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
gl.shaderSource(fragmentShader, fragment);
gl.compileShader(fragmentShader);

// 创建WebGLProgram对象,并且将这两个shader关联到WebGL程序上。
// 再将WebGL程序链接到WebGL上下文对象上。
const program = gl.createProgram();
gl.attachShader(program, vertexShader);
gl.attachShader(program, fragmentShader);
gl.linkProgrram(program);

// 最后通过useProgram 选择启动这个WebGLPrame对象。
gl.useProgram(program);

// 接下来将数据存入缓冲区,也就是将数据送入GPU
// 定义三角形的三个顶点
const points = new Float32Array([
  -1, -1,
  0, 1,
  1, -1,
]);

// 将数据送入WebGL的缓冲区 三步走,创建一个缓存对象,绑定为当前操作对象,再把当亲的数据写入缓存对象。
const bufferId = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, bufferId);
gl.bufferData(gl.ARRAY_BUFFER, points, gl.STATIC_DRAW);

// 将缓存区数据读取到GPU,把数据绑定给顶点着色器的position变量
// 在GLSL中, attribute 表示声明变量,vec2是变量的类型,它表示一个二维向量,position是变量名。

const vPosition = gl.getAttribLocation(program, 'position');
// 获取顶点着色器中的position
gl.vertexAttribPointer(vPosition, 2, gl.FLOAT, false, 0, 0); //给变量设置长度和类型
gl.enableVertextAttribArray(vPosition); //激活变量

// 执行着色器程序完成绘制
gl.clear(gl.COLOR_BUFFER_BIT);
gl.drawArrays(gl.TRIANGLES, 0, points.length / 2);

// 至此我们的三角形就绘制完成了
  • WebGL 绘图过程流程图
    请添加图片描述

参考文章

极客时间:跟月影学可视化

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: three.js可视化企业实战WebGL课程源码是用于教学目的的一个完整的项目源码,旨在帮助学习者通过实践来理解和掌握three.js库在WebGL渲染中的应用。这个课程的源码可以分为以下几个部分。 首先,源码包含了基础的HTML和CSS文件,这些文件用于创建网页和样式。通过这些文件,学习者可以了解如何在网页上创建并布局three.js可视化场景。 其次,源码中包含了JavaScript文件,这些文件是用来编写与three.js相关的代码。这些文件包含了创建场景、创建对象、渲染场景以及添加交互等代码。通过这些代码,学习者可以学习如何使用three.js库创建三维对象、设置材质和光照效果、应用纹理等。 此外,源码还包含了一些示例数据,这些数据用于在可视化场景中展示不同的效果和交互。学习者可以通过源码中的示例数据进行实践,并根据自己的需求进行修改和拓展。 最后,源码中的文件夹结构和一些配置文件是为了帮助学习者更好地组织和管理代码。这些文件夹和配置文件包含了场景文件、模型文件、纹理文件等。学习者可以参考这些文件夹结构和配置文件的使用,来组织自己的项目。 通过学习和理解这个课程的源码,学习者可以掌握three.js在WebGL渲染中创建可视化场景的技巧和方法。学习者可以根据自己的实际需求,修改和拓展源码,实现自己想要的效果。这个课程的源码可以作为学习和实践的参考,帮助学习者更好地掌握three.js库的应用。 ### 回答2: Three.js是一个用于创建和展示3D图形的JavaScript库。它提供了丰富的功能和工具,可以帮助开发者轻松地在Web浏览器中呈现3D模型和动画。 Three.js可视化企业实战WebGL课程源码是一个包含了使用Three.js实现可视化效果的项目代码。这个课程源码涵盖了一系列的教学示例和实践案例,旨在教授如何使用Three.js创建和定制3D图形。 通过学习这个课程源码,你会学到如何创建场景、添加摄像机、加载和渲染3D模型、应用材质和纹理、实现光照效果、处理用户交互等一系列的基础和高级的Three.js技术。 此外,这个课程源码还包含了许多实战应用的示例,如可视化数据、建筑模型展示、游戏开发等。这些实战案例可以帮助你更好地理解如何将Three.js应用于实际应用中,同时也为你提供了参考和灵感,以便你在自己的项目中进行扩展和创新。 通过学习Three.js可视化企业实战WebGL课程源码,你将掌握一种强大的工具和技术,帮助你在Web平台上创建出令人惊叹的3D视觉效果。无论你是从事Web开发还是游戏开发,这个课程源码都将帮助你提高你的技术水平,并让你的项目更加生动和吸引人。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MaxLoongLvs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值