Я создал форму firemonkey для нескольких устройств, которая включала в себя один viewport3d, один куб и одну камеру. Я хочу сделать панель выноски точно в верхней части куба в форме с проекцией камеры.
В 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 C # my Cube1.AbsolutePosition должна изменить базу на размер монитора (экран Android), чтобы разместить CalloutPanel1 поверх cube1.
Кто может применять этот код на Delphi?