959d12f87c7ef77d7c0952896258d3b8b4850f62
[qbasicapps.git] / graphics / 3D / 3D Synthezier / doc / index.html
1 <!doctype html>
2 <html lang="en">
3 <head>
4 <title>3D Synthezier</title>
5 <!-- 2018-06-20 Wed 16:08 -->
6 <meta charset="utf-8">
7 <meta name="viewport" content="width=device-width, initial-scale=1">
8 <meta name="generator" content="Org-mode">
9 <meta name="author" content="Svjatoslav Agejenko">
10 <link href="https://bootswatch.com/4/darkly/bootstrap.min.css" rel="stylesheet">
11 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
12 <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.1/js/bootstrap.min.js"></script>"
13 <style type="text/css">
14 footer {background-color: #111 !important;}
15 pre {background-color: #111; color: #ccc;}
16 </style>
17 <style type="text/css">
18 /* org mode styles on top of twbs */
19
20 html {
21     position: relative;
22     min-height: 100%;
23 }
24
25 body {
26     font-size: 18px;
27     margin-bottom: 105px;
28 }
29
30 footer {
31     position: absolute;
32     bottom: 0;
33     width: 100%;
34     height: 101px;
35     background-color: #f5f5f5;
36 }
37
38 footer > div {
39     padding: 10px;
40 }
41
42 footer p {
43     margin: 0 0 5px;
44     text-align: center;
45     font-size: 16px;
46 }
47
48 #table-of-contents {
49     margin-top: 20px;
50     margin-bottom: 20px;
51 }
52
53 blockquote p {
54     font-size: 18px;
55 }
56
57 pre {
58     font-size: 16px;
59 }
60
61 .footpara {
62     display: inline-block;
63 }
64
65 figcaption {
66   font-size: 16px;
67   color: #666;
68   font-style: italic;
69   padding-bottom: 15px;
70 }
71
72 /* from twbs docs */
73
74 .bs-docs-sidebar.affix {
75     position: static;
76 }
77 @media (min-width: 768px) {
78     .bs-docs-sidebar {
79         padding-left: 20px;
80     }
81 }
82
83 /* All levels of nav */
84 .bs-docs-sidebar .nav > li > a {
85     display: block;
86     padding: 4px 20px;
87     font-size: 14px;
88     font-weight: 500;
89     color: #999;
90 }
91 .bs-docs-sidebar .nav > li > a:hover,
92 .bs-docs-sidebar .nav > li > a:focus {
93     padding-left: 19px;
94     color: #A1283B;
95     text-decoration: none;
96     background-color: transparent;
97     border-left: 1px solid #A1283B;
98 }
99 .bs-docs-sidebar .nav > .active > a,
100 .bs-docs-sidebar .nav > .active:hover > a,
101 .bs-docs-sidebar .nav > .active:focus > a {
102     padding-left: 18px;
103     font-weight: bold;
104     color: #A1283B;
105     background-color: transparent;
106     border-left: 2px solid #A1283B;
107 }
108
109 /* Nav: second level (shown on .active) */
110 .bs-docs-sidebar .nav .nav {
111     display: none; /* Hide by default, but at >768px, show it */
112     padding-bottom: 10px;
113 }
114 .bs-docs-sidebar .nav .nav > li > a {
115     padding-top: 1px;
116     padding-bottom: 1px;
117     padding-left: 30px;
118     font-size: 12px;
119     font-weight: normal;
120 }
121 .bs-docs-sidebar .nav .nav > li > a:hover,
122 .bs-docs-sidebar .nav .nav > li > a:focus {
123     padding-left: 29px;
124 }
125 .bs-docs-sidebar .nav .nav > .active > a,
126 .bs-docs-sidebar .nav .nav > .active:hover > a,
127 .bs-docs-sidebar .nav .nav > .active:focus > a {
128     padding-left: 28px;
129     font-weight: 500;
130 }
131
132 /* Nav: third level (shown on .active) */
133 .bs-docs-sidebar .nav .nav .nav {
134     padding-bottom: 10px;
135 }
136 .bs-docs-sidebar .nav .nav .nav > li > a {
137     padding-top: 1px;
138     padding-bottom: 1px;
139     padding-left: 40px;
140     font-size: 12px;
141     font-weight: normal;
142 }
143 .bs-docs-sidebar .nav .nav .nav > li > a:hover,
144 .bs-docs-sidebar .nav .nav .nav > li > a:focus {
145     padding-left: 39px;
146 }
147 .bs-docs-sidebar .nav .nav .nav > .active > a,
148 .bs-docs-sidebar .nav .nav .nav > .active:hover > a,
149 .bs-docs-sidebar .nav .nav .nav > .active:focus > a {
150     padding-left: 38px;
151     font-weight: 500;
152 }
153
154 /* Show and affix the side nav when space allows it */
155 @media (min-width: 992px) {
156     .bs-docs-sidebar .nav > .active > ul {
157         display: block;
158     }
159     /* Widen the fixed sidebar */
160     .bs-docs-sidebar.affix,
161     .bs-docs-sidebar.affix-bottom {
162         width: 213px;
163     }
164     .bs-docs-sidebar.affix {
165         position: fixed; /* Undo the static from mobile first approach */
166         top: 20px;
167     }
168     .bs-docs-sidebar.affix-bottom {
169         position: absolute; /* Undo the static from mobile first approach */
170     }
171     .bs-docs-sidebar.affix .bs-docs-sidenav,.bs-docs-sidebar.affix-bottom .bs-docs-sidenav {
172         margin-top: 0;
173         margin-bottom: 0
174     }
175 }
176 @media (min-width: 1200px) {
177     /* Widen the fixed sidebar again */
178     .bs-docs-sidebar.affix-bottom,
179     .bs-docs-sidebar.affix {
180         width: 263px;
181     }
182 }
183 </style>
184 <script type="text/javascript">
185 $(function() {
186     'use strict';
187
188     $('.bs-docs-sidebar li').first().addClass('active');
189
190     $(document.body).scrollspy({target: '.bs-docs-sidebar'});
191
192     $('.bs-docs-sidebar').affix();
193 });
194 </script>
195 </head>
196 <body>
197 <div id="content" class="container">
198 <div class="row"><div class="col-md-9"><h1 class="title">3D Synthezier</h1>
199 <hr >
200 <ul class="org-ul">
201 <li>This software is part of <a href="../../../../index.html">QBasic apps package</a>.
202 </li>
203 </ul>
204
205 <p>
206 Parses scene definition language and creates 3D world based on
207 it. Result will be in a <a href="https://en.wikipedia.org/wiki/Wavefront_.obj_file">wavefront obj file</a>, witch can be then
208 visualized using external renderer.
209 </p>
210
211 <p>
212 Basic concept of defining scene is:
213 </p>
214 <ul class="org-ul">
215 <li>Simple and primitive objects are created on point and polygon level.
216 </li>
217 <li>More complex ones can be created my combinig already existing ones,
218 while applying various transformations on them.
219 </li>
220 </ul>
221
222 <p>
223 Objects with all its subobjects can be rotated, mirrored or resized
224 omong any axis. Generator has built in cache for data input and output
225 to minimize file access.
226 </p>
227
228 <div id="outline-container-sec-1" class="outline-2">
229 <h2 id="sec-1"><span class="section-number-2">1</span> System requirements</h2>
230 <div class="outline-text-2" id="text-1">
231 <table class="table table-striped table-bordered table-hover table-condensed">
232
233
234 <colgroup>
235 <col  class="left">
236
237 <col  class="right">
238 </colgroup>
239 <thead>
240 <tr>
241 <th scope="col" class="text-left">software</th>
242 <th scope="col" class="text-right">preferred version</th>
243 </tr>
244 </thead>
245 <tbody>
246 <tr>
247 <td class="text-left">DOS</td>
248 <td class="text-right">6.22</td>
249 </tr>
250
251 <tr>
252 <td class="text-left">QBasic</td>
253 <td class="text-right">4.5</td>
254 </tr>
255 </tbody>
256 </table>
257 </div>
258 </div>
259 <div id="outline-container-sec-2" class="outline-2">
260 <h2 id="sec-2"><span class="section-number-2">2</span> Installation</h2>
261 <div class="outline-text-2" id="text-2">
262 <ul class="org-ul">
263 <li>Unpack ZIP file in any folder.
264 </li>
265 <li>update include path inside  bin/3dparse.bas
266 </li>
267 </ul>
268 </div>
269 <div id="outline-container-sec-2-0-1" class="outline-4">
270 <h4 id="sec-2-0-1"><span class="section-number-4">2.0.1</span> Directory layout</h4>
271 <div class="outline-text-4" id="text-2-0-1">
272 <ul class="org-ul">
273 <li>bin
274 <ul class="org-ul">
275 <li>3dparse.bas - 3D generator main executable
276 </li>
277 <li>city1.3d - city with square-like buildings
278 </li>
279 <li>city2.3d - city with hexangular buildings
280 </li>
281 <li>result.mtl - shared material library
282 </li>
283 <li>*.bat - quick launch scripts
284 </li>
285 </ul>
286 </li>
287
288 <li>include - 3D objects used to compose the scene
289 </li>
290 </ul>
291 </div>
292 </div>
293 </div>
294 <div id="outline-container-sec-3" class="outline-2">
295 <h2 id="sec-3"><span class="section-number-2">3</span> Scene description language</h2>
296 <div class="outline-text-2" id="text-3">
297 <p>
298 (read examples&#x2026;)
299 </p>
300
301
302 <pre class="example">
303 here
304 </pre>
305 <p>
306 defines new segment
307 </p>
308
309 <pre class="example">
310 p  x y z
311 </pre>
312 <p>
313 defines new point
314 </p>
315
316 <pre class="example">
317 f  p1 p2 p3 p4
318 </pre>
319 <p>
320 defines new polygon,  p4  may be unused
321 </p>
322
323
324 <pre class="example">
325 warn  &lt;message&gt;
326 </pre>
327 <p>
328 displays warning message, and wait for key
329 </p>
330
331 <pre class="example">
332 end
333 </pre>
334 <p>
335 terminates parser
336 </p>
337
338 <pre class="example">
339 mtl  material
340 </pre>
341 <p>
342 selects material
343 </p>
344
345 <pre class="example">
346 mtlrnd  material ...
347 </pre>
348 <p>
349 selects random material from list
350 </p>
351
352 <pre class="example">
353 obj  object xz45 xy20 x+3 y*2
354 </pre>
355 <p>
356 includes sub object, can be rotated moved or resized, across X Y Z. If
357 object name begin vith ~ then it will be loaded from current
358 directory.  if object name ends with ~ then object will be parsed
359 directly from file, and not chached, to allow loading of greater than
360 500 lines files.
361 </p>
362
363
364 <figure>
365 <p><img src="rotation.png" class="img-responsive" alt="rotation.png">
366 </p>
367 </figure>
368
369
370 <pre class="example">
371 rnd  p^1^2^3 p^7^2^1
372 </pre>
373 <p>
374 select random command to execute, ^ will be converted to spaces.
375 </p>
376
377 <pre class="example">
378 # whatever text
379 </pre>
380 <p>
381 comment
382 </p>
383
384 <pre class="example">
385 out  file
386 </pre>
387 <p>
388 specify output file name, must be first command
389 </p>
390
391 <pre class="example">
392 set  variable  contents
393 </pre>
394 <p>
395 set variable contents, variable must be number, contents can be
396 string. max variables is 100. first is 0.
397 </p>
398
399 <pre class="example">
400 anycommand %1 anything
401 </pre>
402 <p>
403 inserts variable 1 contents info line
404 </p>
405
406 <pre class="example">
407 cmp  flag string1 string2
408 </pre>
409 <p>
410 compares strings, and inserts TRUE to flag, if they are equal, else inserts FALSE. max 9 falgs, 0 first. Each subobject has its own flags.
411 </p>
412
413 <pre class="example">
414 ?flag anycommand
415 </pre>
416 <p>
417 executes command if flag is true.
418 </p>
419
420 <p>
421 exapmle: ?3 obj car z*2 xy45
422 </p>
423
424 <pre class="example">
425 dum
426 </pre>
427 <p>
428 dummy function, does notheing
429 </p>
430 </div>
431 </div>
432
433 <div id="outline-container-sec-4" class="outline-2">
434 <h2 id="sec-4"><span class="section-number-2">4</span> Usage</h2>
435 <div class="outline-text-2" id="text-4">
436 <p>
437 Make sure you have QB binaries in your PATH.  Execute
438 </p>
439 <pre class="example">
440 bin/city1.bat
441 </pre>
442 <p>
443 or
444 </p>
445 <pre class="example">
446 bin/city2.bat
447 </pre>
448 <p>
449 to generate example cities. After parsing is finished, appropriate
450 *.obj files will appear in the bin directory holding generated scene.
451 Visualize scene with your favourite renderer.
452 </p>
453 </div>
454 </div>
455 <div id="outline-container-sec-5" class="outline-2">
456 <h2 id="sec-5"><span class="section-number-2">5</span> Examples</h2>
457 <div class="outline-text-2" id="text-5">
458 <p>
459 Download Blender files:
460 </p>
461 <table class="table table-striped table-bordered table-hover table-condensed">
462
463
464 <colgroup>
465 <col  class="left">
466
467 <col  class="left">
468 </colgroup>
469 <thead>
470 <tr>
471 <th scope="col" class="text-left">file</th>
472 <th scope="col" class="text-left">size</th>
473 </tr>
474 </thead>
475 <tbody>
476 <tr>
477 <td class="text-left"><a href="rectangular city.blend">rectangular city.blend</a></td>
478 <td class="text-left">3.6 MB</td>
479 </tr>
480
481 <tr>
482 <td class="text-left"><a href="hexagonal city.blend">hexagonal city.blend</a></td>
483 <td class="text-left">21 MB</td>
484 </tr>
485 </tbody>
486 </table>
487
488 <p>
489 They were produced by importing generated <a href="https://en.wikipedia.org/wiki/Wavefront_.obj_file">wavefront obj files</a> into
490 <a href="https://www.blender.org/">Blender</a>.
491 </p>
492 </div>
493
494 <div id="outline-container-sec-5-1" class="outline-3">
495 <h3 id="sec-5-1"><span class="section-number-3">5.1</span> Rectangular city</h3>
496 <div class="outline-text-3" id="text-5-1">
497
498 <figure>
499 <p><img src="rectangular city, 1.jpeg" class="img-responsive" alt="rectangular city, 1.jpeg">
500 </p>
501 </figure>
502
503
504 <figure>
505 <p><img src="rectangular city, 2.jpeg" class="img-responsive" alt="rectangular city, 2.jpeg">
506 </p>
507 </figure>
508
509
510 <figure>
511 <p><img src="rectangular city, 3.jpeg" class="img-responsive" alt="rectangular city, 3.jpeg">
512 </p>
513 </figure>
514 </div>
515 </div>
516 <div id="outline-container-sec-5-2" class="outline-3">
517 <h3 id="sec-5-2"><span class="section-number-3">5.2</span> Hexagonal city</h3>
518 <div class="outline-text-3" id="text-5-2">
519
520 <figure>
521 <p><img src="hexagonal city, 1.jpeg" class="img-responsive" alt="hexagonal city, 1.jpeg">
522 </p>
523 </figure>
524
525
526 <figure>
527 <p><img src="hexagonal city, 2.jpeg" class="img-responsive" alt="hexagonal city, 2.jpeg">
528 </p>
529 </figure>
530
531
532 <figure>
533 <p><img src="hexagonal city, 3.jpeg" class="img-responsive" alt="hexagonal city, 3.jpeg">
534 </p>
535 </figure>
536 </div>
537 </div>
538 </div>
539 </div><div class="col-md-3"><nav id="table-of-contents">
540 <div id="text-table-of-contents" class="bs-docs-sidebar">
541 <ul class="nav">
542 <li><a href="#sec-1">1. System requirements</a></li>
543 <li><a href="#sec-2">2. Installation</a></li>
544 <li><a href="#sec-3">3. Scene description language</a></li>
545 <li><a href="#sec-4">4. Usage</a></li>
546 <li><a href="#sec-5">5. Examples</a>
547 <ul class="nav">
548 <li><a href="#sec-5-1">5.1. Rectangular city</a></li>
549 <li><a href="#sec-5-2">5.2. Hexagonal city</a></li>
550 </ul>
551 </li>
552 </ul>
553 </div>
554 </nav>
555 </div></div></div>
556 <footer id="postamble" class="">
557 <div><p class="author">Author: Svjatoslav Agejenko</p>
558 <p class="date">Created: 2018-06-20 Wed 16:08</p>
559 <p class="creator"><a href="http://www.gnu.org/software/emacs/">Emacs</a> 25.1.1 (<a href="http://orgmode.org">Org-mode</a> 8.2.10)</p>
560 </div>
561 </footer>
562 </body>
563 </html>