我是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指定在其上单击鼠标的射线的位置和方向”
我不明白。我了解相机发出的光线,但以上内容我不了解。