使用WebGL技术创作一张精美的贺卡!

51 min read

好的,我可以为你提供一个简单的代码示例。以下是一个使用 WebGL 绘制贺卡的示例:

HTML 代码:

<canvas id="canvas"></canvas>

JavaScript 代码:

const canvas = document.getElementById('canvas');
const gl = canvas.getContext('webgl');

// 画布初始化
gl.clearColor(1.0, 0.0, 0.0, 1.0);
gl.clear(gl.COLOR_BUFFER_BIT);

// 设置顶点数据
const vertices = [
  // 上半部分
  -0.5, 0.5, // 左上角
  0.5, 0.5, // 右上角
  0.5, 0.0, // 右下角
  -0.5, 0.0, // 左下角
  // 下半部分
  -0.5, 0.0, // 左下角
  0.5, 0.0, // 右下角
  0.5, -0.5, // 右下角
  -0.5, -0.5 // 左下角
];

// 创建缓存区
const vertexBuffer = gl.createBuffer();

// 绑定缓存区
gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);

// 将数据写入缓存区
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);

// 设置顶点着色器
const vertexShaderSource = `
  attribute vec2 a_position;
  void main() {
    gl_Position = vec4(a_position, 0, 1);
  }
`;

const vertexShader = gl.createShader(gl.VERTEX_SHADER);
gl.shaderSource(vertexShader, vertexShaderSource);
gl.compileShader(vertexShader);

// 设置片元着色器
const fragmentShaderSource = `
  precision mediump float;
  uniform vec4 u_color;
  void main() {
    gl_FragColor = u_color;
  }
`;

const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
gl.shaderSource(fragmentShader, fragmentShaderSource);
gl.compileShader(fragmentShader);

// 创建着色器程序
const program = gl.createProgram();

// 将着色器附加到程序中
gl.attachShader(program, vertexShader);
gl.attachShader(program, fragmentShader);

// 绑定着色器变量
gl.bindAttribLocation(program, 0, 'a_position'); 

// 链接程序
gl.linkProgram(program);
gl.useProgram(program);

// 设置着色器变量值
const colorLocation = gl.getUniformLocation(program, 'u_color');
gl.uniform4fv(colorLocation, [Math.random(), Math.random(), Math.random(), 1]);

// 启用顶点数组
gl.enableVertexAttribArray(0);

// 绑定缓存区到着色器变量
gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);
gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 0, 0);

// 绘制图形
gl.drawArrays(gl.TRIANGLES, 0, 6);

这个示例画一个简单的二维图形,并随机着色。如果你想要画贺卡,你可以使用更多的图形和复杂的着色器效果。