![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Goganchic |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 678 Регистрация: 18.6.2004 Репутация: нет Всего: 5 |
Кто знает как работать с 3D графикой в Delphi?
Например делать 3D игры. Если не трудно, то подскажите как. Заранее благодарен Это сообщение отредактировал(а) Goganchic - 19.6.2004, 07:45 |
|||
|
||||
| _vova_ |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 18.6.2004 Где: Харьков Репутация: нет Всего: нет |
Качаешь библиотеку GLScene http://glscene.org, и начинаеш работать. Все просто, понятно, целая куча примеров, но немного кривоватый хелп.
|
|||
|
||||
| <Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
Вот тебе пример OpenGL, только он не трехмерный(баловался месяцев 5 назад)
-------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
| Goganchic |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 678 Регистрация: 18.6.2004 Репутация: нет Всего: 5 |
Этот сайт что-то не грузится. |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 15 Всего: 98 |
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Goganchic |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 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. |
|||
|
||||
| <Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 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 -------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
| Goganchic |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 678 Регистрация: 18.6.2004 Репутация: нет Всего: 5 |
Ну, в общем скачал я GLScene.
Вроде ничего: пока что сижу и перевожу FAQ 10 листов английского текста Еще раз спасибо за ссылку Добавлено @ 19:05 |
|||
|
||||
| <Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
Goganchic Всмысле не работет? Как это проявляется? Какая у тебя видеокарта? Возможно дело в ней, если ни чего не отображется - тогда нужно копать в параметрх установки формата пиксела.
-------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
| Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 14 Всего: 154 |
-------------------- |
|||
|
||||
| Goganchic |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 678 Регистрация: 18.6.2004 Репутация: нет Всего: 5 |
<Spawn>, я ввожу все как ты сказал, (до этого создаю форму и таймер на ней) Нажимаю <Run> и появляется пустая форма, и ничего не происходит.
Delphi у меня Шестая , а Видюшка GeForce 2 MX 400 64Mb |
|||
|
||||
| <Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
Мало вставить то код
Это сообщение отредактировал(а) <Spawn> - 21.6.2004, 16:49 -------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
| Goganchic |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 678 Регистрация: 18.6.2004 Репутация: нет Всего: 5 |
|
|||
|
||||
| RA |
|
|||
![]() Брутальный буратина ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3497 Регистрация: 31.3.2002 Где: Лес Репутация: 14 Всего: 115 |
Подвопрос к _vova_ где взять CG.DLL относящийся к библиотеке scene?
|
|||
|
||||
| Goganchic |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 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) |
|||
|
||||
| Dr.Drunk |
|
||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 179 Регистрация: 12.1.2004 Где: Волжский Репутация: нет Всего: нет |
Goganchic я тут некоторые вместо, <Spawn> , опишу если позволите
создает контекст для работы с OpenGL входной параметр контекст устройства куда должно выводиться изображение.
удаляет контекст OpenGL в качества параметра используется указатель полученный функцией п.5.
Установка цвета рисования цвет задается в RGB значения параметров от 0 до 1 вещественные. Остальные на память не помню, сам сейчас той же темой занимаюсь А вообще вот здесь поройся. Там и примеры есть и пару статей прочитаешь. Это сообщение отредактировал(а) 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! |
||||||
|
|||||||
| <Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 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 -------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
| _vova_ |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 18.6.2004 Где: Харьков Репутация: нет Всего: нет |
Ответ RAdmin:
у меня его нет. Все и так без него работает |
|||
|
||||
| Goganchic |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 678 Регистрация: 18.6.2004 Репутация: нет Всего: 5 |
|
|||
|
||||
| foRaver |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 561 Регистрация: 6.7.2003 Где: Düsseldorf Репутация: нет Всего: 3 |
||||
|
||||
| Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 14 Всего: 154 |
Не забывайте про поисковики. В сети много информации по этому вопросу.
-------------------- |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |