笔记《WebGL编程指南》学习0
WebGL编程指南学习,界明城,2022-3-1
0. WebGL编程,从入坑到放弃
- 知识路径
- 《WebGL编程指南》环境搭建
- WebGL编程范式
0.1 知识路径
- Level 1:了解计算机图形学,尤其是渲染相关概念
- Level 2:用过OpenGL,知道
0.2 《WebGL编程指南》环境搭建
0.2.1 TODO
对本书的评价,将在整本书读完后更新
0.2.2 代码运行环境
- 本机运行环境:MacOS Monterey 12.2.1
- 编辑器:VS Code
- 本书对WebGL特性的支持:WebGL 1.0 API
- 本书提供的库文件:
- webgl-utils.js: 主要作用是获取WebGL运行的浏览器的上下文
- webgl-debug.js:主要提供对WebGL代码,尤其是着色器代码的调试功能
- cuon-utils.js:作者自定义的获取WebGL上下文的函数,还有一些着色器常用函数
- cuon-matrix.js:作者自定义的一些矩阵运算函数,其他数学相关的东西
- 库文件下载地址:链接: https://pan.百度.com/s/1PBWKxVcl_Kv7iUVf8RtfoQ 密码: cocs
- 支持的浏览器:建议Chrome
0.3 WebGL编程范式
0.3.1 WebGL软件结构
0.3.2 WebGL应用范式
HTML5引入的标签使JavaScript动态绘制图形成为可能
编程范式
- HTML文件:
- 建立一个,使绘制图形成为可能
- 调用JavaScript文件,在JavaScript文件中使用WebGL进行渲染
- JavaScript程序:
- 获取元素
- 获取WebGL绘图上下文(即告诉WebGL绘制的区域是)
- OpenGL渲染管线
0.3.3 WebGL网页的渲染管线
TODO
0.3.4 WebGL 渲染管线
- 执行JavaScript程序,调用WebGL相关方法
- 执行WebGL相关方法
- 逐顶点操作——顶点着色器
- 逐片元操作——片元着色器
- 渲染到颜色缓冲区
- 显示
0.3.5 WebGL程序结构
- 获取元素
- 获取WebGL绘图上下文
- 初始化着色器
- 设置颜色缓冲区(也就是)背景色
- 绘制
JavaScript程序
// 从HTML获取canvas元素
var canvas = document.getElementById('webgl');
// 获取WebGL上下文
var gl = getWebGLContext(canvas);
if (!gl){
console.log('获取不到WebGL上下文');
return;
}
// 初始化着色器
if(!initShaders(gl, VSHADER_SOURCE, FSHADER_SOURCE)){
console.log('初始化着色器失败');
return;
}
// 设置颜色缓冲区背景
gl.clearColor(0.0, 0.0, 0.0, 1.0)
// 清除颜色缓冲区
gl.clear(gl.COLOR_BUFFER_BIT)
// 绘制
gl.drawArrays(gl.POINTS, 0, 1)
着色器Shader(字符串形式写在JavaScript里)
var VSHADER_SOURCE = ''
var FSHADER_SOURCE = ''
0.3.6 初始化着色器
initShaders()
的细节:
- 根据获取的WebGL上下文、顶点着色器与片元着色器,创建一个连接好的程序对象的实例(Program)
- 告诉WebGL渲染引擎,要使用这个程序对象
- 获取WebGL上下文(告诉WebGL程序对象是谁)
创建程序对象的方法
- 实例化着色器对象
- 实例化程序对象
- 把着色器分配给程序对象
- 连接着色器
- 检查连接
function createProgram(gl, vshader, fshader){
// 实例化着色器对象
var vertexShader = loadShader(gl, gl.VERTEX_SHADER, vshader);
var fragmentShader = loadShader(gl, gl.FRAGMENT_SHADER, fshader);
...
// 创建程序对象
var program = gl.createProgram();
...
// 把着色器分配给程序对象
gl.attachShader(program, vertexShader);
gl.attachShader(program, fragmentShader);
// 连接着色器
gl.linkProgram(program);
// 检查连接
var linked = gl.getProgramParameter(program, gl.LINK_STATUS);
...
return program;
}
加载着色器的方法
- 声明着色器对象
- 为其分配着色器源代码
- 编译着色器
- 检查着色器的编译状态
function loadShader(gl, type, source){
// gl - WebGL上下文;type - 着色器类型;source - 着色器源代码
// 创建着色器对象
var shader = gl.createShader(type);
...
// 设置着色器的源代码
gl.shaderSource(shader, source);
// 编译着色器
gl.compileShader(shader);
// 检查着色器的编译状态
var compiled = gl.getShaderParameter(shader, gl.COMPILE_STATUS);
...
return shader;
}
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhicibbi
系列文章
更多
-
Error in na.fail.default(list(Purchase = c(“CH“, “CH“, “CH“, “MM“, “CH“, : missing values in obj
-
[CTF] python的pip源更改和常用python库
-
LLaMA-2进行微调的FreeWilly2开源语言模型
-
首次vue加载页面,请求两个接口,后者接口需要依赖前者接口的数据去请求接口。
-
MobaXterm 连接服务器过指定连接数量默认14个Warning: you have reached the maximum number of saved sessions for the
-
C# excel的数据导入到数据库 数据库数据导出excel
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
excel图片置于文字下方的方法
PHP中文网 06-27 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
微信提示登录环境异常是什么意思原因
PHP中文网 04-09 -
微信运动停用后别人还能看到步数吗
PHP中文网 07-22 -
微信人名旁边有个图标有什么用
PHP中文网 03-11