<!DOCTYPE html>
<html>
<head>
<title>Pseudo 3D</title>
<style>
canvas {
  border: 1px solid black;
}
</style>
</head>
<body>
<canvas id="canvas" width="400" height="400"></canvas>
<script>
// 获取画布和上下文
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');

// 定义3D物体的坐标和大小
var cube = {
  x: 200,
  y: 200,
  size: 100
};

// 绘制3D物体
function drawCube() {
  // 绘制正面
  ctx.fillStyle = 'red';
  ctx.fillRect(cube.x, cube.y, cube.size, cube.size);

  // 绘制侧面
  ctx.fillStyle = 'blue';
  ctx.beginPath();
  ctx.moveTo(cube.x + cube.size, cube.y);
  ctx.lineTo(cube.x + cube.size + cube.size / 2, cube.y - cube.size / 2);
  ctx.lineTo(cube.x + cube.size + cube.size / 2, cube.y + cube.size / 2);
  ctx.lineTo(cube.x + cube.size, cube.y + cube.size);
  ctx.closePath();
  ctx.fill();

  // 绘制顶面
  ctx.fillStyle = 'green';
  ctx.beginPath();
  ctx.moveTo(cube.x, cube.y);
  ctx.lineTo(cube.x + cube.size / 2, cube.y - cube.size / 2);
  ctx.lineTo(cube.x + cube.size + cube.size / 2, cube.y - cube.size / 2);
  ctx.lineTo(cube.x + cube.size, cube.y);
  ctx.closePath();
  ctx.fill();
}

// 渲染函数
function render() {
  // 清空画布
  ctx.clearRect(0, 0, canvas.width, canvas.height);

  // 绘制3D物体
  drawCube();

  // 更新3D物体的位置和大小
  cube.x += 1;
  cube.y += 1;
  cube.size -= 0.5;

  // 循环渲染
  requestAnimationFrame(render);
}

// 启动渲染
render();
</script>
</body>
</html>

原文地址: https://www.cveoy.top/t/topic/pxVP 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录