计算机图形学小故事:像素小镇的诞生

228 阅读3分钟

119a65f4-e69f-40cd-9ed5-8ae0bb107e92_1748483995856796928_origin~tplv-a9rns2rl98-image-qvalue.jpeg

在数字世界的某个角落,有一个神秘的 “像素小镇”。这个小镇里的每一块砖、每一扇窗,甚至天上的每一颗星星,都是由一个个小方块 —— 像素组成的。今天,我们就来当一回小镇的建筑师,用计算机图形学的魔法,在屏幕上建造属于我们的像素小镇!

初识像素:小镇的基石

想象一下,像素就是小镇里最小的彩色砖块。计算机屏幕上的所有画面,从精美的游戏场景到酷炫的动画,都是由这些小砖块排列组合而成的。在计算机图形学里,我们可以把屏幕看作一个巨大的网格,每个网格就是一个像素,它有自己的位置(坐标)和颜色。

比如,我们要在屏幕上画一个红色的点,其实就是找到对应的网格,然后把这个网格涂成红色。在 JavaScript 中,我们可以使用 HTML5 的 Canvas 来操作这些像素。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>像素小镇的第一个点</title>
</head>
<body>
  <canvas id="myCanvas" width="400" height="400"></canvas>
  <script>
    const canvas = document.getElementById('myCanvas');
    const ctx = canvas.getContext('2d');
    // 找到坐标(100, 100)的像素,把它涂成红色
    ctx.fillStyle ='red';
    ctx.fillRect(100, 100, 1, 1);
  </script>
</body>
</html>

在这段代码中,ctx.fillRect(100, 100, 1, 1) 表示在坐标 (100, 100) 的位置,绘制一个宽和高都为 1 的矩形,也就是一个像素。ctx.fillStyle ='red' 则是设置这个像素的颜色为红色。

绘制线条:小镇的街道

有了像素,我们就可以开始建造小镇的街道了。街道其实就是由一连串的像素点连接而成的线条。在计算机图形学中,绘制线条的方法有很多,我们这里用一种简单的方式:把相邻的像素点依次连接起来。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>像素小镇的街道</title>
</head>
<body>
  <canvas id="myCanvas" width="400" height="400"></canvas>
  <script>
    const canvas = document.getElementById('myCanvas');
    const ctx = canvas.getContext('2d');
    ctx.beginPath();
    ctx.moveTo(50, 50);  // 起点坐标(50, 50)
    ctx.lineTo(300, 50);  // 终点坐标(300, 50)
    ctx.strokeStyle = 'black';
    ctx.lineWidth = 5;
    ctx.stroke();
  </script>
</body>
</html>

在这段代码里,ctx.moveTo(50, 50) 是把画笔移动到起点 (50, 50) ,ctx.lineTo(300, 50) 是从起点画一条线到终点 (300, 50) ,ctx.stroke() 则是把这条线绘制出来。ctx.strokeStyle = 'black' 设置线条颜色为黑色,ctx.lineWidth = 5 设置线条的宽度为 5 个像素。

绘制形状:小镇的房屋

有了街道,我们该给小镇加上房屋了。房屋可以由各种形状组成,比如矩形、三角形。以绘制一个简单的矩形房屋为例:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>像素小镇的房屋</title>
</head>
<body>
  <canvas id="myCanvas" width="400" height="400"></canvas>
  <script>
    const canvas = document.getElementById('myCanvas');
    const ctx = canvas.getContext('2d');
    // 绘制矩形房屋
    ctx.fillStyle = 'brown';
    ctx.fillRect(100, 200, 150, 100);  // 房屋主体
    ctx.fillStyle = 'orange';
    ctx.beginPath();
    ctx.moveTo(100, 200);
    ctx.lineTo(225, 150);
    ctx.lineTo(350, 200);
    ctx.fill();  // 填充三角形屋顶
  </script>
</body>
</html>

这里先用 ctx.fillRect(100, 200, 150, 100) 绘制了房屋的主体矩形,然后通过 ctx.moveTo、ctx.lineTo 和 ctx.fill 绘制并填充了三角形的屋顶,给小镇增添了一座可爱的房屋。

通过今天的学习,我们已经学会了在计算机图形学中,如何使用像素绘制点、线条和简单的形状,初步搭建起了像素小镇的框架。明天,我们将继续探索,为小镇添加更多精彩的元素,比如色彩斑斓的窗户、郁郁葱葱的树木,让小镇变得更加生机勃勃!

上述内容展示了计算机图形学基础绘制的知识。你若想学习更复杂图形绘制、动画效果,或有其他修改需求,欢迎随时和我说。