我创建了一个多设备的firemonkey表单,其中包含一个viewport3d,一个Cube和一台摄像机。我想在带有摄像机投影的表单中的多维数据集的正上方完全制作一个标注面板。
在Firemonkey中,我们可以使用worldtoscreen()
将绝对位置属性转换为屏幕位置。结果点对于Windows平台是正确的,但是不幸的是,在Android平台中,该点是不准确的。
Procedure TForm50.Cube1Render(Sender: TObject; Context: TContext3D);
var p:TPoint3D;
x,y:real;
Begin
p:=context.worldtoscreen(TProjection.Camera, Cube1.AbsolutePosition);
Label1.Text:=(p.x.tostring+' '+P.Y.ToString);
x:=p.X-(CalloutPanel1.Width /2);
y:=p.y-CalloutPanel1.Height;
CalloutPanel1.Position.X:=x;
CalloutPanel1.Position.y:=y;
End;
更新 本文的WorldToScreen function C#的基础是我的Cube1.AbsolutePosition必须基于监视器(Android屏幕)的大小进行更改,以将CalloutPanel1放置在cube1上。 谁可以在Delphi上应用此代码?