我用 Gemini 3 手搓了一个“赛博电风扇”

119 阅读8分钟

试用地址: eee1023.github.io/3d-fan/

今天突发奇想,既然天气(虽然是冬天但心里)有点燥热,不如让 AI 给我写个电风扇吹吹。于是我找来了 Google 的 Gemini 3 模型,开启了一场“赛博造物”之旅。

这不仅仅是一个代码生成的记录,更像是一个产品经理(我)和全栈工程师(Gemini)之间的极限拉扯。

第一阶段:这就……是个风扇?

我给出的需求很简单直接:

“帮我写一个网页电风扇,可以开关、调1 2 3挡,还可以左右摇头。”

Gemini 反应很快,刷刷刷几下,HTML、CSS、JS 全套代码就出来了。 打开一看,嘿,还真有模有样!

  • 复古造型,蓝色的扇叶。
  • 按钮能点,1/2/3 档转速肉眼可见地变快。
  • 还有一个“SWING”开关,点了之后风扇头确实在左右晃。

但是!  作为一个对生活品质有要求的人,我发现了一个大问题:这摇头太假了! 它就像一个纸片人在那里左右倾斜(Rotate Z),完全没有那种“转头”的空间感。

图片

于是我直接怼了回去:

“你这摇头不对啊,风扇不够立体,你知道风扇怎么摇头的吗?”

第二阶段:3D 化的“降维打击”

被我“嫌弃”之后,Gemini 显然是去反思了。它立马意识到我需要的是 3D 旋转

它没有找借口,直接对 CSS 进行了重构:

  1. 引入 3D 空间:给容器加了 perspective,让网页有了纵深感。
  2. 真·摇头:把之前的平面旋转改成了 rotateY,现在风扇头是真实地绕着轴心左右转动。
  3. 细节狂魔
    • 给电机加了后盖,转头的时候能看到侧面。
    • 前网罩和后网罩拉开了距离(translateZ),有了层次感。
    • 连底座的阴影都变得更真实了。

图片

再次刷新页面,哇!这次是真的“立”起来了。看着它在屏幕里摇头晃脑,我甚至感觉到了屏幕里吹出来的风。

第三阶段:注入灵魂的“白噪音”

看着这个 3D 风扇转啊转,我总觉得缺了点什么。 对,是声音!没有“呼呼”声的风扇,是没有灵魂的。

“我想要电风扇转动的时候伴随声音,你实现一下。”

这次 Gemini 给了我一个惊喜。它没有让我去下载什么 mp3 文件(那样太 low 了,还得加载),而是直接用 Web Audio API 写了一段代码,实时生成声音!

  • 它利用“布朗噪声(Brown Noise)”模拟低频的轰鸣声。
  • 动态音效
    • 1档:轻微的嗡嗡声。
    • 2档:明显的风声。
    • 3档:狂暴的呼啸声!
    • 关机时,声音还会随着扇叶减速慢慢淡出。

成果展示

  • 纯代码绘制(没有一张图片)。
  • 真 3D 建模(CSS 3D Transform)。
  • 自带音效(Web Audio API)。
  • 交互丝滑的赛博电风扇。

这一通操作下来,我不得不感叹:Gemini 3 不仅代码写得快,理解能力和"审美"也是在线的。从一个平面的"纸片风扇",到被我挑刺后进化成 3D 版,最后加上听觉反馈,它完美地执行了我的每一个脑洞。

第四阶段:极限拉扯,功能狂飙

但故事到这里还没结束。我突然觉得,既然都做到这份上了,不如再"折腾"一下?

飘带与惯性:让风"看得见"

"你这个飘带好假,完全没有飘动的效果。"

第一版的飘带只是僵硬地旋转,毫无灵动感。于是 Gemini 重新设计了物理模型:

  • 使用 rotateskewXscaleY 组合,模拟布料的扭曲和拉伸
  • 不同档位有不同的飘动幅度:1档微微飘,3档几乎被吹平
  • 加上渐变色和圆角,看起来像真的丝绸

还有物理惯性:关机后,扇叶不会立刻停下,而是会滑行 4 秒钟才慢慢停止,非常真实。

夜间模式与俯仰调节

  • Night Mode:点击月亮图标🌙,整个界面变暗,按钮发出红色荧光,赛博朋克感拉满
  • Tilt Control:新增滑杆,可以上下调节风扇角度(±20度)

小狗登场:意外的"剧情"

"我觉得还差一条小狗,享受这个风扇的凉爽,外面很热。"

这个需求一出,Gemini 立刻开始"造狗":

  • 纯 CSS 绘制的卡通小狗,有头、耳朵、身体、腿
  • 风扇关闭时:小狗热得冒汗(💧汗珠动画)
  • 风扇开启时:小狗伸出舌头,耳朵随风扇档位疯狂扇动
    • 1档:轻轻扇
    • 3档:耳朵几乎要飞起来,舌头被吹得更长!

但问题来了……

位置大战:小狗你别挡着我的风扇!

接下来的对话变成了一场"空间规划"的拉锯战:

  • 第一次:小狗挡住了风扇
  • 第二次:还是挡住了
  • 第三次:"哎哟喂,你没听懂吗,小狗挡住我的风扇按钮了!"

我甚至上传了截图给它看。Gemini 终于理解了,把小狗移到了风扇的左边。

室内外对比:营造氛围感

"再优化一下画面,小狗在风扇旁边很凉快,外面太阳很热烈,整个画面有对比感。"

Gemini 的解决方案:

  1. 室内:深灰色墙壁,凉爽的蓝色光晕(风扇开启时)
  2. 窗户:右上角加了一个带木质边框的窗户,里面是:
    • 橙红金黄的渐变天空
    • 巨大的太阳☀️在跳动
    • 热浪在窗户里扭曲飘动

视觉对比瞬间拉满:外面火炉,里面冰爽!

沙发与女孩:温馨的最后一笔

"再加上一个沙发,里面还有一个短发女孩子。"

Gemini 又开始"造人":

  • 紫色渐变的沙发,有靠背和扶手
  • 短发女孩,穿着粉色上衣和蓝色牛仔裤
  • 女孩会眨眼,风扇开启时头会轻轻摆动(放松状态)

然后又是一轮位置调整……

"小狗和女孩子都坐到沙发上,不要和风扇重叠。" "把沙发、人和狗放到风扇左边,不要挡住风扇。"

经过多次调整,最终布局:

  • 左边:女孩和小狗坐在紫色沙发上
  • 中间:电风扇(完全清晰可见)
  • 右上角:窗外的炎热太阳

最终成果

图片

一个完整的夏日午后场景:

  • 🪟 窗外太阳炙烤,热浪滚滚
  • 🏠 室内深色墙壁,凉爽舒适
  • 💨 3D电风扇在中间,可以摇头、调速、俯仰
  • 🛋️ 女孩和小狗坐在沙发上,享受凉风
  • 🎵 风扇转动时有真实的声音
  • 🎀 红飘带随风飘动
  • 🌙 还有夜间模式可以切换

技术栈

  • 纯 HTML/CSS/JavaScript
  • CSS 3D Transform(3D效果)
  • Web Audio API(实时音效生成)
  • 复杂的 CSS 动画(飘带、耳朵、惯性)

开发时长:约1小时(包括无数次"你挡住我的风扇了")

感想

这次体验让我深刻感受到 Gemini 3 的几个特点:

  1. 理解力强:从"摇头不对"到"3D旋转",它能准确理解我的意图
  2. 执行力高:每次需求都能快速实现,代码质量很高
  3. 有耐心:被我反复挑刺(尤其是位置问题),它没有崩溃,而是一次次调整
  4. 有创意:Web Audio API 生成声音、飘带的物理模型,都是它主动提出的优化方案

当然,也有一些小问题:

  • 空间位置的理解有时需要多次沟通(或者上传截图)
  • 对"不要挡住"这种负向需求,需要更明确的指令

但总体来说,这是一次非常愉快的"人机协作"体验。我像一个产品经理一样提需求,Gemini 像一个全栈工程师一样实现,最终我们一起"造"出了一个有趣的作品。

部署上线

做完之后,我想让别人也能看到这个作品。Gemini 给我推荐了几种部署方案。

方案选择

最初我问能不能部署到 GitBook,但 Gemini 指出 GitBook 主要用于文档,不太适合这种交互式应用。它推荐了更合适的方案:

GitHub Pages(我选择的方案):

  • ✅ 完全免费
  • ✅ 部署简单
  • ✅ 自动生成网址
  • ✅ 支持自定义域名

部署步骤

方法一:网页上传(最简单)

  1. 访问 GitHub 并登录

  2. 创建新仓库:

    • 点击右上角 "+" → "New repository"
    • 仓库名:3d-fan(或任意名称)
    • 选择 Public(公开)
    • 点击 "Create repository"
  3. 上传文件:

    • index.html
    • style.css
    • script.js
    • 在新仓库页面,点击 "uploading an existing file"
    • 将 fan 文件夹里的所有文件拖拽上传
    • 点击 "Commit changes"
  4. 启用 GitHub Pages:

    • 进入仓库的 Settings(设置)
    • 左侧菜单找到 Pages
    • Source 选择 main 分支
    • 文件夹选择  / (root)
    • 点击 Save
  5. 等待几分钟,访问:

    https://your-username.github.io/3d-fan/
    

方法二:命令行(适合熟悉 Git 的人)

# 1. 初始化仓库
git init

# 2. 添加文件
git add fan/

# 3. 提交
git commit -m "Add 3D fan project"

# 4. 连接到 GitHub
git remote add origin https://github.com/your-username/3d-fan.git

# 5. 推送
git push -u origin main

然后在 GitHub 仓库设置中启用 Pages。

方法三:一键部署(最快)

使用 Vercel 或 Netlify:

  • 直接拖拽 fan 文件夹
  • 自动生成网址
  • 支持自动部署

最终效果

部署完成后,任何人都可以通过网址访问我的 3D 电风扇


下次再热的时候,我就把这网页打开,开到 3 档,看着女孩和小狗在沙发上吹风,听着那呼呼的风声……嗯,心静自然凉。🌬️