效果图展示
// 获取 canvas 元素,并设置 WebGL 上下文
var canvas = document.getElementById('myCanvas');
var gl = canvas.getContext('webgl');
// 定义顶点着色器
var vertexShaderSource = `
attribute vec2 position;
void main() {
gl_Position = vec4(position, 0, 1.0);
}
`;
// 定义片元着色器
var fragmentShaderSource = `
void main() {
gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
}
`;
// 创建顶点着色器
var vertexShader = gl.createShader(gl.VERTEX_SHADER);
gl.shaderSource(vertexShader, vertexShaderSource);
gl.compileShader(vertexShader);
// 创建片元睝色器
var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
gl.shaderSource(fragmentShader, fragmentShaderSource);
gl.compileShader(fragmentShader);
// 创建程序
var program = gl.createProgram();
gl.attachShader(program, vertexShader);
gl.attachShader(program, fragmentShader);
gl.linkProgram(program);
gl.useProgram(program);
// 设置视口大小和背景颜色
gl.viewport(0, 0, canvas.width, canvas.height);
gl.clearColor(0.0, 0.0, 0.0, 1.0);
gl.clear(gl.COLOR_BUFFER_BIT);
// 创建顶点数据
var vertices = new Float32Array([
-0.5, 0.5,
-0.5, -0.5,
0.5, -0.5,
0.5, 0.5
]);
// 创建缓冲区并传入顶点数据
var vertexBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);
gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);
// 获取位置属性并启用
var position = gl.getAttribLocation(program, 'position');
gl.vertexAttribPointer(position, 2, gl.FLOAT, false, 0, 0);
gl.enableVertexAttribArray(position);
// 绘制函数
function draw() {
// 更新线条位置和形状的逻辑
// 清除画布
gl.clear(gl.COLOR_BUFFER_BIT);
// 绘制三角形
gl.drawArrays(gl.TRIANGLE_FAN, 0, 4);
// 请求下一帧动画
requestAnimationFrame(draw);
}
// 开始绘制动画
requestAnimationFrame(draw);
New Document
光看不点赞,罚款50