![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Здравствуйте господа ! Подскажите пожалуйста как мне закрасить пирамиду - а точнее её стороны - т е треугольники, из которых она состоит ! объясните как это сделать и как сделать разными цветами ! если можно - то кодом !
вот сам код моей работы : Код:
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
|
|||
|
|||
![]() В DirectX можно делать закраску, используя цвет вершины или цвет материала. (а уж если включить освещение, то можно будет увидеть и блики).
|
#3
|
|||
|
|||
![]() Очень просто - Командой 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; |