Рисование изображения в трехмерном пространстве с помощью GDI, GDI+ и Delphi

Мне нужно использовать Delphi XE3, чтобы написать небольшое приложение для рисования на TCanvas изображения. Я прочитал это изображение из файла DXF, поэтому я знаю имя файла, масштаб по осям X и Y и вращение трехмерного пространства, а также оси X, Y и Z (подробнее см. здесь).

Изображение представляет собой растровое изображение, поэтому я могу использовать TBitmap для его загрузки. Моя проблема: я не могу найти правильную функцию для масштабирования в 2 направлениях и рисования «в пространстве» (с вращением).

Мне нужно использовать как GDI, так и GDI+, если это возможно.


person Martin    schedule 27.12.2013    source источник
comment
Итак, какую проекцию вы собираетесь использовать?   -  person David Heffernan    schedule 27.12.2013


Ответы (1)


Вероятно, ваша проблема заключается в переводе 3D-координат в 2D. Я думаю, вы могли бы использовать следующие две процедуры из этого ответа:

function RotateAroundXAxis(const P: TPoint3D; Alfa: Double): TPoint3D;
begin
  Result.X := P.X;
  Result.Y := P.Y * Cos(Alfa) + P.Z * Sin(Alfa);
  Result.Z := P.Y * -Sin(Alfa) + P.Z * Cos(Alfa);
end;

function RotateAroundYAxis(const P: TPoint3D; Beta: Double): TPoint3D;
begin
  Result.X := P.X * Cos(Beta) + P.Z * Sin(Beta);
  Result.Y := P.Y;
  Result.Z := P.X * -Sin(Beta) + P.Z * Cos(Beta);
end;

На самом деле этот ответ касается большего количества 3D-вещей и обрабатывает как GDI, так и GDI +: он может предоставить все, что вам нужно знать.

person NGLN    schedule 27.12.2013