Мне нужно обратное преобразование перспективы, написанное на Паскале/Дельфи/Лазаресе. См. Следующее изображение:
Мне кажется, мне нужно пройти через пиксели назначения, а затем вычислить соответствующую позицию в исходном изображении (во избежание проблем с ошибками округления и т.д.).
function redraw_3d_to_2d(sourcebitmap:tbitmap, sourceaspect:extended, point_a, point_b, point_c, point_d:tpoint, megapixelcount:integer):tbitmap;
var
destinationbitmap:tbitmap;
x,y,sx,sy:integer;
begin
destinationbitmap:=tbitmap.create;
destinationbitmap.width=megapixelcount*sourceaspect*???; // I dont how to calculate this
destinationbitmap.height=megapixelcount*sourceaspect*???; // I dont how to calculate this
for x:=0 to destinationbitmap.width-1 do
for y:=0 to destinationbitmap.height-1 do
begin
sx:=??;
sy:=??;
destinationbitmap.canvas.pixels[x,y]=sourcebitmap.canvas.pixels[sx,sy];
end;
result:=destinationbitmap;
end;
Мне нужна настоящая формула... Поэтому решение OpenGL не было бы идеальным...