当前位置: 首页 > news >正文

WebGL基础知识快速入门

目录

  • WebGL概述
  • WebGL环境搭建

WebGL是一种基于OpenGL ES 2.0的JavaScript API,它允许在Web浏览器中直接进行硬件加速的3D图形渲染。WebGL可以将复杂的3D图形和2D图形直接绘制到HTML的<canvas>元素中,从而实现跨平台的互动3D图形应用,无需插件。

WebGL概述

  • 核心概念:WebGL利用GPU(图形处理器)来渲染图形,这使得它能处理复杂的图形计算,如光照、阴影、纹理贴图等。
  • 着色语言:WebGL使用GLSL(OpenGL Shading Language)编写顶点着色器和片段着色器,用于计算顶点位置和像素颜色。
  • 图形管线:WebGL遵循传统的图形渲染管线,包括顶点处理、图元装配、光栅化等阶段。
  • 上下文获取:通过canvas.getContext('webgl')canvas.getContext('experimental-webgl')获取WebGL渲染上下文。

WebGL环境搭建

1. HTML准备:

创建一个<canvas>元素,这是WebGL绘制图形的画布。

   <canvas id="webgl-canvas"></canvas>

2. 获取WebGL上下文:

在JavaScript中获取canvas元素并初始化WebGL上下文。

   const canvas = document.getElementById('webgl-canvas');const gl = canvas.getContext('webgl');if (!gl) {alert('WebGL not supported');}

3. 设置视口和清除颜色:

配置WebGL的视口大小,并清除颜色缓冲区。

   gl.viewport(0, 0, canvas.width, canvas.height);gl.clearColor(0.0, 0.0, 0.0, 1.0); // 设置背景色为黑色gl.clear(gl.COLOR_BUFFER_BIT); // 清除颜色缓冲区

WebGL代码示例

// 获取WebGL上下文
const canvas = document.getElementById('webgl');
const gl = canvas.getContext('webgl');// 设置清空颜色为黑色
gl.clearColor(0.0, 0.0, 0.0, 1.0);
gl.clear(gl.COLOR_BUFFER_BIT);// 创建顶点着色器和片段着色器
const vertexShaderSource = `
attribute vec2 position;
void main() {gl_Position = vec4(position, 0.0, 1.0);
}
`;const fragmentShaderSource = `
precision mediump float;
uniform vec4 u_FragColor;
void main() {gl_FragColor = u_FragColor;
}
`;// 编译着色器
function compileShader(type, source) {const shader = gl.createShader(type);gl.shaderSource(shader, source);gl.compileShader(shader);if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {console.error('Shader compile error:', gl.getShaderInfoLog(shader));gl.deleteShader(shader);return null;}return shader;
}const vertexShader = compileShader(gl.VERTEX_SHADER, vertexShaderSource);
const fragmentShader = compileShader(gl.FRAGMENT_SHADER, fragmentShaderSource);// 创建程序对象并连接着色器
const program = gl.createProgram();
gl.attachShader(program, vertexShader);
gl.attachShader(program, fragmentShader);
gl.linkProgram(program);
if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {console.error('Program link error:', gl.getProgramInfoLog(program));return;
}
gl.useProgram(program);// 设置顶点位置
const positionAttributeLocation = gl.getAttribLocation(program, 'position');
gl.enableVertexAttribArray(positionAttributeLocation);
const positionBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);
const positions = [0, 0];
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(positions), gl.STATIC_DRAW);
gl.vertexAttribPointer(positionAttributeLocation, 2, gl.FLOAT, false, 0, 0);// 设置颜色并绘制
const colorLocation = gl.getUniformLocation(program, 'u_FragColor');
gl.uniform4f(colorLocation, 1.0, 0.0, 0.0, 1.0); // 红色
gl.drawArrays(gl.POINTS, 0, 1); // 绘制一个点

此代码首先设置了WebGL上下文,然后定义了两个着色器:顶点着色器负责确定顶点位置,片段着色器负责决定每个片段(像素)的颜色。接着,它编译和链接这些着色器,并通过一个顶点位置缓冲区在画布中心绘制了一个红色的点。


http://www.mrgr.cn/news/33372.html

相关文章:

  • 空栈压数 - 华为OD统一考试(E卷)
  • thinkphp 做分布式服务+读写分离+分库分表(分区)(后续接着写)
  • 【shell脚本4】Shell脚本学习--字符串和数组
  • 掌控历史:如何通过Git版本管理工具提升你的开发效率
  • 2024华为杯E题成品文章已出!
  • 【AI算法岗面试八股面经【超全整理】——深度学习】
  • 软件开发事故分级极简理解(灾难级、高级、中级、轻微级)
  • 学习C4模型的新网站
  • 【langchain学习】深度解析:Langchain TextSplitter 与新型正则表达式分割器的性能对比
  • 单片机原理及应用详解
  • Redis数据结构之set
  • 校园美食导航:Spring Boot技术的美食发现之旅
  • 【416】【举报垃圾信息】
  • 漏洞复现_永恒之蓝
  • MySQL:事务
  • 代码编辑器 —— SourceInsight实用技巧
  • Windows下如何定时执行自定义任务
  • 数据结构—树
  • 学习 git 命令行的简单操作, 能够将代码上传到 Gitee 上
  • 广度/深度优先搜索多维数据的理解