You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Delphi/Firemonkey中设置相机远平面(Far Plane)

Delphi/Firemonkey TCamera 远裁剪面调整方案

TCamera组件本身没有直接提供远平面的可视化属性,但可以通过以下两种方式修改远裁剪面的值,突破默认的1000单位限制:

方法1:运行时动态修改投影矩阵

直接获取并重新计算相机的投影矩阵,指定更大的远平面数值:

var
  ProjMatrix: TMatrix4D;
begin
  // 获取当前相机的投影矩阵
  ProjMatrix := Camera1.ProjectionMatrix;
  // 重新生成透视投影矩阵,将远平面设为5000(可按需调整)
  ProjMatrix := TMatrix4D.CreatePerspectiveFovRH(
    Camera1.FieldOfView,
    Camera1.AspectRatio,
    Camera1.NearPlane, // 保留原近平面设置
    5000.0 // 自定义远平面值
  );
  // 将修改后的矩阵赋值给相机
  Camera1.ProjectionMatrix := ProjMatrix;
end;

注意:如果后续相机的视场角(FieldOfView)或宽高比(AspectRatio)发生变化,需要重新执行这段代码,否则远平面设置会被系统自动覆盖。

方法2:自定义TCamera子类实现持久化设置

通过继承TCamera类,添加自定义的FarPlane属性,重写投影矩阵更新逻辑,实现设计时或运行时的持久化设置:

type
  TCustomCamera = class(TCamera)
  private
    FFarPlane: Single;
    procedure SetFarPlane(const Value: Single);
  protected
    procedure UpdateProjection; override;
  public
    constructor Create(AOwner: TComponent); override;
    property FarPlane: Single read FFarPlane write SetFarPlane;
  end;

constructor TCustomCamera.Create(AOwner: TComponent);
begin
  inherited;
  FFarPlane := 1000.0; // 保持默认值与原生TCamera一致
end;

procedure TCustomCamera.SetFarPlane(const Value: Single);
begin
  if FFarPlane <> Value then
  begin
    FFarPlane := Value;
    UpdateProjection;
  end;
end;

procedure TCustomCamera.UpdateProjection;
begin
  ProjectionMatrix := TMatrix4D.CreatePerspectiveFovRH(
    FieldOfView,
    AspectRatio,
    NearPlane,
    FFarPlane
  );
end;

使用时,你可以直接在代码中创建TCustomCamera实例,或者将该类注册到组件面板后,在设计器中直接设置FarPlane属性,无需每次运行时手动修改矩阵。

内容的提问来源于stack exchange,提问作者GrandmasterB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 11:30:44