Skip to content

正交相机

相机是 VN 的关键元素,作为独立于场景的观察者,它们决定了场景中的哪些内容会被‘拍摄’并最终呈现在屏幕上。

正交相机通过定义一个 长方体的可视范围(视体 Frustum) 来决定渲染内容。与透视相机不同,在这个范围内的物体,无论远近,在屏幕上显示的大小都是一致的。这非常适合 2D 背景、立绘以及 UI 的渲染。

使用 regCamera 函数,可以帮助我们快速创建一个正交相机(并返回一个句柄)。

export const view = regCamera("main", c => {});

regCamera 接受两个参数。

regCamera(
"main", // 第一个参数
c => { } // 第二个参数
);
  • main 是相机的名称,可以任意指定(但不能与其他相机重名)。
  • 第二个参数则是相机的配置函数,可以在这里指定相机的视锥体等。
    我们只需要修改 c => { ... } 内部的内容;这里的 c 是一个构建器,可以任意指定其名称。

regCamera 函数会返回一个相机句柄,可以通过这个句柄来引用这个相机。

export const view = regCamera("main");
  • view 是一个相机句柄,其名称可以任意指定(但不能与其他句柄重复)。
  • export const 表示 view 是一个全局变量,可以在其他文件中引用。

regCamera 的第二个参数(可选)是一个配置函数,可以在这里指定相机的的视锥体等。

视口边界

  • left, right:定义视体在 X 轴上的左、右边界。
  • top, bottom:定义视体在 Y 轴上的上、下边界。

深度范围

  • near, far:定义视体在 Z 轴上的前、后边界。
    只有 Z 轴坐标位于 [near, far] 区间内的物体才会被渲染。
默认值
r => {
r.left = -960;
r.right = 960;
r.top = 540;
r.bottom = -540;
r.near = 0.1;
r.far = 1000;
};
  • zoom 属性用于缩放相机视口,类似于相机的数码变焦,仅放大画面,不改变透视关系。
默认值
r => {
r.zoom = 1;
};

在默认项目下,ShxNovel 会自动注册一个名为 main 的相机,并作为默认相机。你可以在 world/pipeline.ts 中修改相机的配置。

对于简单的 VN 应用来说,可能并不需要额外的相机,这个章节的主要功能是帮助创作者了解相机的用途,并了解 ShxNovel 注册相机(以及其他对象)的基本语法。

但如果您需要更复杂的演出,请在未来参考 渲染管线,在其中利用相机来构建更复杂的演出。