让你成为灵魂画手的 JS 引擎:Zdog

640?wx_fmt=png

本文作者:HelloGitHub-kalifun

今天给大家推荐一个使用 JavaScript 语言编写的开源 Web 3D 模型项目 —— Zdog。

一、介绍

1.1 Zdog

Zdog 项目地址:https://github.com/metafizzy/zdog

Tips: 本文出现的所有作品都是通过 Zdog 完成的。

640?wx_fmt=gif

圆形、扁平、设计师友好用于 canvas 和 SVG 的伪 3D 引擎。

使用 Zdog 您可以在 Web 上设计和渲染简单的 3D 模型。Zdog 是一个伪 3D 引擎。它的几何形状存在于 3D 空间中,但呈现为扁平形状,这使 Zdog 特别。

1.2 Zdog 特点

  • 体积小:整个库只有 2100 行代码,最小体积为 28 KB。

  • 图形圆滑:所有的圆形都呈现为圆边,没有多边形锯齿。

  • 使用友好:使用 API 完成建模。

二、方法介绍

解释说明均在代码中以注释方式展示,请大家注意阅读。

2.1 初始静态演示

让我们进入一个基本的非动画演示。

静态演示只需要在画布上将想要绘画的图像渲染出来就可以了。

  1. // Illustration是顶级类,用于处理<canvas>或<svg>元素,保存场景中的所有形状,并在元素中显示这些形状。
  2. let illo = new Zdog.Illustration({
  3. // 用class选择器设置画布
  4. element: '.zdog-canvas',
  5. });
  6. // 画圆
  7. new Zdog.Ellipse({
  8. // 将形状添加到illo
  9. addTo: illo,
  10. // 设置圆的直径
  11. diameter: 80,
  12. // 设置画笔宽度
  13. stroke: 20,
  14. // 设置圆的颜色
  15. color: '#636',
  16. });
  17. // 更新所有显示属性并渲染到illo画布上
  18.     illo.updateRenderGraph();

2.2 动画

为实现动画场景,我们需要每帧重新渲染图形在画布上。

  1. let illo = new Zdog.Illustration({
  2. // 用id选择器设置画布
  3. element: '#zdog-canvas',
  4. });
  5. // 画圆
  6. new Zdog.Ellipse({
  7. addTo: illo,
  8. diameter: 80,
  9. // 你可以理解z轴向前移动40个像素
  10. translate: { z: 40 },
  11. stroke: 20,
  12. color: '#636',
  13. });
  14. // 画矩形
  15. new Zdog.Rect({
  16. addTo: newcanvas,
  17. width: 80,
  18. height: 80,
  19. // 你可以理解z轴向后移动40个像素
  20. translate: { z: -40 },
  21. stroke: 12,
  22. color: '#E62',
  23. fill: true,
  24. });
  25. function animate() {
  26. // 通过逐步增加xxx.rotate.y来改变场景的旋转。值越大越快。
  27. illo.rotate.y += 0.03;
  28. illo.updateRenderGraph();
  29. // 动画下一帧继续执行函数
  30. requestAnimationFrame( animate );
  31. }
  32. // 开始动画,执行函数
  33.     animate();

2.3 放大

Zdog 需要设置大量数字。设置 zoom 将按比例缩放整个场景。

  1. // Illustration是顶级类,用于处理<canvas>或<svg>元素,保存场景中的所有形状,并在元素中显示这些形状。
  2. let illo2 = new Zdog.Illustration({
  3. // 用class选择器设置画布
  4. element: '.zdog-canvas2',
  5. // 将图形放大4倍
  6. zoom: 4,
  7. });
  8. // 画圆
  9. new Zdog.Ellipse({
  10. // 将形状添加到illo2
  11. addTo: illo2,
  12. // 设置圆的直径
  13. diameter: 80,
  14. // 设置画笔宽度
  15. stroke: 20,
  16. // 设置圆的颜色
  17. color: '#636',
  18. });
  19. // 更新所有显示属性并渲染到illo画布上
  20.     illo2.updateRenderGraph();

2.4 拖动旋转

通过在插图上设置 dragRotate:true 来拖动来启用旋转。

  1. let newcanvas2 = new Zdog.Illustration({
  2. // 用id选择器设置画布
  3. element: '#zdog-canvas2',
  4. dragRotate: true,
  5. });
  6. // 画圆
  7. new Zdog.Ellipse({
  8. addTo: newcanvas2,
  9. diameter: 80,
  10. // 你可以理解z轴向前移动40个像素
  11. translate: { z: 40 },
  12. stroke: 20,
  13. color: '#636',
  14. });
  15. // 画矩形
  16. new Zdog.Rect({
  17. addTo: newcanvas2,
  18. width: 80,
  19. height: 80,
  20. // 你可以理解z轴向后移动40个像素
  21. translate: { z: -40 },
  22. stroke: 12,
  23. color: '#E62',
  24. fill: true,
  25. });
  26. function animate2() {
  27. // 通过逐步增加xxx.rotate.y来改变场景的旋转。值越大越快。
  28. newcanvas2.rotate.y += 0.03;
  29. newcanvas2.updateRenderGraph();
  30. // 动画下一帧继续执行函数
  31. requestAnimationFrame( animate2 );
  32. }
  33. // 开始动画,执行函数
  34. animate2();

三、快速入手

下面我们将一步步的讲解如何使用 Zdog 这个库。我们采用的是最简单的 CDN 引用方式,方便大家能够快速体检其魅力(复制代码便可查看效果)。

Tips: 解释说明均在代码中以注释方式展示,请大家注意阅读。

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>zdog</title>
  6. <style type="text/css">
  7. .zdog-canvas {
  8. /*给class="zdog-canvas"的画布添加背景*/
  9. background: #FDB;
  10. }
  11. </style>
  12. </head>
  13. <body>
  14. <!--Zdog在<canvas>或<svg>元素上呈现。-->
  15. <!--设置画布1,及长宽-->
  16. <canvas class="zdog-canvas" width="240" height="240"></canvas>
  17. <!--设置画布2,及长宽-->
  18. <canvas id="zdog-canvas" width="240" height="240"></canvas>
  19. <!--引入zdog文件-->
  20. <script src="https://unpkg.com/zdog@1/dist/zdog.dist.min.js"></script>
  21. <script>
  22. // Illustration是顶级类,用于处理<canvas>或<svg>元素,保存场景中的所有形状,并在元素中显示这些形状。
  23. let illo = new Zdog.Illustration({
  24. // 用class选择器设置画布
  25. element: '.zdog-canvas',
  26. });
  27. // 画圆
  28. new Zdog.Ellipse({
  29. // 将形状添加到illo
  30. addTo: illo,
  31. // 设置圆的直径
  32. diameter: 80,
  33. // 设置画笔宽度
  34. stroke: 20,
  35. // 设置圆的颜色
  36. color: '#636',
  37. });
  38. // 更新所有显示属性并渲染到illo画布上
  39. illo.updateRenderGraph();
  40. let newcanvas = new Zdog.Illustration({
  41. // 用id选择器设置画布
  42. element: '#zdog-canvas',
  43. });
  44. // 画圆
  45. new Zdog.Ellipse({
  46. addTo: newcanvas,
  47. diameter: 80,
  48. // 你可以理解z轴向前移动40个像素
  49. translate: { z: 40 },
  50. stroke: 20,
  51. color: '#636',
  52. });
  53. // 画矩形
  54. new Zdog.Rect({
  55. addTo: newcanvas,
  56. width: 80,
  57. height: 80,
  58. // 你可以理解z轴向后移动40个像素
  59. translate: { z: -40 },
  60. stroke: 12,
  61. color: '#E62',
  62. fill: true,
  63. });
  64. function animate() {
  65. // 通过逐步增加xxx.rotate.y来改变场景的旋转。值越大越快。
  66. newcanvas.rotate.y += 0.03;
  67. newcanvas.updateRenderGraph();
  68. // 动画下一帧继续执行函数
  69. requestAnimationFrame( animate );
  70. }
  71. // 开始动画,执行函数
  72. animate();
  73. </script>
  74. </body>
  75. </html>

640?wx_fmt=gif

第一个画布是初始静态演示,第二个画布是动画,第三个画布是由第一个画布放大,第四个画布是通过拖动实现不规则旋转

四、总结

Zdog 可以设计和显示简单的 3D 模型而不需要很多开销。这让我们成为一个灵魂画手简单了很多,如果你想给自己的网站增添色彩,不妨试试 Zdog 吧。如果各位感兴趣的话,下一期我将带领大家成为一位代码上的灵魂画手!

五、参考资料

Zdog官方文档[1]

References

[1] Zdog官方文档: https://zzz.dog/

 关注公众号加入交流群,一起讨论有趣的技术话题

 

『讲解开源项目系列』——让对开源项目感兴趣的人不再畏惧、让开源项目的发起者不再孤单。跟着我们的文章,你会发现编程的乐趣、使用和发现参与开源项目如此简单。欢迎联系我(微信:xueweihan,备注:讲解)加入我们,让更多人爱上开源、贡献开源~

登录后您可以享受以下权益:

×
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

举报

选择你想要举报的内容(必选)
  • 内容涉黄
  • 政治相关
  • 内容抄袭
  • 涉嫌广告
  • 内容侵权
  • 侮辱谩骂
  • 样式问题
  • 其他
点击体验
DeepSeekR1满血版
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回顶部