惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Y
Y Combinator Blog
IT之家
IT之家
博客园_首页
量子位
博客园 - 三生石上(FineUI控件)
小众软件
小众软件
博客园 - 聂微东
罗磊的独立博客
酷 壳 – CoolShell
酷 壳 – CoolShell
Hugging Face - Blog
Hugging Face - Blog
V
V2EX
爱范儿
爱范儿
大猫的无限游戏
大猫的无限游戏
宝玉的分享
宝玉的分享
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
雷峰网
雷峰网
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Google DeepMind News
Google DeepMind News
Microsoft Azure Blog
Microsoft Azure Blog
有赞技术团队
有赞技术团队
S
SegmentFault 最新的问题
Engineering at Meta
Engineering at Meta
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com

smallyu的博客

为什么买的加密货币一定要去中心化 RISC-V 虚拟机无法代替 EVM 虚拟机 Polkadot 的 Existential Deposit 机制错在哪里 利息,套利,交易策略,金融市场 LayerZero 从来不挑战比特币的地位 默认参数引起的以太坊节点运行错误 硬件钱包与资产安全 预测市场比币圈更赌场 为什么去中心化的跨链桥不可能实现 我对于 AI 时代的答案 不要投资任何隐私币 区块链技术世界的三大真理 以太坊 AA 钱包的致命问题是什么 基于 AI 语义执行的 MCP 区块链的设计 一个集成 Geth 和 CometBFT 的兼容层 我的加密货币定投策略(二) DeFi 基础: 理解 AMM 定价机制 Go 语言 GMP 调度器的原理是什么 Web3 项目分析计划 对 Psyche Network 项目的分析 continuation 教程: 理解 CPS 如何开发一个比特币符文(Runes)协议 比特币脚本开发教程 我从王垠的计算机科学视频班学到了什么 区块链技术面试题(2025年版) Rust 语言容易让新手困惑的一个“过度优化” Solana 智能合约开发教程 (1) 尝试开发一个最小 EVM 虚拟机 基于 ZK 的链上身份系统设计 一个 Web3 打赏系统的设计
网页技术能实现 3D 建模吗?
2020-09-20 · via smallyu的博客

2020-09-20

网页技术(HTML5、CSS3、JavaScript)能实现效果炫酷的 3D 建模甚至是 3D 动画效果吗?我暂时认为是不可以的。比如期望这样的页面效果:

d3.js 是不用考虑的,它仅仅是一个数据可视化的工具,和 3D 建模是两个领域。

three.js 似乎是目前比较流行的 3D 建模库。假如 three.js 可以做到的话,应该怎么做呢?首先的想法是画这样一个正方体出来:

3d 建模里的立方体相当于编程世界的 hello world,很容易就能出来:

给场景加上灯光,正方体就不是黑漆漆的了。然后给正方体加上颜色,改一下场景的背景色,再把灯光调到正方体的上面,正方体就能像样子一点了:

目标正方体的边缘是发光的,而且是渐变色。怎么给正方体加一个边缘线呢,正方体本身是没有这种属性的,只能用线性材料(three.js 里的 LineBasicMaterial,正方体用的是 MeshPhongMaterial)再画一个正方体出来,套在实体正方体上:

怎么让线性的正方体发光呢?线性材料(LineBasicMaterial)是不能使用渐变色的,只有着色器材料(ShaderMaterial)可以使用渐变色。着色器材料可以实现多彩的效果,比如这样(来自 StackOverflow),:

但是到这里遇到问题了。在 three.js 里,渲染一个物体需要两个参数,一个是 geometry(几何体),一个是 material(材料),线性材料和着色器材料都是材料的种类。(TorusKnotGeometry 是上图用到的几何形状)

线条正方体 = EdgesGeometry + LineBasicMaterial
渐变曲线条 = TorusKnotGeometry + ShaderMaterial

现在想要线性材料和着色器材料(LineBasicMaterial 和 ShaderMaterial)组合是不合逻辑的,我没有找到实现发光的正方体边缘效果的方法。把着色器用在正方体的效果是这样的(颜色从 0x215ec9 到 0x000000):

所以然后呢?我意识到即使实现了一个好看的正方体,离渲染出整张图还差的太多。比如这样的文字效果怎么做?

three.js 的 Texture 本身效果是不错的,可是怎么把文字安安稳稳的放到正方体上,还带透明的黑色背景框?再比如这五彩斑斓的线条,以及准确的箭头指向:

还有整个图上十多种元素的位置布局、动画效果。

我相信 three.js (WebGL)在技术能力上是可以实现这样效果的,甚至官方的 example 里网页游戏都有,不过假如要实现一个网页游戏,一定会用到图像素材,素材从哪儿来呢?还是得回到 PS、AI 之类的工具上,如果用上了那样的生产力工具,就没有必要用 js 来写布局和动画了。单纯的网页技术似乎很难完全解决 3D 建模的问题。H5 动画也是类似的情况。

单纯写代码来 3D 建模的另一个问题是不直观,代码是违反直觉和视觉的,写个网页、APP界面似乎还可以(二维的)。如果可以在一个画布上直接放置正方体和线条,然后鼠标拖动改变位置、调整颜色,以及添加各种其他元素,像玩游戏(比如我的世界)一样操作简便,不就比写代码好多了吗……那不就是 Adobe Animate 吗?

可惜 Adobe Animate 没有 Linux 版本,而且 Linux 下的替代品 Blender 有点性能问题。

回到一开始期望的效果图上,图片出自一个大屏 UI 的 设计演示,其实原效果不是三维的,作者使用的工具是 PS、AI。那么在仅需要二维效果的前提下,网页技术能实现吗?如果要用代码实现各种图形,就依然还是三维建模的问题。最简单的方式是拿个背景图,把文字贴到上面。背景图从哪儿来呢?