js 判断支持webgl_WebGL入门教程01

本文介绍了WebGL的基本概念,它是JavaScript API,用于在浏览器中呈现交互式3D和2D图形。WebGL利用GPU加速渲染,通过JavaScript和GLSL编写代码。文章详细阐述了WebGL的绘图流程,包括获取上下文对象、初始化着色器、常用方法API,并提供了代码案例展示如何创建和使用着色器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

点击蓝字,关注我们

AUT

WebGL

CPC与GPU

CPU 中央处理器

GPU 图形处理器

43d3b67d1bee1801d35006418a6408e2.png

WebGL概念

WebGL (Web图形库) 是一种JavaScript API,用于在任何兼容的Web浏览器中呈现交互式3D和2D图形。WebGL程序由Javascript编写的句柄和OpenGL Shading Lanugage(GLSL) 编写的着色器代码组成。

要点:

1. 函数库

2. WEBGL是用来实现2d 3d 动画效果的

3. webgl 他是浏览器端识别的, 可以与canvas结合使用, 他是由GPU加速渲染的

4. webgl的代码是由javascript + GLSL组合而成

webgl就是绘制2d 、3d图形的一种技术

着色器:绘制图形的语言  类似c语言、c++语言

WebGL可绘制的图元

1. 点

2. 线段

3. 三角形

WebGL绘图流程

574475528f5c9592745f85d86a81cd90.png

01

# 获取上下文对象

var gl = canvas.getContext('webgl');

02

# 初始化着色器

着色器语言:

    着色器分为顶点着色器和片元着色器。

    顶点着色器:用来描述顶点特征的程序

    片元着色器:进行逐片元处理过程如光照的程序

变量声明

30c37a6cf41678c512a6863d12511cee.png

着色器的变量声明方式——存储限定符

1. attribute变量:传输的是与顶点有关的数据

2. uniform变量:传输的是对于所有顶点都相关(或与顶点无关)的数据(全局变量)

3. textures变量:纹理(纹理是一个数据序列,可以在着色程序运行中随意读取其中的数据。大多数情况存放的是图像数据,但是纹理仅仅是数据序列, 你也可以随意存放除了颜色数据以外的其它数据。)

4. Varying可变变量:

可变量是一种顶点着色器给片断着色器传值的方式,依照渲染的图元是点, 线还是三角形,顶点着色器中设置的可变量会在片断着色器运行中获取不同的插值。

GLSL ES数据类型

3a9743e0112657287cfd9430941eae8e.png

顶点着色器的内置变量

40c79c4c37918f46b43305ea7fb1210e.png

片元着色器的内置变量

d86234245e086bd3876f008c4e940eac.png

03

# WebGL常用方法API

创建着色器

创建着色器:

gl.createShader(type):

type: gl.VERTEX_SHADER/gl.FRAGMENT_SHADER;

向着色器中添加资源:

gl.shaderSource(shader, source);

shader:  着色器

source: 添加的程序(字符串类型)

编译着色器代码:

gl.compileShader(shader);

shader 要编译的着色器

创建程序

创建程序:

gl.createProgram();

绑定着色器程序:

gl.attachShader(program, shader);

program: 被插入的程序

shader:要绑定的着色器

连接着色器程序:

gl.linkProgram(program);

# 代码案例

        void main(){

            gl_Position = vec4(0,0,0,0);

            gl_PointSize = 10.0;

        }

        void main(){

            gl_FragColor = vec4(0,0,0,1);

        }

        // 获取WebGL绘图上下文

        var canver = document.querySelector('#canvas')

        var gl = canver.getContext('webgl')

        // 判断浏览器是否支持webgl

        if (!gl) {

            alert('浏览器不支持')

        }

        // 创建着色器函数

        function createShader(gl, type, source) {

            // 创建着色器

            var shader = gl.createShader(type)

            // 向着色器中添加资源 shader:着色器 source:添加的程序(字符串类型)

            gl.shaderSource(shader, source)

            // 编译着色器代码 shader:要编译的着色器

            gl.compileShader(shader)

            // 判断着色器是否创建成功

            var success = gl.getShaderParameter(shader, gl.COMPLETE_STATUS)

            if (success) {

                // 成功返回着色器

                return shader

            }

            // 失败返回错误信息

            console.log(gl.getShaderInfoLog(shader));

        }

        // 获取着色器代码 

        var vetexStr = document.getElementById('vertex').innerText

        var fragmentStr = document.getElementById('fragment').innerText

        // 创建定点着色器

        var vetexShader = createShader(gl, gl.VERTEX_SHADER, vetexStr)

        // 创建片元着色器

        var fragmentShader = createShader(gl, gl.FRAGMENT_SHADER, fragmentStr)

        // 创建程序函数

        function createProgram(gl,vertexShader,fragmentShader) {

            // 创建程序

            var program = gl.createProgram()

            // 绑定着色器程序 program:插入的程序 shader:要绑定的着色器

            gl.attachShader(program,vertexShader)

            gl.attachShader(program,fragmentShader)

            // 连接着色器程序

            gl.linkProgram(program)

        }

        var program = createProgram(gl,vetexShader,fragmentShader)

        gl.useProgan(program)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值