【原创】Delphi Fmx 3d 编程学习 StrokeCube 和坐标系及旋转方向

接着上一个 3d例子, 补充完整。

unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Viewport3D,
  FMX.Controls.Presentation, FMX.StdCtrls, System.Math.Vectors, FMX.Controls3D,
  FMX.Objects3D, FMX.Ani;

type
  TForm1 = class(TForm)
    Viewport3D1: TViewport3D;
    StrokeCube1: TStrokeCube;
    bRx: TButton;
    bRy: TButton;
    bRz: TButton;
    tSx: TTrackBar;
    tSy: TTrackBar;
    tSz: TTrackBar;
    tPx: TTrackBar;
    tPy: TTrackBar;
    tPz: TTrackBar;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    procedure bRxClick(Sender: TObject);
    procedure bRyClick(Sender: TObject);
    procedure bRzClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure tSxChange(Sender: TObject);
    procedure tPxChange(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

procedure TForm1.bRxClick(Sender: TObject);
begin
  StrokeCube1.AnimateFloat('RotationAngle.X', 360, 2);
end;

procedure TForm1.bRyClick(Sender: TObject);
begin
  StrokeCube1.AnimateFloat('RotationAngle.Y', 360, 2);
end;

procedure TForm1.bRzClick(Sender: TObject);
begin
  StrokeCube1.AnimateFloat('RotationAngle.Z', 360, 2);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  tPx.Max:= 50;  tPx.Min:=-50;
  tPy.Max:= 50;  tPy.Min:=-50;
  tPz.Max:= 50;  tPz.Min:=-50;

  tSx.Value := 10;
  tSy.Value := 5;
  tSz.Value := 8;

  StrokeCube1.Width := tSx.Value;
  StrokeCube1.Height:= tSy.Value;
  StrokeCube1.Depth := tSz.Value;

  StrokeCube1.Position.Point := Vector3D(0,0,0);
  StrokeCube1.RotationAngle.Point := Vector3D(0,0,0);
end;

procedure TForm1.tPxChange(Sender: TObject);
begin //设置位置
  StrokeCube1.Position.X := tPx.Value;
  StrokeCube1.Position.Y := tPy.Value;
  StrokeCube1.Position.Z := tPz.Value;
end;

procedure TForm1.tSxChange(Sender: TObject);
begin //设置大小
  StrokeCube1.Width := tSx.Value;
  StrokeCube1.Height:= tSy.Value;
  StrokeCube1.Depth := tSz.Value;
end;

end.

“”

补充一点,所有3d对象 还有一个 属性 Projection 为枚举类型,分别为 Camera  和 Screen,
设置为 Camera 时,会以视角为中心,原点为中心点,从左到右为X轴,  从上到下为Y轴,从近到远为 Z轴
设置为 Screen  时,会以屏幕为中心, 原点在左上角

最后 旋转方向为 右手法则, 右手握住坐标轴,同时大拇指对着坐标轴正方向。4个小指对着为当前坐标轴旋转方向

“”

 

添加新评论

纯文本

  • 不允许使用HTML标签。
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。
请输入图片中的字符,不区分大小写