Уроки, алгоритмы, программы, примеры

Вход на сайт

Материалы по разделам

Построения
на плоскости (2D)
Графика
в пространстве (3D)
Вычислительная
геометрия
Физическое
моделирование
Фрактальная
графика

Новые комментарии

Я код на C++ набрал сам. Строил кривую Безье, но "прилипал" к нулю. То есть я задаю точки далеко от нуля, а он строил из нуля, а потом только обходил предложенные точки. Потом я нашёл Ваш сайт и эту статью. Оказалось, что я забыл возвести t в...
просто я не так понял, здесь мы вращаем точки куба что вращает сам куб. Мне нужно вращать просто 3д объект , данный способ не подходит
Задавайте объект в мировых координатах. Вращайте его относительно мировой системы координат. А при отрисовке преобразуйте в экранные координаты. Посмотрите пример преобразования в экранные координаты.
Это вращение по мировым осям ? Если да то как сделать по осям объекта ?
Добрый вечер! Область прорисовки остается пустой. Чего-то не хватает. Объясните плз, чего? Рамиль.

Счетчики и рейтинг

Рейтинг@Mail.ru
Скриншот к примеру
Среда программирования: 
Borland Delphi 7.0

Алгоритм:
1) Берем произвольно заданную прямую и делим ее пополам.
2) Потом сгибаем ее так, чтобы полученный угол равнялся 90 градусам.
3) Для полученных отрезков выполняем пункты 1)-2) до тех пор, пока указанный счетчик не станет равен нулю.
4) Как только счетчик станет равен нулю, рекурсивно строим драконову кривую.

Код программы: 

unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, OpenGL;
 
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure SetDCPixelFormat (hdc: HDC);
    procedure Draw(x1,y1,x2,y2,depth:double);
  private
    { Private declarations }
    hrc: HGLRC;
    DC:HDC;
    time : Integer;
 
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
uses Math;
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
begin
 DC:=GetDC(Handle);
 SetDCPixelFormat(DC);
 hrc:= wglCreateContext(DC);
 wglMakeCurrent(DC, hrc);
end;
 
procedure TForm1.SetDCPixelFormat (hdc: HDC);       // формат пикселя(инициализация OpenGL)
var
  pfd: TPixelFormatDescriptor;
  nPixelFormat: Integer;
begin
  FillChar (pfd, SizeOf (pfd), 0);
  nPixelFormat:= ChoosePixelFormat (hdc, @pfd);
  SetPixelFormat (hdc, nPixelFormat, @pfd);
end;
 
procedure TForm1.FormPaint(Sender: TObject);
var
  x1,y1,x2,y2,depth,tx,ty:double;
  i:integer;
begin
  x1:=-0.5; y1:=0; x2:=0.5; y2:=0;     //  координыты фрактала
  depth:=20;                            // степень фрактала
 
 glClearColor(1,1,1,1);         // задаем цвет фона
 glClear (GL_COLOR_BUFFER_BIT);
 glLineWidth(2);               // задаем ширину линии
 
 
  Draw(x1,y1,x2,y2,depth);     // вызываем рекурсивную процедуру просчета и отрисовки фрактала
 
  SwapBuffers(DC);
  wglMakeCurrent (0, 0);
end;
 
procedure TForm1.Draw(x1,y1,x2,y2,depth:double);
  var tx,ty:double;
  begin
   if depth=0 then
    begin
      glBegin(GL_LINES);                 // рисуем линии по заданным координатам
         glcolor3f(random,x1,y1);        // цвет зависит от координаты
         glVertex2f (x1, y1);
         glVertex2f (x2, y2);
      glEnd;
      Exit;
    end;
   tx:=(x1+x2) / 2+(y2-y1) / 2;        // просчет новой точки
   ty:=(y1+y2) / 2-(x2-x1) / 2;
   Draw(x2,y2,tx,ty,depth-1);          // рекурсивный вызов функции фрактала с понижением степени
   Draw(x1,y1,tx,ty,depth-1);
  end;
 
end.

Прикрепленный файлРазмер
frac.rar6.07 кб
Project1.rar154 кб