<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<title>01_最简单的WebGL程序</title>
<!-- 顶点着色器 -->
<script id="shader-vs" type="x-shader/x-vertex">
attribute vec3 aVertexPosition; // 顶点位置
void main(void) {
gl_Position = vec4(aVertexPosition, 1.0);
}
</script>
<!-- 片源着色器 -->
<script id="shader-fs" type="x-shader/x-fragment">
precision mediump float;
void main(void) {
gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
}
</script>
<script type="text/javascript">
var start = function () {
// 上下文环境
var canvas = document.getElementById("mycanvas");
var gl = canvas.getContext("experimental-webgl");
gl.viewportWidth = canvas.width;
gl.viewportHeight = canvas.height;
gl.viewport(0, 0, gl.viewportWidth, gl.viewportWidth);
gl.enable(gl.DEPTH_TEST); // 启用深度测试
// 顶点着色器
var shader = gl.createShader(gl.VERTEX_SHADER);
gl.shaderSource(shader, document.getElementById('shader-vs').textContent);
gl.compileShader(shader);
var vertexShader = shader;
// 片源着色器
var shader = gl.createShader(gl.FRAGMENT_SHADER);
gl.shaderSource(shader, document.getElementById('shader-fs').textContent);
gl.compileShader(shader);
var fragmentShader = shader;
// 着色器程序
var shaderProgram = gl.createProgram();
gl.attachShader(shaderProgram, vertexShader);
gl.attachShader(shaderProgram, fragmentShader);
gl.linkProgram(shaderProgram);
gl.useProgram(shaderProgram);
// 获取参数地址
var vertexPositionAttr = gl.getAttribLocation(shaderProgram, "aVertexPosition");
gl.enableVertexAttribArray(vertexPositionAttr);
// 顶点位置
var vertices = [
-0.5, -0.5, 0.0,
0.5, -0.5, 0.0,
0.0, 0.5, 0.0
];
var vertexPositionBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, vertexPositionBuffer);
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);
// 渲染循环
var render = function () {
// 清屏
gl.clearColor(0.0, 0.0, 0.0, 1.0);
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
// 顶点位置
gl.bindBuffer(gl.ARRAY_BUFFER, vertexPositionBuffer);
gl.vertexAttribPointer(vertexPositionAttr, 3, gl.FLOAT, false, 0, 0);
// 绘制
gl.drawArrays(gl.TRIANGLE_STRIP, 0, 3);
requestAnimationFrame(render);
}
render();
}
</script>
</head>
<body onload="start();">
<canvas id="mycanvas" style="border: none;" width="500" height="500"></canvas>
</body>
</html>
01、最简单的WegGL程序
创建日期:2024-07-08
更新日期:2025-01-12
简介
一个来自三线小城市的程序员开发经验总结。