Почему вывод worldtoscreen () для Windows правильный и неправильный для Android - PullRequest
0 голосов
/ 13 июня 2019

Я создал форму 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?

...