获取被单击的对象的本地3D坐标(Delphi)

时间:2018-11-05 15:42:50

标签: delphi 3d

我是3D编程的新手,请多多包涵。

我有一个Path3D对象,即一个三角形。我需要单击它的坐标。

   MLength := Sqrt(9 - Sqr(1.5));

   P3D := TPath3D.Create(nil);
   P3D.SetSize(3, MLength, 0);
   P3D.Name := 'Front';
   P3D.OnMouseDown := Path3DMouseDown;
   P3D.OnMouseMove := Path3DMouseMove;
   P3D.OnMouseUp := Path3DMouseUp;
   P3D.MaterialBackSource := LightMaterialSource1;
   P3D.MaterialShaftSource := LightMaterialSource1;
   P3D.MaterialSource := LightMaterialSource1;
   P3D.Path.MoveTo(PointF(-1, 1));
   P3D.Path.LineTo(PointF(0, -1));
   P3D.Path.LineTo(PointF(1, 1));
   P3D.Path.LineTo(PointF(-1, 1));
   P3D.RotationAngle.X := -19.47;
   P3D.Position.Z := (-Sqrt(0.75) * 1.5) + (Sqrt(0.75) * 1.5) * 
                      Cos(DegToRad(70.53));
   P3D.Position.Y := 0;
   Dummy1.AddObject(P3D);

我尝试了以下方法。

procedure TForm14.Path3DMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Single; RayPos, RayDir: TVector3D);
begin

   TPath3D(Sender).RayCastIntersect(RayPos, RayDir, MoveBegin);
   MoveBegin := TPath3D(Sender).AbsoluteToLocal3D(MoveBegin);

end;

但是我似乎没有得到我期望的结果。当单击三角形的顶部时,我会期望像(0,-1.299,0),但是那不是我得到的。 阅读mousedown事件的手册时,它说:

“ RayPos和RayDir指定在其上单击鼠标的射线的位置和方向”

我不明白。我了解相机发出的光线,但以上内容我不了解。

0 个答案:

没有答案