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