Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не очень умный вопрос, Как работать с 3D графикой в Delphi 
:(
    Опции темы
Goganchic
  Дата 19.6.2004, 07:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 678
Регистрация: 18.6.2004

Репутация: нет
Всего: 5



Кто знает как работать с 3D графикой в Delphi?
Например делать 3D игры.
Если не трудно, то подскажите как.
Заранее благодарен baaa.gif

Это сообщение отредактировал(а) Goganchic - 19.6.2004, 07:45
PM Jabber   Вверх
_vova_
Дата 19.6.2004, 08:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 18.6.2004
Где: Харьков

Репутация: нет
Всего: нет



Качаешь библиотеку GLScene http://glscene.org, и начинаеш работать. Все просто, понятно, целая куча примеров, но немного кривоватый хелп.
PM MAIL   Вверх
<Spawn>
Дата 19.6.2004, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Вот тебе пример OpenGL, только он не трехмерный(баловался месяцев 5 назад)smile.gif Как за трехмерку возьмусь переделаю

Код
unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   Timer1: TTimer;
   procedure FormCreate(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
   procedure FormPaint(Sender: TObject);
   procedure Timer1Timer(Sender: TObject);
 private
   hrc : HGLRC;
   Rotate : double;
 public
   procedure SetDCPixelFormat(dc : HDC);
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.SetDCPixelFormat(dc: HDC);
var
 pfd : TPixelFormatDescriptor;
 nPixelFormat : integer;
begin
 nPixelFormat := 0;
 ZeroMemory(@pfd, SizeOf(TPixelFormatDescriptor));
 pfd.dwFlags := PFD_DOUBLEBUFFER;
 nPixelFormat := ChoosePixelFormat(dc, @pfd);
 SetPixelFormat(dc, nPixelFormat, @pfd);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 Rotate := 0.0;
 SetDcPixelFormat(Canvas.Handle);
 hrc := wglCreateContext(Canvas.Handle);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 wglDeleteContext(hrc);
end;

procedure TForm1.FormPaint(Sender: TObject);
var
 i, j : integer;
begin
 wglMakeCurrent(Canvas.Handle, hrc);

 glClearColor(0.5, 0.5, 0.75, 1.0);
 glClear(GL_COLOR_BUFFER_BIT);

 glViewport(0, 0, ClientWidth, ClientHeight);

 glLoadIdentity;

 glRotatef(Rotate, 0.0, 0.0, 1.0);
 for j:= 0 to 35 do
 begin
   glRotatef(45.0 / 18.0, 0.0, 0.0, 1.0);
   glbegin(GL_LINE_LOOP);
     glColor3f(j / 35.0, j / 35.0, j / 35.0);
     for i:= 0 to 5 do
       glVertex2f(j / 72.0 * cos(2 * Pi * i / 6),
                  j / 72.0 * sin(2 * Pi * i / 6));
   glEnd();
 end;

 glRotatef(-45 / 18 * 36, 0.0, 0.0, 1.0);

 SwapBuffers(Canvas.Handle);

 wglMakeCurrent(0, 0);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 Rotate := Rotate + 5.0;
 FormPaint(Self);
end;



--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Goganchic
  Дата 19.6.2004, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 678
Регистрация: 18.6.2004

Репутация: нет
Всего: 5



Цитата(_vova_ @ 19.6.2004, 08:12)
Качаешь библиотеку GLScene  http://glscene.org, и начинаеш работать. Все просто, понятно, целая куча примеров, но немного кривоватый хелп.

Этот сайт что-то не грузится. notify.gif
PM Jabber   Вверх
_hunter
Дата 19.6.2004, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



без проблем грузится
на всякий случай вот прямая ссылка:
http://glscene.sourceforge.net/index.php


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Goganchic
Дата 20.6.2004, 07:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 678
Регистрация: 18.6.2004

Репутация: нет
Всего: 5



_hunter, спасибо за ссылку, только я не понял: там хелп в проге есть или обязательно нужно FAQ читать. Есть одно неудобство: сайт на английском языке
<Spawn> вот твой код с моими вопросами:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OpenGL{что это за Unit? Вроде стандартный}, ExtCtrls;

type
TForm1 = class(TForm)
Timer1: TTimer;{Какой интервал у таймера?}
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
hrc : HGLRC{Что это за тип?};
Rotate : double;
public
procedure SetDCPixelFormat(dc : HDC);{Что за процедура?}
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.SetDCPixelFormat(dc: HDC);
var
pfd : TPixelFormatDescriptor{Что это за тип?};
nPixelFormat : integer;
begin
nPixelFormat := 0;
ZeroMemory(@pfd, SizeOf(TPixelFormatDescriptor));
pfd.dwFlags := PFD_DOUBLEBUFFER;
nPixelFormat := ChoosePixelFormat(dc, @pfd);
SetPixelFormat(dc, nPixelFormat, @pfd);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Rotate := 0.0;
SetDcPixelFormat(Canvas.Handle);
hrc := wglCreateContext(Canvas.Handle);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
wglDeleteContext(hrc);
end;

procedure TForm1.FormPaint(Sender: TObject);
var
i, j : integer;
begin
wglMakeCurrent(Canvas.Handle, hrc);

glClearColor(0.5, 0.5, 0.75, 1.0);
glClear(GL_COLOR_BUFFER_BIT);

glViewport(0, 0, ClientWidth, ClientHeight);

glLoadIdentity;

glRotatef(Rotate, 0.0, 0.0, 1.0);
for j:= 0 to 35 do
begin
glRotatef(45.0 / 18.0, 0.0, 0.0, 1.0);
glbegin(GL_LINE_LOOP);
glColor3f(j / 35.0, j / 35.0, j / 35.0);
for i:= 0 to 5 do
glVertex2f(j / 72.0 * cos(2 * Pi * i / 6),
j / 72.0 * sin(2 * Pi * i / 6));
glEnd();
end;

glRotatef(-45 / 18 * 36, 0.0, 0.0, 1.0);

SwapBuffers(Canvas.Handle);

wglMakeCurrent(0, 0);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Rotate := Rotate + 5.0;
FormPaint(Self);
end;
end.
PM Jabber   Вверх
<Spawn>
Дата 20.6.2004, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



OpenGL - это стандартный юнит. У тебя какая Дельфи? Если не будет его, то просто скачай тогда из инета. Тип HGLRC(что то типа Handle OpenGL Rendering Context) из этого юнита.
procedure SetDCPixelFormat(dc : HDC); - нужна для настройки формата пиксела.
TPixelFormatDescriptor - структура, описывающая формат пиксела - лежит в Windows.pas
Интервал сам поставь какой хочешь - я 30 ставил

Это сообщение отредактировал(а) <Spawn> - 20.6.2004, 10:32


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Goganchic
Дата 20.6.2004, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 678
Регистрация: 18.6.2004

Репутация: нет
Всего: 5



Ну, в общем скачал я GLScene.
Вроде ничего: пока что сижу и перевожу FAQ
10 листов английского текста
Еще раз спасибо за ссылку

Добавлено @ 19:05
<Spawn>, не знаю почему, но твой код , не работает dontgetit.gif
PM Jabber   Вверх
<Spawn>
Дата 20.6.2004, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Goganchic Всмысле не работет? Как это проявляется? Какая у тебя видеокарта? Возможно дело в ней, если ни чего не отображется - тогда нужно копать в параметрх установки формата пиксела.


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Medved
Дата 21.6.2004, 07:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 14
Всего: 154



М
 
Убедительная просьба оформлять код с помощью тэга code. (кнопка #). В дальнейшем код, не оформленный таким образом будет удаляться!



--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
Goganchic
Дата 21.6.2004, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 678
Регистрация: 18.6.2004

Репутация: нет
Всего: 5



<Spawn>, я ввожу все как ты сказал, (до этого создаю форму и таймер на ней) Нажимаю <Run> и появляется пустая форма, и ничего не происходит.
Delphi у меня Шестая , а Видюшка GeForce 2 MX 400 64Mb
PM Jabber   Вверх
<Spawn>
Дата 21.6.2004, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Мало вставить то кодsmile.gif) Ты хоть таймеру назначил событие Timer1Timer в ObjectInspector? И OnCreate, OnPaint для формы?

Это сообщение отредактировал(а) <Spawn> - 21.6.2004, 16:49


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Goganchic
Дата 21.6.2004, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 678
Регистрация: 18.6.2004

Репутация: нет
Всего: 5



<Spawn>, ошибку свою я понял, все работает (блин, как же это я так лопухнулся). Демка прикольная. Спасибо.
PM Jabber   Вверх
RA
Дата 21.6.2004, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 14
Всего: 115



Подвопрос к _vova_ где взять CG.DLL относящийся к библиотеке scene?
PM   Вверх
Goganchic
Дата 22.6.2004, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 678
Регистрация: 18.6.2004

Репутация: нет
Всего: 5



Значит так <Spawn>, все ф-ии, процедуры и свойства из OpenGL и некоторые из модуля Windows мне неизвестны. Опиши их, пожалуйста.
1. procedure SetDCPixelFormat(dc : HDC)
2. TPixelFormatDescriptor
3. function ChoosePixelFormat(dc:HDC; p2:pixelFormatDescriptor)
4. procedure SetDcPixelFormat(DC:HDC)
5. function wglCreateContext(DC:HDC)
6. function wglDeleteContext(p1:HGLRC)
7. function wglMakeCurrent(DC:HDC; p1:HGLRC)
8. procedure glClearColor(red:single;green: single;blue: single;alpha: single)
9. procedure glClear(mask:cardinal)
10. procedure glViewport(x:integer; y:integer; Width:integer; Height:integer)
11. procedure glLoadIdentity
12. procedure glRotatef(alpha:single; x:single; y:single; z:single)
13. procedure glbegin(mode:cardinal);
14. procedure glColor3f(red:single;green: single;blue: single);
15. procedure glVertex2f(x: single; y: single)
16. function SwapBuffers(dc : HDC)

baaa.gif baaa.gif
PM Jabber   Вверх
Dr.Drunk
Дата 22.6.2004, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 12.1.2004
Где: Волжский

Репутация: нет
Всего: нет



Goganchic я тут некоторые вместо, <Spawn> , опишу если позволите wink.gif
Цитата
5. function wglCreateContext(DC:HDC)

создает контекст для работы с OpenGL входной параметр контекст устройства куда должно выводиться изображение.
Цитата
6. function wglDeleteContext(p1:HGLRC)

удаляет контекст OpenGL в качества параметра используется указатель полученный функцией п.5.
Цитата
14. procedure glColor3f(red:single;green: single;blue: single);

Установка цвета рисования цвет задается в RGB значения параметров от 0 до 1 вещественные.

Остальные на память не помню, сам сейчас той же темой занимаюсь biggrin.gif
А вообще вот здесь поройся. Там и примеры есть и пару статей прочитаешь.

Это сообщение отредактировал(а) Dr.Drunk - 22.6.2004, 12:55
--------------------
_Theory_ is when you know everything but nothning works._Practice_ is when everything works but no one knows why._IN THIS PLACE_ we're combining theory and practice -nothing works and no one knows why!
PM MAIL WWW ICQ   Вверх
<Spawn>
Дата 22.6.2004, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



SetDCPixelFormat - необходима для настройи формата пиксела
TPixelFormatDescriptor - уже писал, это структура, которая содежит указания для попытки установки формата пиксела при вызове ChoosePixelFormat\SetPixelFormat
ChoosePixelFormat - проверяет поддерживает ли система выбраный формат пиксела
SetPixelFormat - устанавливает формат пиксела, передавя в функцию его индекс, полученый в результате работы ChoosePixelFormat
wglMakeCurrent - устанавливает текущий контекст воспроизведения
glClearColor - цвет фона
glClear - очистка буфера цвета
glViewport - устанавливает локальное окно просмотра, то есть это область в которую будет проецироваться реальное изображение(глобальное окно рисования можно для двумерки установить при помощи gluOrtho2D)
glLoadIdentity - загрузка первоначального состояния матрицы(за метсто нее можно использовать glPushMatrix и glPopMatrix)
glRotatef - осуществляет поворот системы координат
glBegin...glEnd - блок, в котором производится вывод примитивов на контекст устройства. Параметр glBegin указывает какое примитивы будут составлены из введенных данных
glVertex2f - добавляет двумерную вершину, для посторения примитива.
SwapBuffers - меняет содержание внутреннего буфера рисования с буфером отображающемся на экране. Данная фукция включена сюда, поскольку при инициализации формата пиксела была указана двойная буферизация -> сначала рисование производится на внутреннем буфере, потом результат отображется на экране. Это сделано для обхода мерцания картинки, при рисовании примитивов.

Это сообщение отредактировал(а) <Spawn> - 22.6.2004, 13:20


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
_vova_
Дата 22.6.2004, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 18.6.2004
Где: Харьков

Репутация: нет
Всего: нет



Ответ RAdmin:
Цитата

Подвопрос к _vova_ где взять CG.DLL относящийся к библиотеке scene?

у меня его нет. Все и так без него работает
PM MAIL   Вверх
Goganchic
Дата 22.6.2004, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 678
Регистрация: 18.6.2004

Репутация: нет
Всего: 5



Ну спасибо, за ответ. Теперь я совсем умный.Ну спасибо, за ответ. Теперь я совсем умный стал. smile.gif smile.gif
PM Jabber   Вверх
foRaver
Дата 22.6.2004, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 561
Регистрация: 6.7.2003
Где: Düsseldorf

Репутация: нет
Всего: 3



DelphiGFX

Это сообщение отредактировал(а) foRaver - 22.6.2004, 20:16
PM MAIL WWW ICQ YIM   Вверх
Medved
Дата 23.6.2004, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 14
Всего: 154



Не забывайте про поисковики. В сети много информации по этому вопросу.


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0813 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.