Показать сообщение отдельно
  #2  
Старый 12.10.2008, 18:03
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Альтернатива OpenGL, псевдо 3D
Код:
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin 
 md:=true; xa:=x; ya:=y; 
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin 
 md:=false; xa:=x; ya:=y; 
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
begin
 if md then 
 begin 
  alf:=alf-(x-xa)*2*pi/300; //число 300 означает, на сколько пикселей надо
  bet:=bet-(y-ya)*2*pi/300; //передвинуть мышь для поворота графика на 360 градусов
  xa:=x; ya:=y;
  risovanie; // процедура для перерисовки графика, с новыми значениями углов.
 end;
end;

procedure LineToXYZ(x,y,z:real);
begin
 form1.image1.canvas.lineto(trunc(((y*cos(alf)-x*sin(alf))*cos(gam)+(z*cos(bet)
  +(x*cos(alf)+y*sin(alf))*sin(bet))*sin(gam))*zum+form1.image1.Width/2),
  trunc(-((z*cos(bet)+(x*cos(alf)+y*sin(alf))*sin(bet))*cos(gam)-(y*cos(alf)-
  x*sin(alf))*sin(gam))*zum+form1.Image1.Height/2));
end;

procedure MoveToXYZ(x,y,z:real);
begin
 form1.image1.canvas.moveto(trunc(((y*cos(alf)-x*sin(alf))*cos(gam)+(z*cos(bet)
  +(x*cos(alf)+y*sin(alf))*sin(bet))*sin(gam))*zum+form1.image1.Width/2),
  trunc (-((z*cos(bet)+(x*cos(alf)+y*sin(alf))*sin(bet))*cos(gam)-(y*cos(alf)-
  x*sin(alf))*sin(gam))*zum+form1.Image1.Height/2));
end;
MoveToXYZ(); перейти в точку в пространстве
LineToXYZ(); вектор от первой точки ко второй в пространстве
для понятия принципа работы оч. хорошо подойдет.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием