计算机图形学的奇幻之旅:第三天探索

嘿,勇敢的图形探险家们!欢迎来到计算机图形学奇妙世界的第三天。前两日,我们像是在图形森林里摸索着前进,搭建基础营地,今天,咱们要开始真正的冒险,解锁更炫酷的图形魔法啦!

一、像素的秘密花园:深入理解色彩与显示

想象计算机屏幕是一块超级大的像素拼图板,每个像素都是一个小小的彩色魔法方块。在底层,这些像素其实是由红(Red)、绿(Green)、蓝(Blue)三种颜色的小灯组成的,这就是大名鼎鼎的 RGB 色彩模式。就好比你在调配魔法药水,红色小灯、绿色小灯和蓝色小灯的亮度不同,混合出来的颜色就千变万化。

在 JavaScript 中,我们可以通过canvas来操控这些像素小方块。首先,创建一个canvas画布:

ini 复制代码
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
document.body.appendChild(canvas);

这就像是我们在屏幕上铺开了一张空白的魔法画布,准备开始绘制属于我们的图形魔法。

二、形状大变身:绘制复杂图形

(一)路径的魔法轨迹

绘制复杂图形,我们需要掌握路径这个魔法技能。路径就像是图形的隐形骨架,我们可以沿着这个骨架绘制出各种形状。在 JavaScript 中,使用beginPath()开启一条新路径,moveTo(x, y)将画笔移动到指定坐标,lineTo(x, y)绘制线条。

比如,我们要绘制一个三角形:

ini 复制代码
ctx.beginPath();
ctx.moveTo(100, 100);
ctx.lineTo(200, 100);
ctx.lineTo(150, 200);
ctx.closePath();
ctx.stroke();

这里,closePath()就像是给路径画了一个完美的句号,让起点和终点连接起来,stroke()则是拿起魔法笔,沿着路径勾勒出形状。

(二)图形的填充魔法

仅仅勾勒出形状可不够,我们还得给图形填充上绚丽的色彩。使用fillStyle属性设置填充颜色,fill()方法完成填充。

ini 复制代码
ctx.beginPath();
ctx.arc(150, 150, 50, 0, 2 * Math.PI);
ctx.fillStyle ='skyblue';
ctx.fill();

上面这段代码绘制了一个蓝色的圆形,arc()方法就像是在施展画圆的魔法咒语,设定圆心坐标、半径以及起始和结束角度,fillStyle赋予图形天空般的蓝色,fill()让色彩填满整个圆形。

三、动画的奇幻魔法:让图形动起来

在计算机图形学的世界里,动画就像是给图形注入了生命。实现动画的关键在于不断更新画面,利用视觉暂留原理,让图形看起来像是在动。在 JavaScript 中,我们可以使用requestAnimationFrame函数来实现流畅的动画效果。

scss 复制代码
function animate() {
    // 在这里更新图形的位置、大小等属性
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    // 绘制新的图形
    requestAnimationFrame(animate);
}
requestAnimationFrame(animate);

clearRect()就像是用魔法橡皮擦把画布擦干净,然后我们在空白画布上绘制新的图形,requestAnimationFrame会不断调用animate函数,让图形持续更新,从而实现动画效果。比如,我们可以让一个小球在画布上跳动:

ini 复制代码
let x = 50;
let y = 50;
let vx = 2;
let vy = 2;
function animate() {
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    ctx.beginPath();
    ctx.arc(x, y, 10, 0, 2 * Math.PI);
    ctx.fillStyle ='red';
    ctx.fill();
    x += vx;
    y += vy;
    if (x > canvas.width - 10 || x < 10) {
        vx = -vx;
    }
    if (y > canvas.height - 10 || y < 10) {
        vy = -vy;
    }
    requestAnimationFrame(animate);
}
requestAnimationFrame(animate);

这样,小球就会在画布上弹来弹去,是不是很有趣?

今天的计算机图形学冒险之旅就到这里啦!我们探索了像素的秘密、绘制了复杂图形,还让图形动了起来。但这只是图形魔法世界的冰山一角,还有更多奇妙的知识等待我们去发现。明天,我们将继续深入探索,解锁更强大的图形技能!

上述内容从多方面展示了计算机图形学第三天的知识要点。若你觉得某些部分需要调整,或想补充其他内容,欢迎随时和我说。

相关推荐
HashTang11 分钟前
不用再配服务器了!这套 Next.js + Cloudflare 模板,一个人搞定全栈出海
前端·后端·边缘计算
Cory.眼24 分钟前
WebRTC入门指南:实时通信零基础
javascript·webrtc·实时通信
前端架构师-老李1 小时前
16 Electron 应用自动更新方案:electron-updater 完整指南
前端·javascript·electron
一只学java的小汉堡1 小时前
HTML 01入门:从概念到开发环境搭建与页面头部配置
前端·css·html
拖拉斯旋风1 小时前
📚 JavaScript 变量声明三剑客:`var`、`let`、`const` 学习笔记
javascript
用户21496515898751 小时前
从零搭建uniapp环境-记录
前端
可触的未来,发芽的智生3 小时前
追根索源:换不同的词嵌入(词向量生成方式不同,但词与词关系接近),会出现什么结果?
javascript·人工智能·python·神经网络·自然语言处理
努力写代码的熊大3 小时前
stack、queue与priority_queue的用法解析与模拟实现
java·前端·javascript
im_AMBER3 小时前
React 06
前端·javascript·笔记·学习·react.js·前端框架
wyzqhhhh3 小时前
前端常见的设计模式
前端·设计模式