36 lines
1.3 KiB
TypeScript
36 lines
1.3 KiB
TypeScript
export const anglePresets: Record<
|
|
string,
|
|
{ horizontalAngle: number; verticalAngle: number; zoom: number; prompt?: string }
|
|
> = {
|
|
自定义: { horizontalAngle: 0, verticalAngle: 0, zoom: 50 },
|
|
鱼眼视角: {
|
|
horizontalAngle: 0,
|
|
verticalAngle: 0,
|
|
zoom: 20,
|
|
prompt: "保持主体身份与场景,以鱼眼超广角镜头重新构图,明显桶形畸变",
|
|
},
|
|
倾斜视角: {
|
|
horizontalAngle: 30,
|
|
verticalAngle: 0,
|
|
zoom: 50,
|
|
prompt: "保持主体身份与场景,以荷兰角镜头拍摄,画面地平线倾斜 25 度",
|
|
},
|
|
正面俯拍: { horizontalAngle: 0, verticalAngle: 45, zoom: 50 },
|
|
正面仰拍: { horizontalAngle: 0, verticalAngle: -30, zoom: 50 },
|
|
全景俯拍: { horizontalAngle: 0, verticalAngle: 90, zoom: 0 },
|
|
背面视角: { horizontalAngle: 180, verticalAngle: 0, zoom: 50 },
|
|
};
|
|
export function angleRequestParameters(settings: {
|
|
horizontalAngle: number;
|
|
verticalAngle: number;
|
|
zoom: number;
|
|
}) {
|
|
if (![settings.horizontalAngle, settings.verticalAngle, settings.zoom].every(Number.isFinite))
|
|
throw Error("视角参数必须是有限数值");
|
|
return {
|
|
horizontalAngle: ((settings.horizontalAngle % 360) + 360) % 360,
|
|
verticalAngle: Math.max(-30, Math.min(90, settings.verticalAngle)),
|
|
zoom: Math.max(0, Math.min(10, settings.zoom / 10)),
|
|
};
|
|
}
|