Икосаэдр

Mash6a
Дата: 25.05.2011 21:31:16
Вот это прикол... Я конешн стараюсь узнать что-нибудь новое, но не такими литрами же... И тем более что-то не сильно понятно... Сама доперла, что рисуется кубик на каждой грани по формуле отмечаются две точки, потом они соединяються...

Если хотите то вот фотка... http://prohost.ifolder.ru/23767113
Нелояльный
Дата: 25.05.2011 22:41:26
Вам уже дали готовую работающую программу на Delphi 10677002, чем не подошла?
S.G.
Дата: 25.05.2011 23:23:47
Нелояльный
Вам уже дали готовую работающую программу на Delphi 10677002, чем не подошла?
А кто ей поверит, что писала она? ;)
Икосаэдр с тенями и вращениями, ага.
Gust2002
Дата: 25.05.2011 23:26:32
Mash6a
Если хотите то вот фотка... http://prohost.ifolder.ru/23767113


Вообще просили фотки немного другого содержания. Хотя, если
лучшего качества достичь нельзя, то наверное и не нужно

Таки фотка есть, вот примерный алгоритм действий:
1) Как выше написал Нелояльный, нужно скачать исходники (ссылка).
2) После распаковки открыть в Delphi файл OpenGLApp.dpr
3) Далее нужно удалить все комментарии (надписи зеленого цвета)
4) Изменить значение константы WND_TITLE. Ее значение выводится в заголовок формы. Там другие копирайты.
5) Закомментировать обработку сообщения WM_TIMER, чтобы не выводился FPS в заголовок формы
6) Если не понятно, что написано в пункте 5, давай еще одну фотку
7) Чтобы замедлить вращение фигуры в твоем случае нужно нужно вставить "Sleep(50)" перед "glDraw(); SwapBuffers(h_DC);".
Значение функции sleep можно изменить по своему усмотрению
8) Если не понятно, что написано в пункте 7, смотри пункт 6
9) Нажать F9.
Mash6a
Дата: 26.05.2011 02:08:04
Есть фотки, по краиней мере могу доделать:) но задачка нужна не в OpenGL, а простым CAnvas, в это и есть заморочка...
x1ca4064
Дата: 26.05.2011 06:17:29
Mash6a
Есть фотки, по краиней мере могу доделать:) но задачка нужна не в OpenGL, а простым CAnvas, в это и есть заморочка...


Фотка есть - это хороший залог долгого и плодотворного сотрудичества:)

Что Вы можете сделать (или Вам проще сделать):

1. Вычислить 3х мерные координаты вершин Вашего многогранника.
2. Нарисовать многогранник (по вычисленным 3d координатам в некоторой проекции) на Canvas.
Drunken Dolphin
Дата: 26.05.2011 07:37:14
Mash6a
Есть фотки, по краиней мере могу доделать:) но задачка нужна не в OpenGL, а простым CAnvas, в это и есть заморочка...


вот тут есть исходник на Delphi, который рисует на канвасе.
в нем нужно поменять массив точек Points3D на массив координат икосаэдра (их 12 штук, вычислите сами уж).
ну и дорисовать линии между точками
Gust2002
Дата: 26.05.2011 10:37:05
Mash6a
Есть фотки, по краиней мере могу доделать:) но задачка нужна не в OpenGL, а простым CAnvas, в это и есть заморочка...

Лучше бы ты реально попыталась что-нибудь сделать самостоятельно и на конкретных примерах написала, что не получается. Есть хоть какой-нибудь код, который ты можешь откомпилировать? Если по условию задачи не нужно вращать фигуру, то можно сделать имитацию 3D: вычисляешь на бумажке координаты всех вершин, загоняешь их в массив точек (TPoint), далее "передние линии" рисуешь сплошной линией, "задние" - пунктиром. Для этого понадобиться две функции: MoveTo и LineTo; Тип линии задается в свойстве Pen.Style (Значения psDot и psSolid).
Mash6a
Дата: 26.05.2011 12:47:43
unit Unit1;

interface

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

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

var
  Form1: TForm1;

implementation

{$R *.dfm}
procedure Luna(x1,y1,x2,y2:integer);
 begin
  form1.Canvas.MoveTo(x1,y1);
  form1.Canvas.LineTo(x2,y2);
 end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Luna(400,433,300,533);
  Luna(300,533,466,533);
  Luna(466,533,566,433);
  Luna(566,433,400,433);
  Luna(400,433,400,233);
  Luna(400,233,300,333);
  Luna(300,333,466,333);
  Luna(466,333,566,233);
  Luna(566,233,400,233);
  Luna(566,233,566,433);
  Luna(466,333,466,533);
  Luna(300,333,300,533);
end;

end.

Я все таки предерживаюсь, что надо построить куб а из него икосаидер
Gust2002
Дата: 26.05.2011 13:02:59
Mash6a,

Ну и что мешает вычислить на бумаге координаты всех вершин и дописать метод TForm1.Button1Click?