返回知识库

网页 3D · 搭一个场景

场景、相机与渲染器Scene / Camera / Renderer

画面 = 场景(放东西)+ 相机(从哪看、看多宽、看多远)+ 渲染器(画到 canvas)。fov 决定广角还是长焦,near / far 之外的东西会被裁掉,窗口变了要同步 aspect。

把 AI 给的相机调到「三样都完整入镜」

AI 给的相机是 fov 30、near 3.6、far 18:植物被切了一块,楼整个不见了。拖动下面的滑杆,主视图和右侧(窄屏在下方)俯视图里的黄色视锥会一起变;每样东西旁边和清单里会实时告诉你它是完整入镜、被 near 切掉、被 far 裁掉,还是出了画。最后打开「忘了更新 aspect」,看桌上的球怎样被拉成椭圆。

  1. 场景 Scene植物、桌子、楼 · 3 件
  2. 相机 PerspectiveCamerafov 30° · near 3.6 · far 18
  3. 渲染器 WebGLRenderer—

正在按需加载 3D 引擎(three.js)…

调相机(滑杆可用方向键微调)
任务:让植物、桌子、楼都完整入镜—
  • 植物近处 · 约 3.5 米—
  • 桌子中间 · 约 6 米—
  • 楼远处 · 约 26 米—
  • 画面比例球应该是圆的—

正在按需加载 3D 引擎……

知识点:相机决定画面里有什么

刚才每拖一次滑杆,视锥都换了形状,下面是它背后的规则。

  • 三件套各管一件事:场景装着所有物体,相机决定从哪看、看多宽、看多远,渲染器把相机看到的画到 canvas 上。东西在场景里,不代表在画面里。
  • 视角 fov 越大越广角:同一个位置能看到更多,物体显得更小、边缘更容易变形;越小越像长焦,容易让主体出画。
  • near / far 是相机能看到的最近和最远距离:比 near 近、比 far 远的部分会被直接裁掉,常见症状是「模型一半被切掉」「远处的东西消失」。
  • aspect 是画布的宽高比:窗口尺寸变化时要同步更新 aspect 和渲染尺寸,否则画面会被拉伸或压扁。

什么时候用、怎么验收

只要 AI 报告里出现 PerspectiveCamera、fov、near、far,或者你发现模型被切、画面变形,就回到这三件套检查。

  • 信号:模型边缘缺了一块(多半是 near 太大或相机离太近)、远景突然消失(far 太小)、拉宽窗口后东西变扁变胖(没同步 aspect)。
  • 需求里写清数字:「透视相机,fov 45°,near 0.1,far 100,主体完整入镜」,而不是「把相机摆好看一点」。
  • near 不要随手设成 0 或极小值、far 也别无限大:两者差距太大,远处的面会闪烁打架。够用就好。
  • 验收一:主体在桌面宽屏和手机竖屏都完整入镜,没有被切掉的边。
  • 验收二:拖动浏览器窗口变宽变窄,圆的东西始终是圆的,画面不拉伸。

正反例:同一个「把桌子摆进镜头」

需求只差一句话,拉宽窗口后的画面完全不同。

反例「把相机摆好看一点」

AI 凭感觉设了相机,没写 resize 处理:桌子在 AI 的屏幕上刚好,你一拉宽窗口,桌上的球变成椭圆,远处的背景楼也被 far 裁掉了。

正例「fov 45、near 0.1、far 100,整张桌子完整入镜;窗口变化时同步 aspect」

数字可以对照验收;AI 在窗口尺寸变化时更新相机的 aspect 和渲染尺寸,拉宽拉窄球都是圆的,远景也在。

快速自测

你用 3D 展示一只手表,镜头拉近到表盘时,表盘前面一部分突然「被削掉」,能看到表的内部。最可能是哪一项?

继续查证

术语的技术定义和行为以这些一手或权威资料为准。

下一步学

和本知识点经常一起出现的概念。