Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 30.10.2008, 19:34
heavenly heavenly вне форума
Прохожий
 
Регистрация: 30.10.2008
Сообщения: 1
Репутация: 10
Стрелка как закрасить 3-ех уголную пирамиду ?

Здравствуйте господа ! Подскажите пожалуйста как мне закрасить пирамиду - а точнее её стороны - т е треугольники, из которых она состоит ! объясните как это сделать и как сделать разными цветами ! если можно - то кодом !

вот сам код моей работы :

Код:
unit Unit1;

interface

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

type

  T3DPoint = record
    x, y, z: Extended;
  end;

  TForm1 = class(TForm)
    Puramud: TButton;
    procedure PuramudClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  i:integer;
  teta, phi: real;
  dx, dy:real;

  w: array [1..8] of T3DPoint;	//ìèðîâûå (world) êîîðäèíàòû âåðøèí
  v: array [1..8] of TPoint;	//âèäîâûå (view) êîîðäèíàòû âåðøèí

implementation

{$R *.dfm}

  procedure Line(a: TPoint; b: TPoint);
  begin
  with form1.Canvas do
    begin

      moveto(a.X,a.Y);
      lineto(b.X,b.Y);
    end;

  end;

  procedure PuramudA(col:TColor);

  begin
  Form1.Canvas.Pen.Color:=col;

  Line(v[2],v[7]);
  Line(v[2],v[8]);
  Line(v[6],v[8]);
  Line(v[6],v[7]);
  Line(v[7],v[8]);
  Line(v[2],v[6]);

  end;

procedure TForm1.PuramudClick(Sender: TObject);
begin
PuramudA(Form1.Color);

  w[6].x :=  100;
  w[6].y := -100;
  w[6].z :=  100;

  w[7].x :=  100;
  w[7].y :=  100;
  w[7].z :=  100;

  w[8].x := -100;
  w[8].y :=  100;
  w[8].z :=  100;
  
  for i := 1 to 8  Do
  begin
    v[i].x := Round(
              w[i].x*(-sin(teta)) +
              w [i].y*( cos(teta))) + Form1.Width div 2;
    v[i].y := Round(
              w[i].x*(-cos(phi) * cos(teta)) -
              w[i].y*( cos(phi) * sin(teta)) +
              w[i].z*( sin(phi))) + Form1.Height div 3;
  end;
  PuramudA(clBlack);
  teta:=teta+0.2;
  phi:=phi+0.2;

end;
end.
Ответить с цитированием
  #2  
Старый 31.10.2008, 11:58
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

В DirectX можно делать закраску, используя цвет вершины или цвет материала. (а уж если включить освещение, то можно будет увидеть и блики).
Ответить с цитированием
  #3  
Старый 02.11.2008, 15:46
SergeNik SergeNik вне форума
Прохожий
 
Регистрация: 21.10.2008
Сообщения: 7
Репутация: 10
По умолчанию

Очень просто - Командой FloodFill; Команда закрашивает ограниченную область.
Пример:
With Canvas Do
begin
Pen.Color = clBlack;
Rectangle(10,10,40,40);
FloodFill(20, 20, clWhite, fsSurface);
Rectangle(45,10,85,40);
FloodFill(46, 12, clGreen, fsSurface);
end;
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 03:46.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025