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

推荐订阅源

量子位
C
CXSECURITY Database RSS Feed - CXSecurity.com
S
Schneier on Security
博客园 - 叶小钗
博客园 - 三生石上(FineUI控件)
C
Cybersecurity and Infrastructure Security Agency CISA
Engineering at Meta
Engineering at Meta
Google DeepMind News
Google DeepMind News
酷 壳 – CoolShell
酷 壳 – CoolShell
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园_首页
T
Threat Research - Cisco Blogs
C
Cisco Blogs
Recent Announcements
Recent Announcements
S
Securelist
N
Netflix TechBlog - Medium
The Register - Security
The Register - Security
P
Privacy & Cybersecurity Law Blog
宝玉的分享
宝玉的分享
D
Darknet – Hacking Tools, Hacker News & Cyber Security
L
LINUX DO - 热门话题
T
Tor Project blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
月光博客
月光博客
AWS News Blog
AWS News Blog
P
Proofpoint News Feed
博客园 - 司徒正美
L
LINUX DO - 最新话题
Stack Overflow Blog
Stack Overflow Blog
博客园 - 聂微东
H
Help Net Security
Spread Privacy
Spread Privacy
PCI Perspectives
PCI Perspectives
Project Zero
Project Zero
I
Intezer
T
The Blog of Author Tim Ferriss
有赞技术团队
有赞技术团队
The Last Watchdog
The Last Watchdog
C
Check Point Blog
Blog — PlanetScale
Blog — PlanetScale
B
Blog RSS Feed
MyScale Blog
MyScale Blog
V
Vulnerabilities – Threatpost
Recorded Future
Recorded Future
T
Tenable Blog
Jina AI
Jina AI
D
DataBreaches.Net
阮一峰的网络日志
阮一峰的网络日志

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 打赏系统的设计 鼓吹 Cursor 的人技术能力都差 关于 Code Review 的礼节 假如启动一个新的以太坊 PoS 网络 发行加密货币的最好方式 所有 BFT 共识的区块链都是中心化的 对 2025 年区块链行业的预测 Restaking 项目的经济难题 如何看懂任意区块链项目的技术架构 为什么不要做以太坊的二次开发 为什么不要做智能合约开发和 DeFi 开发 我的加密货币定投策略(一) PoS 类型的区块链如何处理分叉 Ethereum Casper 为什么需要 EIP-7251 区块链中的 PBFT 不需要第二次投票 开发者的思维方式 发币的核心要点 炒币投资的小 tips 为什么说 PoW 比 PoS 更加去中心化 牛市对普通人来说意味着什么 如何健康地远程工作 为什么比特币不用概率加密函数 程序员的 “服从权威” 心理 区块链技术面试题 如何区分公有链和联盟链 对 Layer 2 项目创业想法的回复 对区块链共识机制的理解 Pebbling Game 鹅卵石游戏 PDP 文件证明的局限性 不要小瞧 ChatGPT 为什么炒币不是一个好主意 一种在区块链上生成随机数的机制 为什么以太坊的私钥计算不可逆 关于以太坊的私钥碰撞 “猜均值的2/3” dApp 游戏设计 Proof of Storage/Space/Replication 的区别 Proofs of Retrievability 文件证明的含义 对 S-PDP 文件证明的示例和解释 我的加密货币交易机器人 对区块链行业的见闻 随机确认块的共识机制 VRF + BFT 共识引起交易失败的问题 为什么要重视编程思想 对 Web 3.0 的理解 GitBook 好用吗? 一种区块链节点存储扩容的方式 一种基于“自我中心主义”的共识机制 链表常见算法题及解析 基于 Multi-Linked List 的区块链设想 理解哈希函数与序列化 联盟链比公有链差在哪儿 在 Dijkstra 算法中保存路径 为什么数字货币使用区块链是政治问题 区块链:下一代数字身份认证体系的基石 给区块链一个定义 从 Erlang 开始了解 Actor 模型 一种侧边导航栏的交互方式 Rust 的 ownership 是什么? Haskell 中的 Monad 是什么? 浅析 Libra 背后的区块链技术 对区块链的理性认识 Rust 基础语法概述 基于 Java 的爬虫框架 WebCollector Kotlin:简化版的 Scala JavaScript 有关联数组吗? 主流编程语言的异常处理机制 Go 语言基本语法 Scala 语法基础 用 Scala 改写 Java 浅度实践 Python 获取海贼王更新信息 HTML5 音乐可视化
网页技术能实现 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。那么在仅需要二维效果的前提下,网页技术能实现吗?如果要用代码实现各种图形,就依然还是三维建模的问题。最简单的方式是拿个背景图,把文字贴到上面。背景图从哪儿来呢?