Sign in Join
Wiki copytemporary

ZenGL Tutorial/ru: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: ZenGL Tutorial/ru

OldNewLine
1+## Скачать
2+
3+[[ZenGL]] для Linux, Windows и Mac можно скачать [тут](http://zengl.org/download.html).
4+
5+## Установка
6+
7+Для инсталляции достаточно распаковать скачанный архив в удобную директорию.
8+
9+### Настройка путей
10+
11+Перед использованием модулей не забудьте добавить в пути к исходным кодам путь к исходникам ZenGL
12+
13+Откройте "*Project \> Project Options*". В "*Compiler Options \> Paths*" добавьте путь к "*Other Unit Files*":
14+
15+``` pascal
16+headers
17+extra
18+src
19+src\Direct3D
20+lib\jpeg\$(TargetCPU)-$(TargetOS)
21+lib\msvcrt\$(TargetCPU)
22+lib\ogg\$(TargetCPU)-$(TargetOS)
23+lib\zlib\$(TargetCPU)-$(TargetOS)
24+```
25+
26+## Сборка
27+
28+Приложение можно собрать с ZenGL статически либо с использованием динамических библиотек (so/dll/dylib).
29+
30+Подробнее можно прочесть в [compilation](http://zengl.org/wiki/doku.php?id=compilation) на [ZenGL Wiki](http://zengl.org/wiki/).
31+
32+Статическая сборка:
33+
34+``` pascal
35+{$DEFINE STATIC}
36+```
37+
38+Сборка с использованием загружаемых библиотек:
39+
40+``` pascal
41+//{$DEFINE STATIC}
42+```
43+
44+#### Windows DLL
45+
46+Откройте "*src\Lazarus\ZenGL.lpi*" а потом: "*Run \> Compile (Ctrl + F9)*".
47+
48+После, в директории "*src\*" вы можете увидеть файл "*ZenGL.dll*": скопируйте его в директорию "*bin\i386*" При использовании динамической линковки, вам придется постоянно копировать DLL в выходную директорию проекта.
49+
50+## Первая программа
51+
52+Сперва, создайте новое приложение Free Pascal ("Free Pascal Program"), измените пути к исходным кодам, как было указано выше. Также, смените *Syntax Mode* в *Project \> Project Options \> Compiler Options \> Parsing* на *Delphi (-Mdelphi)*. Запомните: если вы используете динамическую линковку (so/dll/dylib), скопируйте необходимые библиотеки в директорию выполнения программы.
53+
54+Добавьте ресурсы, назовите программу:
55+
56+``` pascal
57+program demo01;
58+
59+{$R *.res}
60+```
61+
62+Выберите режим компиляции, для использования so/dll/dylib:
63+
64+``` pascal
65+{$DEFINE STATIC}
66+```
67+
68+Добавьте модули ZenGL.
69+
70+``` pascal
71+uses
72+ {$IFNDEF STATIC}
73+ zglHeader
74+ {$ELSE}
75+ zgl_main,
76+ zgl_screen,
77+ zgl_window,
78+ zgl_timers,
79+ zgl_utils
80+ {$ENDIF}
81+ ;
82+```
83+
84+Задаем переменные:
85+
86+``` pascal
87+var
88+ DirApp : String;
89+ DirHome : String;
90+```
91+
92+...Процедуры::
93+
94+``` pascal
95+procedure Init;
96+begin
97+ // Загрузка основных ресурсов
98+end;
99+
100+procedure Draw;
101+begin
102+ // Рисуем то, что необходимо нам
103+end;
104+
105+procedure Update( dt : Double );
106+begin
107+ // Эта функция - лучший метод для реализации плавного движения
108+end;
109+
110+procedure Timer;
111+begin
112+ // Заголовок будет показывать количество кадров в секунду.
113+ wnd_SetCaption( '01 - Initialization[ FPS: ' + u_IntToStr( zgl_Get( RENDER_FPS ) ) + ' ]' );
114+end;
115+
116+procedure Quit;
117+begin
118+ //
119+end;
120+```
121+
122+Вот начало программы:
123+
124+``` pascal
125+Begin
126+ {$IFNDEF STATIC}
127+ zglLoad( libZenGL );
128+ {$ENDIF}
129+ // Для загрузки/создания каких-то своих настроек/профилей/etc. можно получить путь к
130+ // домашенему каталогу пользователя, или к исполняемому файлу(не работает для GNU/Linux).
131+ DirApp := u_CopyStr( PChar( zgl_Get( DIRECTORY_APPLICATION ) ) );
132+ DirHome := u_CopyStr( PChar( zgl_Get( DIRECTORY_HOME ) ) );
133+
134+ // Создаем таймер с интервалом 1000мс.
135+ timer_Add( @Timer, 1000 );
136+
137+ // Регистрируем процедуру, что выполнится сразу после инициализации ZenGL.
138+ zgl_Reg( SYS_LOAD, @Init );
139+ // Регистрируем процедуру, где будет происходить рендер.
140+ zgl_Reg( SYS_DRAW, @Draw );
141+ // Регистрируем процедуру, которая будет принимать разницу времени между кадрами.
142+ zgl_Reg( SYS_UPDATE, @Update );
143+ // Регистрируем процедуру, которая выполнится после завершения работы ZenGL.
144+ zgl_Reg( SYS_EXIT, @Quit );
145+
146+ // Т.к. модуль сохранен в кодировке UTF-8 и в нем используются строковые переменные
147+ // следует указать использование этой кодировки.
148+ zgl_Enable( APP_USE_UTF8 );
149+
150+ // Устанавливаем заголовок окна.
151+ wnd_SetCaption( '01 - Initialization' );
152+
153+ // Разрешаем курсор мыши.
154+ wnd_ShowCursor( TRUE );
155+
156+ // Указываем первоначальные настройки.
157+ scr_SetOptions( 800, 600, REFRESH_MAXIMUM, FALSE, FALSE );
158+
159+ // Инициализируем ZenGL.
160+ zgl_Init();
161+End.
162+```
163+
164+### Результат
165+
166+Наш результат - *шаблон* для проектов ZenGL:
167+
168+``` pascal
169+program template;
170+
171+{$DEFINE STATIC}
172+
173+{$R *.res}
174+
175+uses
176+ {$IFNDEF STATIC}
177+ zglHeader
178+ {$ELSE}
179+ zgl_main,
180+ zgl_screen,
181+ zgl_window,
182+ zgl_timers,
183+ zgl_utils
184+ {$ENDIF}
185+ ;
186+
187+var
188+ DirApp : String; DirHome : String;
189+
190+procedure Init;
191+begin
192+end;
193+
194+procedure Draw;
195+begin
196+end;
197+
198+procedure Update( dt : Double );
199+begin
200+end;
201+
202+procedure Timer;
203+begin
204+ wnd_SetCaption( '01 - Initialization[ FPS: ' + u_IntToStr( zgl_Get( RENDER_FPS ) ) + ' ]' );
205+end;
206+
207+procedure Quit;
208+begin
209+end;
210+
211+Begin
212+ {$IFNDEF STATIC}
213+ zglLoad( libZenGL );
214+ {$ENDIF}
215+ DirApp := u_CopyStr( PChar( zgl_Get( DIRECTORY_APPLICATION ) ) );
216+ DirHome := u_CopyStr( PChar( zgl_Get( DIRECTORY_HOME ) ) );
217+ timer_Add( @Timer, 1000 );
218+ zgl_Reg( SYS_LOAD, @Init );
219+ zgl_Reg( SYS_DRAW, @Draw );
220+ zgl_Reg( SYS_UPDATE, @Update );
221+ zgl_Reg( SYS_EXIT, @Quit );
222+ zgl_Enable( APP_USE_UTF8 );
223+ wnd_SetCaption( '01 - Initialization' );
224+ wnd_ShowCursor( TRUE );
225+ scr_SetOptions( 800, 600, REFRESH_MAXIMUM, FALSE, FALSE );
226+ zgl_Init();
227+End.
228+```
229+
230+---
231+*From the Free Pascal wiki, page "ZenGL Tutorial/ru", as it stood on 2020-03-03 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history