Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.03.2010, 15:02   #1
Nitrox
 
Регистрация: 21.03.2010
Сообщений: 9
По умолчанию Delphi. Вращение 3D объектов

Нужно написать программу, которая вращает диаграмму. положение камеры должно изменяться мышью. прочел кучу листингов в нете, моск взорвался...помогите написать код, или хотя бы ссылку дайте на нормальный учебник или статью по этому поводу

Последний раз редактировалось Nitrox; 21.03.2010 в 15:08.
Nitrox вне форума Ответить с цитированием
Старый 21.03.2010, 16:08   #2
keef
Пользователь
 
Регистрация: 12.12.2009
Сообщений: 61
По умолчанию

Создавай ImageList в него пихай картинки под разным углом. Далее присваивай флаги на событие нажатие отпускание кнопки на картинке. И попутно в потоке проверяй координаты мыши по получению которых на условии IF(if (flag=true) and (p.X>n) then Form1.Image1.Picture.Bitmap:=b) показывается определенная картинка из ImageList

А по вопросу как это сделать уже либо во фриланс либо в личку за небольшую плату.

Последний раз редактировалось keef; 21.03.2010 в 16:12.
keef вне форума Ответить с цитированием
Старый 21.03.2010, 17:10   #3
Nitrox
 
Регистрация: 21.03.2010
Сообщений: 9
По умолчанию

У меня обычный Image и там уже создано неподвижное изображение. его только осталось научиться вертеть
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls, ExtCtrls;

type
  zoomImage=record
    x,y:integer;
  end;

  TForm1 = class(TForm)
    Edit1: TEdit;
    Label1: TLabel;
    StringGrid1: TStringGrid;
    Button1: TButton;
    Panel1: TPanel;
    Image2: TImage;
    Button2: TButton;
    procedure Edit1Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  s,ymax:integer;
  x,y: array of integer;
  i:byte;
  h:real;
  zoom:zoomimage;


implementation

{$R *.dfm}

procedure TForm1.Edit1Click(Sender: TObject);
begin
  Edit1.Text:='';
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if (StrToInt(Edit1.Text)>=1) and (StrToInt(Edit1.Text)<=10) then begin
    s:=trunc((zoom.x-200)/(StrToInt(Edit1.Text)*2+1));
    StringGrid1.RowCount:=StrToInt(Edit1.Text);
    for i:=0 to StringGrid1.RowCount-1 do
    begin
      setlength(x,2*StringGrid1.RowCount);
      setlength(y,StringGrid1.RowCount);
      y[i]:=StrToInt(StringGrid1.Cells[1,i]);
    end;
    ymax:=y[0];
    for i:=0 to StringGrid1.RowCount-1 do
    begin
      if y[i]>ymax then ymax:=y[i];
    end;
    x[0]:=(100+s);
    for i:=1 to StringGrid1.RowCount*2-1 do x[i]:=x[i-1]+s;
    if ymax<>0 then h:=(zoom.y-200)/ymax;
    with Image2.Canvas do
    begin
      Image2.Canvas.brush.Color:=clWhite;
      Brush.Color:=clWhite;
      for i:=0 to StringGrid1.RowCount-1 do
      begin
        Rectangle(x[i*2]-80,trunc(zoom.y-195),x[i*2+1]-80,trunc(zoom.y-195-y[i]*h));    //Зад
        Polygon([point(x[i*2+1]-100,trunc(zoom.y-175)),            // Бок
                point(x[i*2+1]-80,trunc(zoom.y-195)),
                point(x[i*2+1]-80,trunc(zoom.y-195-y[i]*h)),
                point(x[i*2+1]-100,trunc(zoom.y-175-y[i]*h))]);
        Polygon([point(x[i*2+1]-100,trunc(zoom.y-175-y[i]*h)),     //Верх
                point(x[i*2+1]-80,trunc(zoom.y-195-y[i]*h)),
                point(x[i*2]-80,trunc(zoom.y-195-y[i]*h)),
                point(x[i*2]-100,trunc(zoom.y-175-y[i]*h))]);
        Rectangle(x[i*2]-100,trunc(zoom.y-175),x[i*2+1]-100,trunc(zoom.y-175-y[i]*h));  //Перед
      end;
    end;
  end
  else
  ShowMessage('Введите данные правильно');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  for I := 0 to 9 do begin
    StringGrid1.Cells[1,i]:='0';
    StringGrid1.Cells[0,i]:=IntToStr(i+1)+'.';
  end;
  zoom.y:=750;
  zoom.x:=825;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Close;
end;
end.
Nitrox вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перетаскивание объектов в Delphi Dennis777 Помощь студентам 2 06.11.2009 15:34
использование в delphi com объектов Anekdot Помощь студентам 0 18.06.2009 19:54
Движение 2-x объектов (Delphi) VadEr Помощь студентам 2 06.06.2009 17:19
Размеры объектов Delphi VadEr Помощь студентам 3 17.05.2009 22:08
Свойства объектов (Delphi) FliPP Общие вопросы Delphi 5 05.01.2008 04:09