11 月 19 - 20 日 Apache Pulsar 社区年度盛会来啦,立即报名! 了解详情
写点什么

带来更多炫酷效果!用于 3D 设计和动画制作的 JavaScript 库:Zdog

  • 2019-08-08
  • 本文字数:2287 字

    阅读完需:约 8 分钟

带来更多炫酷效果!用于3D设计和动画制作的JavaScript库:Zdog

Zdog 是一个用于 <canvas> 和 SVG 的 3D JavaScript 引擎。通过 Zdog,你可以在 Web 界面上设计和渲染简单的 3D 模型。今天,我们来跟随 Maria Antonietta Perna 学习如何使用 Zdog 进行 3D 设计和动画制作。


有一个很酷的 JavaScript 库,像 Chris GannonVal HeadCodePen 等都对这个 JavaScript 库赞不绝口。你也可以在 Product Hunt 找到它,在网上的演示做得非常不错。这个很酷的 JavaScript 库,不是别的,正是 Dave DeSandroZdog





在本文中,我将介绍 Zdog,并展示一些由出色的开发人员制作的演示,这些演示实在太可爱了,你可以对这些演示进行逆向工程并从中学习。


让我们开始吧!


Zdog 是什么?

DeSandro 在这个库的专用网站是这样解释 Zdog 的:


Zdog 是一个用于 <canvas> 和 SVG 的 3D JavaScript 引擎。借助 Zdog,你可以在 Web 上设计和渲染简单的 3D 模型。Zdog 是一个伪 3D 引擎,它的几何图形存在于 3D 空间中,但却以平面图形进行渲染。这就让 Zdog 很特别。


换句话说,你可以设计、显示和动画 SVG 或基于 <canvas> 的 3D 模型。


Zdog 很小(整个库只有 2100 行代码,压缩之后只有 28KB),对开发人员很友好(你可以使用直接声明性 API 来快速实现它)。


Zdog 入门

与大多数 JavaScript 一样,你可以通过以下方式将 Zdog 打包到你的项目中。



npm install zdog
复制代码


下面是 CodePen 上的官方“Hello World”演示,你可以立即运行并使用这个库:



此演示网址为 https://codepen.io/desandro/pen/YbrLaO


DeSandro 提供了一个很棒的入门指南,我将用它来让你了解这个库是如何运行的,以及你可以从中期待什么样的结果。


Zdog 是如何运行的

让我们从创建静态 SVG 圆圈开始。


HTML 只是一个可以用作包装器的 SVG 元素。如果你更喜欢使用 canvas 元素创建 Zdog 图形,只需将 SVG 记替换为 canvas 标记即可:


<svg id="circle" width="100" height="100"></svg>
复制代码


现在在 SVG 元素上添加一些 CSS:


#circle {    background-color: #081d3f;    width: 100vw;    height: 100vh;} 
复制代码


最后,JavaScript 代码如下:


/*  create an instance of the Zdog     Illustration class */    let circle = new Zdog.Illustration({    element: '#circle'    })
/* create an instance of the Zdog shape class Ellipse */ new Zdog.Ellipse({ // add the shape to the circle addTo: circle, // set more properties diameter: 20, stroke: 20, color: '#ccc' })
// display the scene circle.updateRenderGraph()
复制代码


要绘制图形,你需要创建 Zdog 类的实例。Illustration 是处理 <canvas><svg> 的顶级类。你为场景创建的形状将是 Illustration 类实例的子类。


Ellipse 是一个形状类。你可以创建 Ellipse 形状类的新实例,并使用 addTo() 方法将其添加到容器中,在本例中为 circle。Zdog 提供了许多预定义的形状,如 rect、polygon 等等。若要创建自定义形状,请使用 Shape 类并定义其路径点。你可以为形状添加其他属性,如 diameter、stroke 和 color。要想了解更多的属性,请查看 Zdog 的 Shape 类的 API


若要在屏幕上呈现图形,请调用 circle 实例上的 updateRenderGraph() 方法。


你的圆圈应该是这样的:



此演示网址为 https://codepen.io/antonietta/pen/bPBeXZ


使用 Zdog 设置动画和拖动

动画要求在每一帧上重新渲染 circle 实例。你可以使用 .requestAnimationFrame() ,如下所示:


function animate() {/* incrementally increase the rotation on the y axis */circle.rotate.y += 0.03// re-render the graphiccircle.updateRenderGraph()// animate the next frame        requestAnimationFrame(animate)}
animate()
复制代码


Zdog 可以让你快速将拖动功能添加到你的图形中。如果你想在拖动时停止动画,并在拖动后恢复动画,你需要执行以下操作。


首先,将 isSpinning 标志设置为 true:


let isSpinning = true
复制代码


接下来,返回到 Illustration 类的 circle 实例,并将 dragRotate 属性设置为 true。此外,在 onDragStart() 和 onDragEnd() 方法中切换标志,以便在拖动开始时设置为 false,在拖动结束时设置为 true:


let circle = new Zdog.Illustration({    element: '#circle',    dragRotate: true,    onDragStart() {    isSpinning = false    },    onDragEnd() {    isSpinning = true    }})
复制代码


最后,通过在顶部添加这个条件语句来调整 animate()函数,这样只有当 isSpinning 标志设置为 true 时,才会发生旋转:


    if(isSpinning) {      circle.rotate.y += 0.03     }

复制代码


这是运行的演示:



演示网址为 https://codepen.io/antonietta/pen/jjVBWO


资源与演示

以上只是你能用 Zdog 创建的所有令人惊叹的图形和动画的冰山一角。你还可以将其与其他库(如 GreenSock) 混合搭配,以获得更加惊人的结果。


下面是一些资源和演示集合,你可以在其中找到关于这个最新添加到设计和动画空间的更多信息 ,这些都是在代码中完成的:


  • Zdog 网站,你可以找到所有关于 API 的详细信息、更多演示、预排等等。

  • Holy Zdog,CodePen 的一个博客,内容全是基于 Zdog 的演示。

  • Made with Zdog,在 CodePen 上收集的基于 Zdog 的演示。

  • Made with Zdog,在 Twitter 上收集的一组很棒的演示,显然都是用 Zdog 制作的。


英文原文:https://www.sitepoint.com/learn-zdog/


2019-08-08 10:032010
用户头像

发布了 359 篇内容, 共 148.6 次阅读, 收获喜欢 917 次。

关注

评论 2 条评论

发布
用户头像
为什么文章中的图片都是黄黄的感觉呢?
2019-08-08 11:24
回复
护眼
2019-08-08 23:23
回复
没有更多了
发现更多内容

产品经理第二课作业

撒.野

产品作业2

Tomz

产品经理训练营

重学JS | Ajax发送数据序列化问题以及Object序列化整理

梁龙先森

JavaScript 大前端 编程语言 28天写作

【纯CSS】画 多国国旗

德育处主任

css3 html/css CSS小技巧 28天写作 纯CSS

产品课程-第二周作业

狗三

看西联软件如何拿下四川省 7 成连锁卖场 | AWS 精选案例

亚马逊云科技 (Amazon Web Services)

CSS(五)——设置文本样式

程序员的时光

程序员 大前端 七日更 28天写作

产品经理训练营--第二周作业

孤星

抽奖助手:假设你是一个抽奖小程序产品的负责人,列出产品的利益相关方。

三生赤水

极客大学架构师训练营成果索引

晴空万里

架构师训练营第2期

产品经理训练营作业第2周

黑小白白白

极客大学产品经理训练营

产品训练营第二周作业

朱航

第二周作业

z

第二周作业

岛乾坤

二手车平台app利益相关方分析

戎帅

产品利益相关者分析

Dylan Zhu

自从上了K8S,项目更新都不带停机的!

Java架构师迁哥

产品经理训练营-第二周作业

月亮 😝

产品经理训练营 - 第二次作业

羽室

科技创投媒体36Kr的容器化之路

Rancher

产品经理第 0 期训练营第二周作业提交

Krystal

SpotMax:在云上,看我帮助企业省“余粮”

亚马逊云科技 (Amazon Web Services)

云计算

第二周 作业

Geek_72d5ab

京东发布《未来科技趋势白皮书》,101页详解5大关键技术

京东数科风险算法与技术

产品经理训练营 Week2 学习心得

Mai

删库跑路被判入狱,明知不可为而为之

李忠良

28天写作

第二周总结

岛乾坤

产品训练营-第二周学习总结

Trigger

极客时间 极客大学产品经理训练营 产品训练营

作业2-产品的利益相关人分析

赝品

Spring Boot 中使用监听器

武哥聊编程

Java springboot SpringBoot 2 28天写作

带来更多炫酷效果!用于3D设计和动画制作的JavaScript库:Zdog_语言 & 开发_Maria Antonietta Perna_InfoQ精选文章