Skip to content

About

三境 · THREE REALMS:听澜阁、烟江钓叟与光影展厅,三幅用 Three.js 程序化构建的互动场景。

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

三境 · THREE REALMS

把三幅用 Three.js 程序化构建的互动场景收进同一个入口:暮色中的临水楼阁「听澜阁」、清晨江雾里的竹筏钓叟「烟江钓叟」,以及深色影棚中的概念轿跑「光影展厅」。

外层负责品牌、三境导航、路由与加载;两套体验各自运行在独立的同源页面里,切换时保留原有的视角、配置与交互状态。

三境 · 听澜阁 三境 · 烟江钓叟 三境 · 光影展厅
听澜阁 · 暮色临水 烟江钓叟 · 清晨江雾 光影展厅 · 概念轿跑
三境移动端 · 听澜阁 三境移动端 · 光影展厅
移动端 · 听澜阁 移动端 · 光影展厅

桌面截图使用 1440×900 视口生成,页面支持自由旋转、缩放与移动端自适应。

快速预览

环境要求:Node.js 20.19+(推荐 22 / 24)。

npm install
npm run dev

启动后打开终端里打印的地址(默认 **http://localhost:5173**)。Windows 也可以直接双击 start.bat,脚本会自动安装依赖、启动开发服务器并打开浏览器。

三个场景可以直接用链接进入:

  • 听澜阁:http://localhost:5173/#tinglan
  • 烟江钓叟:http://localhost:5173/#angler
  • 光影展厅:http://localhost:5173/#showroom

两个体验页也可以独立打开:/experiences/jiangnan.html 与 /experiences/showroom.html。

三境导航

  • 顶部胶囊导航在「听澜阁 / 烟江钓叟 / 光影展厅」之间切换,当前项高亮。
  • 导航按钮聚焦时可用 ← / → 移动;切换会同步地址栏 hash,浏览器前进 / 后退可返回对应场景。
  • 体验页首次被访问时才加载;未激活的页面暂停渲染但保留状态,切回时无需重新加载。
  • 听澜阁与烟江钓叟共用同一个江南体验,底部双景标签与外层导航双向同步。
  • 切换时两层做约 0.5 秒的淡入淡出;首次加载由「三境」加载层等待场景就绪,4 秒后显示等待提示,初始化失败时可重新加载。

画面交互

江南双景

  • 拖动 / 单指:环绕旋转
  • 滚轮 / 双指:缩放视角
  • 自动环游:右上角按钮或 空格;手动操作后短暂暂停再继续
  • 重置视角:右上角按钮、双击画面或 R

光影展厅

  • 拖动 / 单指:环绕看车;滚轮 / 双指:缩放
  • 底部配置栏:外观 / 内饰 / 空间三种模式,切换车漆、轮毂、卡钳、内饰与屏幕主题
  • 右侧视角条:每个模式提供预设机位;点击热点查看部件说明
  • 空间模式:可开关尺寸标注、乘员与行李示意
  • 自动环绕、重置视角、全屏;1 / 2 / 3 切换模式,空格 自动环绕,R 重置
  • 「预约试驾」为纯前端演示表单,不会发送任何数据

三个场景

听澜阁

三开间、两层木构的临水楼阁:青灰色双层曲面瓦顶、微翘屋角、朱褐立柱、细木格窗、斗拱与二层栏杆;楼下石台、踏步、拱桥、石灯、山石、竹丛与荷叶,沉在傍晚暖光和水面倒影里。

  • 自定义曲面屋顶:瓦垄、瓦当、正脊、垂脊、博风板与悬鱼
  • 柱、梁、枋、雀替、斗拱、格扇窗、寻杖栏杆与挂落
  • 实时反射水面、动态水纹、薄雾、浮尘与暮色天空
  • 暖色夕阳、冷色天光、檐下灯笼与窗纸透光
  • 匾额「听澜阁」与室内屏风、茶案陈设

烟江钓叟

清晨薄雾中的江心竹筏:戴斗笠、披蓑衣的老叟盘坐垂钓,竹筏上有鱼篓、茶壶茶盏、酒葫芦与撑篙,筏尾一盏红纸灯笼;左岸芦苇垂柳、白鹭与远飞的鸟,远处淡墨山峦和一座小塔的剪影。

  • 九根竹竿扎成的竹筏、麻绳捆扎、竹席与筏上器物
  • 斗笠、层叠蓑衣、白须与靛青布衣逐层搭建
  • 弯曲竹钓竿、鱼线、红白浮漂与扩散的涟漪
  • 实时水面反射、贴水晨雾、低角度暖光与灯笼冷暖对比
  • 白鹭、飞鸟、垂柳、芦苇、远山与塔影

光影展厅

深色影棚中的通用概念轿跑:低趴溜背比例、封闭式前脸、贯穿灯带、隐藏式门把手与全景玻璃车顶;地面为实时反射,配合柔和轮廓光与橙色点缀。

  • 外观 / 内饰 / 空间三种看车模式,各自独立的预设机位与右侧视角条
  • 8 种车漆、3 种轮毂、3 种卡钳、4 种内饰与 2 种屏幕主题
  • 内饰包含左舵驾驶舱、仪表、中控屏、方向盘与座椅;空间模式提供尺寸、乘员与行李示意
  • 外观热点与部件说明、全屏、自动环绕、配置抽屉与预约试驾演示
  • 车型、参数与配色均为虚构概念数据,页面标注「非官方概念演示」

所有几何体与纹理均在运行时程序化生成,不依赖外部模型、图片、字体或 HDR 文件。

正式构建

npm run build
npm run preview

预览地址:**http://localhost:4173**。构建产物位于 dist/,包含三个 HTML 入口:

dist/index.html
dist/experiences/jiangnan.html
dist/experiences/showroom.html

项目结构

three-realms/
├─ index.html                  # 三境外壳:品牌、导航、加载层与两个 iframe
├─ experiences/
│  ├─ jiangnan.html            # 江南双景独立体验页
│  └─ showroom.html            # 光影展厅独立体验页
├─ src/
│  ├─ shell/
│  │  ├─ main.js               # hash 路由、导航同步、懒加载与暂停/恢复
│  │  └─ shell.css             # 三境外壳界面与响应式布局
│  └─ experiences/
│     ├─ jiangnan/
│     │  ├─ main.js            # 渲染器、相机、交互、场景切换与 embed 桥接
│     │  ├─ style.css
│     │  └─ scenes/            # registry、shared、tinglan、angler
│     └─ showroom/
│        ├─ main.js            # 展台装配、状态、交互与 embed 桥接
│        ├─ style.css
│        ├─ car/               # 车身、细节、轮毂、内饰与材质
│        ├─ data/              # 配色、轮毂、内饰、视角与文案配置
│        ├─ lib/               # 几何、数学与程序化纹理工具
│        ├─ showroom/          # 影棚、相机轨道与空间示意层
│        └─ ui/                # 配置栏、热点、标注与弹窗
├─ docs/screenshots/           # README 展示截图
├─ PROMPT-angler.md            # 烟江钓叟的可复用场景提示词
├─ PROMPT-showroom.md          # 光影展厅的可复用看车提示词
├─ vite.config.js              # 多页面构建入口
├─ LICENSE
├─ start.bat
└─ package.json

实现说明

  • 外壳与两个体验通过同源 iframe 隔离:两套 DOM、CSS 与渲染循环互不干扰,切换时只显隐容器。
  • 体验页加载 ?embed=1 后会给 body 加 is-embed,隐藏与外壳重复的左上角品牌与加载页,并把右上角控制下移,避免与三境导航重叠;不带参数直接打开时保持完整独立页面。
  • 体验页通过 postMessage 与外壳通信:
    • 体验 → 外壳:world:ready(场景可交互)、world:scene(江南当前场景)
    • 外壳 → 体验:world:pause / world:resume,以及江南的 world:scene
  • 未激活的体验只暂停更新与渲染,rAF 与状态保留;切回时恢复,并校正相机时间,避免跳帧。
  • 路由使用 hash:#tinglan / #angler / #showroom,默认 #tinglan;江南内部标签切换会同步到外层 hash 与导航高亮。
  • Vite 使用 build.rolldownOptions.input 配置三个入口;外壳与两个体验各自按需加载。
  • 江南使用 ACES 色调映射、PCF 软阴影、实时反射水面与自适应像素比;光影展厅使用 PMREM 环境光、反射地面与受限像素比。
  • 截图模式:江南地址追加 ?still=1 关闭自动环游;光影展厅追加 ?instant=1 使用固定相机状态。
  • 对 prefers-reduced-motion 做了适配:系统要求减少动态效果时默认不自动环游,按钮仍可手动开启。

来源说明

「听澜阁」的场景概念、需求描述与交互设定参考自一份外部的项目提示词,概念并非完全原创;Three.js 场景实现、程序化建模、材质、灯光与界面代码由本项目独立完成。由于提示词来源未附带原作者与项目链接,暂以“外部提示词参考”标注;如原作者或原项目希望补充署名、调整表述,欢迎联系。

「烟江钓叟」沿用了同一套江南微缩景的创作方向,其场景描述整理为可复用提示词,见 PROMPT-angler.md。

「光影展厅」为通用概念轿跑展示,不使用任何品牌的官方素材、名称或参数,页面标注「非官方概念演示」;可复用提示词见 PROMPT-showroom.md。

许可证

代码以 MIT License 发布,详见 LICENSE。场景概念与提示词的参考说明见上方“来源说明”。

About

三境 · THREE REALMS:听澜阁、烟江钓叟与光影展厅,三幅用 Three.js 程序化构建的互动场景。

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages