html3d模型制作,数百个 HTML5 例子学习 HT 图形组件 – 3D 建模篇

本文介绍利用HTML5和WebGL的API创建不规则3D模型,如餐座椅的花盆、酒杯等,通过`createRingModel`和`createExtrusionModel`函数实现,关键在于理解Points和Segments参数。实例展示了如何借助辅助工具导出模型数据,以及如何用模型改造连线设计,如3D弹力拓扑图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

8f8daaf266bb08860b66d3e827996305.png

《数百个 HTML5 例子学习 HT 图形组件 – WebGL 3D 篇》里提到  很多情况下不需要借助 3Ds Max 和 Blender 等专业 3D 建模工具也能做出很多效果,例如   这个 3D 电信机房监控例子整个都是通过  提供的 API 构建而成:

d79468517a60a244fb6f7a469f506b51.png

不过这个例子中的模型都比较规矩,也就消防栓由一个球 + 圆通构成,其他图形通过 HT 提供的基本 Node 以及 Shape 对象即可搞定:

7f09dd97acdfe69c2c1aecec64f8a3d9.png

25960d2d60d08c88c4b46f0f0a4a199c.png

对于这个餐座椅的例子,特别是一些不规则的花盆、酒杯、圣诞树和那颗爱心,很多人好奇我们是怎么搞出来的。其实蛮简单,就用了《》中的 createRingModel 和 createExtrusionModel 两个构建模型的函数,其中 createRingModel 顾名思义用来构建围绕一圈的环状模型,createExtrusionModel 用来构建基于某个形状的凸出效果,这两个函数生成的 3D 模型都是靠平面的 2D 图形衍生而来,都是靠 HT 系统中构建 2D 不规则多边形时采用的 Points 和 Segments 两个数组参数搞定, Points 和 Segments 的意义可参考 《》:

可生成不规则的 3D 地板:

723888a0d5486a165b346e77a0c253b9.png

可生成不规则的 3D 管线:

33da4725d297158d541117ef1e468203.png

这样大家应该理解了原理,但餐座椅的那几个不规则形状的 magic 参数是如果得来的呢,这还是得借助辅助工具:,

bd93310304cddbe751551504dffabd71.png

fabefaf5fcf7e56e570f9241db4587dc.png

f07ab4ad367587209d702efda911b4c4.png

这个工具多年前为写例子随意搞的,代码挺简单大家直接看  源代码即可,写的比较简陋但挺实用,如何导出?打开控制台,自己打印出 shape 对象的 sements 和 points 参数即可,或等我有空了再来写个可导入导出更完整的例子,或者 you can you up?

其实也不仅仅也用于 Node 节点类型对象的建模,对于连线其实也可以用模型来搞定,例如这个 3D 弹力拓扑图例子,很多人已经觉得挺酷炫了,但我一直对这呆板规矩的管道连线很不爽,于是突发奇想搞了个像狗骨头似的两头粗中间细的连线效果,整个 3D 拓扑图例子一下子高大上了许多:

d6249a3f0686ab737156d7e89f44dfa2.png

这个例子原理是这样的,将连线 Edge 设置成透明不可见的,然后针对每个 Edge 对应一个 Node 节点,这个节点的形状就是被拉伸并定位到连线位置替代连线来显示,而 Node 图形在还没拉伸之前长得如下:

5fa03d9a58d23c8ad865ddf269c1793a.png

这里还有个细节是通过 createMatrix 函数,为每个管线设置一个指向两节点位置的矩阵坐标变换参数到 style 的 mat 属性上,矩阵预算不理解也没关系,直接照抄例子中代码即可,为了方便大家理解我搞了个两个节点一条连线更简单的例子供参考:

bcc46b26bbbaa87236b3cd3fde5501b9.png

今天只是抛砖引玉,《》中还有众多 API 函数,只要有想象力还可以折腾出无数的花样,后续有空我再借助 的 WebGL 3D 自定义建模功能多搞些实用的例子。

115b6b919e311002a7dd3a1e7a51aefa.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值