Skip to content

Camera 与视口

上一章结尾,观测员小满在本子上记了一笔:天文馆的取景框是个写死的 Rect,跟窗口边界、跟“画面里到底看得见什么”毫无瓜葛。这一章就来拆管这件事的器材。从第 2 章起,每个开窗口的程序都念过同一行咒语——commands.spawn(Camera2d)——念完就有了画面,但它是什么、为什么非它不可,一直没说。

相机(Camera)是世界与画面之间的取景器:世界里的实体千千万,最终落到窗口里的那一帧画面,取哪一块、放多大、画在哪,全由相机说了算。本章把这台取景器拆到底:

  • 拆开 Camera2d——相机也是实体,由一组组件拼成;窗口的底色(清屏色)从哪来、怎么换;
  • 移动与跟拍——相机有 Transform,移镜头就是改坐标,再用 smooth_nudge 给镜头一双“人手”;
  • Projection(投影)——世界坐标到取景框的换算规则,真正的取景框就藏在它的 area 里;
  • 推拉与适配——scale 实现镜头推拉,ScalingMode 决定窗口拉伸时画面如何应对;
  • 多相机与 viewport(视口)——一个窗口摆下多路画面:order 排先后,Viewport 划地盘,做出双人分屏;
  • RenderLayers(渲染层)——给相机和实体分层,谁拍得到谁一目了然,小地图与“防穿帮”道具靠它;
  • Camera3d 与透视投影——正交与透视的分水岭,第四部分三维世界的入场券。

这些类型住在 bevy_camera 这个 crate 里(把画面真正搬上屏幕的渲染机器在 bevy_render,那是第 37 章的远足)。

本章的舞台是青蝉影视城:导演老雷开拍武侠片《侠客行》,红衣侠客阿燕满场走位,白马踏雪绕场奔驰,场记小鹿负责丈量每个镜头拍到了哪。从第一声“开机”到导播台分屏、棚顶沙盘,剧组的每样器材都对应相机的一种本领;杀青那天,你手里就有一套完整的运镜手艺。