IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> WebGLl编程指南01-着色器与常用API -> 正文阅读

[游戏开发]WebGLl编程指南01-着色器与常用API

前言

本系列是在学习WebGL编程指南中,做出的个人总结

Canvas

1.1 什么是 Canvas

Canvas 即画布,顾名思义就是绘画的地方,Canvas 在 HTML5 中被定义为一个标签,从此前端开发者可以通过这个标签和脚本语言(JavaScript)尽情发挥自己的想象力,Canvas 画布不但可以绘制二维图形,同样可以绘制三维图形。

1.2 获取 canvas 对象

实际上就是通过获取 dom 的方式获取 canvas 对象

<body>
  <!--canvas标签创建一个宽高均为400像素蓝色背景的画布-->
  <canvas id="webgl" width="400" height="400" style="background-color: blue"></canvas>

  <script>
    //通过getElementById()方法获取canvas画布
    var canvas = document.getElementById('webgl');
  </script>
</body>

1.3 获取 canvas 上下文

通过 getCentext 上下文

//获取上下文-二维
const gl = canvas.getContext("2d");

//获取上下文-三维
const gl = canvas.getContext("webgl");

着色器

webgl 依赖于一种着色器(shader)的绘图机制进行绘图,它提供了灵活且强大的绘图方式,它很强大,但同时也很复杂,着色器是 WebGL 的一项重要的和兴机制。在编码过程中它是以字符串的形式嵌入到 JavaScript 代码中。

2.1 着色器分类

webgl 有两种着色器,顶点着色器(Vertex shader) 和 片元着色器(Fragment shader)

  • 顶点着色器用来描述顶点的位置和大小
  • 片元着色器用来描述顶点的颜色

2.2 着色器初始化

在这里你需要知道,WebGL 程序包括运行在浏览器中的 JavaScript 程序和运行在 WebGL 系统的着色器程序这两部分,着色器程序以字符串的形式通过 Javascript 代码传给 WebGL 系统。简单说明一下,这里的以字符串形式体现的着色器程序是使用 着色器语言(GLSL ES) 编写的

2.3 着色器预言类型

这里提及着色器语言的数据类型,是因为该语言是强类型的编程语言

  • float 表示浮点数
  • vec4 表示四个浮点数组成的矢量
    由四个分量组成的矢量被称为 齐次坐标,齐次坐标(x,y,z,w)等价于三维坐标(x/w,y/w,z/w)即你想把一个三维坐标转换为齐次坐标时,只需要给它添加一个分量,值为 1.0

2.4 顶点着色器初始化

顶点着色器的初始化实际就是给它的内置变量赋值,它有两个内置变量分别是 gl_Position 和 gl_PointSize

  • gl_Position vec4 表示顶点的位置
  • gl_PointSize float 表示点的尺寸(像素 px)

注意:gl_Position 变量必须被赋值,否则着色器无法正常工作,gl_PointSize 不是必须的,缺省时着色器默认取值 1.0

//顶点着色器
const VSHADER_SOURCE = `void main(){ 
  //设置顶点位置(坐标原点)
   gl_Position =vec4(0.0,0.0,0.0,1.0);
  //设置点的大小(30px)
   gl_PointSize=30.0;
   }`;

2.5 片元着色器初始化

顶点着色器控制点的位置和大小,片元着色器控制点的颜色,片元着色器将点的颜色赋值给内置变量 gl_FragColor

  • gl_FragColor vec4 指定片元颜色(RGBA 格式)
//片元着色器
var FSHADER_SOURCE = `void main(){
  //设置片元颜色(红色)
   gl_FragColor = vec4(1.0,0.0,0.0,1.0);
  }\n;`;

3.部分webgl API说明

3.1设置背景色gl.clearColor()

在调用gl.clear清空颜色缓冲区颜色时,指定的背景颜色

函数功能:指定绘图区域的背景色
-----------------------------------------------------------
调用示例:gl.clearColor(red, green, blue, alpha)
-----------------------------------------------------------
参数		
			red		指定红色值(从0.0到1.0)
			green	指定绿色值(从0.0到1.0)
			blue	指定蓝色值(从0.0到1.0)
			alpha	指定透明度值(从0.0到1.0)
			小于0.0的值会被截断为0.0,大于1.0的值会被截断为1.0
-----------------------------------------------------------			
返回值		无
-----------------------------------------------------------
错  误		无	

3.2清空绘图区gl.clear()

清空绘图区实际上是清空颜色缓冲器,在Webgl中缓冲区有三类:颜色缓冲器、深度缓冲区、模板缓冲区

函数功能:将指定缓冲区设置为预定的值-预定的值指的是gl.clearColor()设置的值
-----------------------------------------------------------------------------------
调用示例:gl.clear(buffer)
-----------------------------------------------------------------------------------
参数		
			buffer					指定待清空的缓冲区,位操作位|可以用来指定多个缓冲区
			gl.COLOR_BUFFER_BIT		代表清空颜色缓冲区
			gl.DEPTH_BUFFER_BIT		代表清空深度缓冲区
			gl.STENCIL_BUFFER_BIT	代表清空模板缓冲区
-----------------------------------------------------------------------------------			
返回值		无
-----------------------------------------------------------------------------------
错  误		INVALID_VALUE			缓冲区不是以上三种类型		

3.3绘制操作gl.drawArrays()

建立了着色器之后,我们就要进行绘制了,gl.drawArrays()是一个强大的函数,可以用来绘制各种图形,该函数的规范如下所示

函数功能:执行顶点着色器,按照mode参数指定的方式绘制图形
--------------------------------------------------------------------------
调用示例:gl.drawArrays(mode, first, count)
--------------------------------------------------------------------------
参数		
			mode		指定绘制的方式,可以接收以下常量符号:
						gl.POINTS,gl.LINES,gl.LINE_STRIP,gl.LINE_LOOP
						gl.TRIANGLES,gl.TRIANGLE_STRIP,gl.TRIANGLE_FAN
			first		指定从哪个点开始绘制-整形数
			count		指定要绘制多少个顶点-整形数
--------------------------------------------------------------------------		
返回值		无
--------------------------------------------------------------------------
错  误		INVALID_ENUM			传入的mode参数不是指定参数
			INVALID_VALUE			参数first或count是负数
  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-09-04 01:42:50  更:2022-09-04 01:44:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 8:29:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码