home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 12 / CD_ASCQ_12_0294.iso / maj / 2328 / lparser.txt < prev    next >
Text File  |  1994-02-07  |  18KB  |  400 lines

  1. ┌─────────┬────────────────────────────────┬───────────────────────────────┐
  2. │ Name:   │ L-SYSTEM PARSER/MUTATOR        │ (C) RenderStar Technology BV. │
  3. ├─────────┼────────────────────────────────┼──────────┬───────┬────────────┤
  4. │ Author: │ Laurens J. Lapre               │ Version: │  3.0  │ 1994-01-31 │
  5. ├─────────┴────────────────────────────────┴──────────┴───────┴────────────┤
  6. │ RenderStar Technology BV, Keizersgracht 448                              │
  7. │ 1016 GD Amsterdam, the Netherlands                                       │
  8. │ Fax (+31) 20 622 4939                                                    │
  9. ├─────────┬─────────────────────┬───────────────────┬──────────────────────┤
  10. │ Email:  │ 2:283/203.8 fidonet │ 'Lj Lapre' PCGnet │  ljlapre@hacktic.nl  │
  11. └─────────┴─────────────────────┴───────────────────┴──────────────────────┘
  12.  
  13.  
  14. Disclaimer :
  15. ──────────────────────────────────────────────────────────────────────────── 
  16. This software is free and may be freely distributed, but is copyrighted by 
  17. the company RenderStar Technology BV. This software is provided as is 
  18. without any guarantees. The author and company assume no liability for 
  19. damages, direct or consequential, which may result from the use of this 
  20. software. The 'lparser.exe' file may not be used as part of any commercial 
  21. package without the explicit written consent of the author or company.
  22.  
  23.  
  24. Execute like this :
  25. ──────────────────────────────────────────────────────────────────────────── 
  26. lparser [options] [name]
  27.  
  28. examples :
  29.  
  30. lparser -x rcylin -d lsys03.ls
  31. lparser -vc -t0.5 -u10 -g lsys05
  32. lparser -i2000 spider
  33.  
  34. Name is an l-system file with the ls extension. It will standard generate a 
  35. RenderStar compatible 'output.vol' file. 
  36.  
  37. The standard output.vol file can be taken directly to the lviewer with the 
  38. command : 'lviewer output'. See 'go.bat'. You will get some information about 
  39. the loaded object and it will bring you into a standard VGA 640x480 16 color 
  40. screen. Here you can rotate the object, zoom in/out and pan. For key usage 
  41. see the lviewer.txt file.
  42.  
  43. It can also be rendered directly in RenderStar with the command 'rs2 l'.
  44.  
  45. The lparser.exe is a protected mode program using the royalty free 
  46. Rational dos-extender (dos4gw.exe) supplied with Watcom. It needs a 
  47. 386/387 or 486 with 4meg ram.
  48.  
  49.  
  50. Persistence of Vision (POV) output :
  51. ──────────────────────────────────────────────────────────────────────────── 
  52. Part off the POV file is setup by the user and the output.pov file is then
  53. attached to the user's file.
  54.  
  55. -v            make POV object file
  56.  
  57. Generates a POV file format description. Only the body part of the file is 
  58. generated with a series of a l_base objects and leafs as triangles. One can 
  59. change the object definition of the l_base element used in the l-system form 
  60. to any one of the valid POV shapes as long as the shape can be scaled 
  61. differently in all 3 directions. With POV 2 this can also be a sphere. 
  62.  
  63. The file 'setup1.pov' can be used to connect to the output.inc file created 
  64. with lparser -vc. The first 8 colors in the pov rendering will then match the 
  65. ones in the viewer.
  66.  
  67. -b            make POV blob file
  68.  
  69. Instead of outputting objects, postionend components are written to the 
  70. output.pov file. These can be used to create 'bloby' objects. All triangles 
  71. are skipped.
  72.  
  73. The file 'setup2.pov' can be used to connect to the 'output.inc' file created 
  74. with lparser -bc. 
  75.  
  76. -B            make multiple POV blob files
  77.  
  78. Each color part of the final form is written into its own output?.pov file. 
  79. This allows you to have mutiple blob's each with its own color and material.  
  80. All triangles are skipped.
  81.  
  82. The file 'setup3.pov' can be used to connect to the 'output?.inc' files created 
  83. with lparser -Bc. 
  84.  
  85. -c            output inc files instead of POV file
  86.  
  87. The output files will now have the 'inc' extension for easier including in 
  88. other POV files like 'setup.pov'.
  89.  
  90.  
  91. DXF output :
  92. ──────────────────────────────────────────────────────────────────────────── 
  93. -d            make dxf file
  94.  
  95. This creates AutoCad R12 polyline polyface meshes in dxf file format which 
  96. can be used in Acad and 3DS. It's a much more efficient format than the 
  97. 3dface format. It uses blocks and inserts. The most efficient dxf file (in 
  98. size and write/load time) is generated with : lparser -x cube -d [name]. If 
  99. you read the file into Acad12 make sure you have a new (no prototype) drawing 
  100. since the file contains block definitions as well. The objects will have 
  101. color and layer attributes set. By changing all object color attributes to 
  102. BYLAYER one can use the layer overview for easy, by layer, color setting.
  103.  
  104. -3            make dxf file
  105.  
  106. This is a simple 3dface only dxf file format which will always work. It has 
  107. no blocks or inserts but can become very large.
  108.  
  109.  
  110. RAW output :
  111. ──────────────────────────────────────────────────────────────────────────── 
  112. -R            make raw file
  113.  
  114. This is a simple ascii RAW file format, it can become very large. One triangle 
  115. per line.
  116.  
  117.  
  118. Other options :
  119. ──────────────────────────────────────────────────────────────────────────── 
  120. -s [num]      set string size to [num] Kbytes
  121.  
  122. The -s option allows you to set the maximum size of the production string 
  123. in Kbytes. This string has to be stored twice and is the main data 
  124. structure. For a 4meg system the maximum will be about 1500 K. The default 
  125. value is 1024 Kbytes (= 1 meg). This is to allow much larger strings to be 
  126. processed on larger memory systems. 
  127.  
  128. -t [num]      set minimum thickness
  129.  
  130. This allows you to set the minimum thickness a form will get during 
  131. recursive generation. It is to make sure the forms don't get too 'thin' to 
  132. be seen and render correctly. It's typicly around 0.5 to 1.0.
  133.  
  134. -u [num]      mutate [num] times
  135.  
  136. Mutate the l-system a number of times before starting the geometry generation 
  137. fase and write the mutated l-system to disc as the file 'mutation.ls'. By 
  138. re-using this file one can build mutation series of forms. See 'mutate.bat'.
  139.  
  140. -r [num]      overrule recursion depth 
  141. -a [num]      overrule angle
  142.  
  143. Overrule these values on the commandline. They are also set in the l-system 
  144. file but they will not be used when an overrule option is used on the 
  145. commandline. One can 'open' a form by starting with a angle of zero and 
  146. increase it to the final angle. This makes nice animations. Doing the same 
  147. with the -r option will slowly 'grow' the form into its final shape.
  148.  
  149. -p [num]      limit polygons to [num]
  150.  
  151. Limit the total amount off polygons/objects outputed during the parsing of 
  152. the final l-system production. After mutation the form may have grown very 
  153. (VERY!) large. The whole form could be inserted in each of its branches ! 
  154. The default limit is 500.000 polygons/objects.
  155.  
  156. -i              link base elements together
  157.  
  158. With this option you can use a connected 8 sided cylinder as a base shape. 
  159. Works only with VOL, DXF and RAW output. It will connect the bottom part of 
  160. the cylinder to a previous top part creating a tube like element. This is 
  161. meant to be used with polygonal plant and tree forms.
  162.  
  163. -x [name]       use name.vol as base form
  164.  
  165. Instead of a simple block a special object (*.vol) can be used as a base 
  166. element. Example forms are :
  167.  
  168. objects        polygons        description
  169. ──────────────────────────────────────────────────────────────── 
  170. min           2        only two faces in a cross
  171. cube           6        block (default)    
  172. cylin           8        open 8 sided cylinder 
  173. cone          10        cone on 10 sided polygon
  174. cylin8          20        closed 8 sided cylinder
  175. cylin16      44        closed 16 sided cylinder
  176. tube         60        10 sided cylinder with round top 
  177. ball        100         sphere mesh
  178. rcylin        174        closed cylinder with rounded edges
  179.  
  180. This is for generating VOL, DXF or RAW files only. Try : lparser -x ball 
  181. lsys00. Just use the small vol files supplied with the parser for this 
  182. purpose. Using larger lparser generated vol files may not work. The changing 
  183. of the base forms for POV output is done by the user in the POV headers. See 
  184. setup*.pov for examples.
  185.  
  186. -l            show final L-string
  187.  
  188. Prints the l-system production to the screen. This is the final string which 
  189. is then interpreted into a 3d form.
  190.  
  191. -e            echo input L-system
  192.  
  193. Echos the ls file to the screen with the basic parameters while it's being 
  194. readin. The screen feedback will be like in v2.0.
  195.  
  196. -g            add ground plane
  197.  
  198. Adds a large ground plane (2 triangles) touching the lowest point of the 
  199. form. This is for easy shadow projection and horizon.
  200.  
  201.  
  202. More info ... 
  203. ──────────────────────────────────────────────────────────────────────────── 
  204. The book 'Evolutionary Art and Computers' by S. Todd and W. Latham was used 
  205. to base the genetic 3d form mutation principles on. In here you'll find a lot 
  206. of interesting ideas on how to 'grow' and 'evolve' organic looking 3d forms 
  207. of your own. ISBN 0-12-437185-X
  208.  
  209. The implemented l-system is based on the one described in the book : 'The 
  210. Algorithmic Beauty of Plants' (ABOP) by P. Prusinkiewicz and A. Lindenmayer 
  211. (this is where the 'L' from l-systems come from). If you want more 
  212. information on making your own l-systems you'll want to check out this book. 
  213. A lot can be done by changing the l-systems suplied with the parser and 
  214. seeing for yourself what changes in the final form. ISBN 0-387-97297-8
  215.  
  216.  
  217. Syntax and movement
  218. ──────────────────────────────────────────────────────────────────────────── 
  219. For those who are already familiar with l-systems, here are the commands and 
  220. their functions for this lparser's 'dialect'. All commands are 1 char only 
  221. and simpler then for most lparsers. This is to keep them from getting 
  222. 'broken' by the mutation process and speeds up the parsing.
  223.  
  224. There is also the posibilty to add an argument to a command. Instead
  225. off doing +++ one can do +(30) if the basic angle was 10 degrees. The 
  226. argument can be a real value.
  227.  
  228. The tropism command will allow you to let gravity pull branches downward by 
  229. adding a 't' element togeter with and 'F'. See the file 'tropism.ls' and 
  230. 'tree*.ls' for examples. When you are not sure about the current 'down' 
  231. direction do a '$' command first. This will roll the turtle horizontal and 
  232. make sure the current up vector is oriented in the positive z-axis direction.
  233.  
  234. The turtle will start at the origin with the Z-axis as forward direction and 
  235. Y-axis as left direction. See the file 'axis.ls' for an detailed example. 
  236. Here you can experiment with the basic orientations and see how the 3d 
  237. turtle is using a 'right-handed' coordinate system. Use your right hand with 
  238. your thumb as up, forefinger as forward and an other finger as left 
  239. direction. 
  240.  
  241. By adding &(90) in front of an axiom the turtle axis will align with the 
  242. right handed coordinate system used in the viewer. Adding an additional
  243. +(90) will make it easier when working with 2d l-systems. See the
  244. 'fract*.ls' files for examples.
  245.  
  246. Values can have some randomness automaticly added to them. Using ~(xx) will 
  247. now add a random direction component to the current orientation with maximum 
  248. of xx in all three directions. This way you can mark at which locations in 
  249. your l-system 'jitter' needs to be introduced. Using this option no two 
  250. 'intances' of the same l-system will look the same. See fern.ls for an 
  251. example.
  252.  
  253. ┌─────────────────────────────────────────────────────────────────────┐
  254. │ Turtle Orientation commands                                         │
  255. ├─────────────────────────────────────────────────────────────────────┤
  256. │ +    turn left around up vector                      │
  257. │ +(x)    turn x left around up vector                      │
  258. │ -     turn right around up vector                      │
  259. │ -(x)     turn x right around up vector                      │
  260. │ &    pitch down around left vector                      │
  261. │ &(x)    pitch x down around left vector                      │
  262. │ ^    pitch up around left vector                      │
  263. │ ^(x)    pitch x up around left vector                      │
  264. │ <    roll left (counter clockwise) around forward vector          │
  265. │ <(x)    roll x left around forward vector                  │
  266. │ >    roll right (clockwise) around forward vector              │
  267. │ >(x)    roll x right around forward vector                  │
  268. ├─────────────────────────────────────────────────────────────────────┤
  269. │ Special Orientation commands                                        │
  270. ├─────────────────────────────────────────────────────────────────────┤
  271. │ |    turn 180 deg around up vector                      │
  272. │ %    roll 180 deg around forward vector                  │
  273. │ $    roll until horizontal                           │
  274. │ ~    turn/pitch/roll in a random direction                  │
  275. │ ~(x)          "     in a random direction with a maximum of x degrees │
  276. │ t    correction for gravity with 0.2                          │
  277. │ t(x)    correction for gravity with x                          │
  278. ├─────────────────────────────────────────────────────────────────────┤
  279. │ Movement commands                       when {} active          │
  280. ├─────────────────────────────────────────────────────────────────────┤
  281. │ F    move forward and draw full length    record vertex          │
  282. │ F(x)    move x forward and draw              record vertex          │
  283. │ Z    move forward and draw half length    record vertex          │
  284. │ Z(x)    move x forward and draw              record vertex          │
  285. │ f    move forward with full length         record vertex           │
  286. │ f(x)    move x forward                    record vertex           │
  287. │ z    move forward with half length         record vertex          │
  288. │ z(x)    move x forward                       record vertex          │
  289. │ g    move forward with full length         don't record vertex      │
  290. │ g(x)    move x forward                         don't record vertex      │
  291. │ .    don't move                 record vertex            │
  292. ├─────────────────────────────────────────────────────────────────────┤
  293. │ Structure commands                              │
  294. ├─────────────────────────────────────────────────────────────────────┤
  295. │ [    push current state                          │
  296. │ ]    pop current state                          │
  297. │ {    start polygon shape                          │
  298. │ }    end polygon shape                          │
  299. ├─────────────────────────────────────────────────────────────────────┤
  300. │ Inc/Dec commands                              │
  301. ├─────────────────────────────────────────────────────────────────────┤
  302. │ "    increment length with 1.1                      │
  303. │ '    decrement length with 0.9                      │
  304. │ "(x)    multiply length with x also '(x)                  │
  305. │ ;    increment angle    with 1.1                      │
  306. │ :    decrement angle with 0.9                      │
  307. │ :(x)    multiply angle with x also ;(x)                      │
  308. │ ?    increment thickness with 1.4                      │
  309. │ !    decrement thickness with 0.7                      │
  310. │ ?(x)    multiply thickness with x also !(x)                  │
  311. ├─────────────────────────────────────────────────────────────────────┤
  312. │ Additional commands                              │
  313. ├─────────────────────────────────────────────────────────────────────┤
  314. │ c    increment color index                          │
  315. │ c(x)    set color index to x                          │
  316. │ *    reset color, thickness, length and angle              │
  317. │ @    end of object                              │
  318. └─────────────────────────────────────────────────────────────────────┘
  319.  
  320.  
  321. LS files based on 'The Algorithmic Beauty of Plants' :
  322. ──────────────────────────────────────────────────────────────────────────── 
  323. bop00.ls          cordate leave           ABOP pag 123
  324. bop01.ls          plant              ABOP pag 27
  325. bop02.ls          bush              ABOP pag 26
  326. bop03.ls          form in 2d          ABOP pag 25
  327. bop04.ls          block form          ABOP pag 20
  328. bop05.ls          fractal              ABOP pag 9
  329. bop06.ls        dragon curves         ABOP pag 9
  330.  
  331. bop07.ls        compound leave        ABOP pag 130
  332. bop08.ls        compound leave in 3d    ABOP pag 129
  333. bop09.ls        maple like leave    ABOP pag 129
  334. bop10.ls        nested polygon leaves   ABOP pag 127
  335.  
  336. tree00.ls    monopodial tree          ABOP page 56
  337. tree01.ls    monopodial tree          ABOP page 56
  338. tree02.ls    ternary tree          ABOP page 60
  339.  
  340.  
  341. Free form experiments and other fractals :
  342. ──────────────────────────────────────────────────────────────────────────── 
  343. lsys00.ls         lobster form
  344. lsys01.ls            "    var 1
  345. lsys02.ls            "    var 2
  346. lsys03.ls            "    var 3
  347. lsys04.ls            "    var 4
  348. lsys05.ls         spiral bush
  349. lsys06.ls         tree base
  350. lsys07.ls         half circle
  351. lsys08.ls            "    var 1
  352. lsys09.ls         cello plant
  353. lsys10.ls         circle form
  354.  
  355. spiral00.ls       overview of spiral types
  356. spiral01.ls       spiral form
  357. spiral02.ls       spiral tree
  358. spiral03.ls       large spiral plant var 1
  359. spiral04.ls       large spiral plant var 2
  360.  
  361. tree03.ls       willow type tree
  362. tree04.ls       conifer type tree
  363. tree05.ls    'best' tree
  364. tree06.ls    conifer type tree
  365. tree07.ls    tropism experiment
  366. tree08.ls    'palm' tree based on bop07.ls structure
  367. tree09.ls    'Trail off trees' showing the different growth stages
  368. tree10.ls    leavy ternary tree type
  369. tree11.ls    elaboration on tree08
  370. street1.ls    a series of trees
  371. flower.ls    cordate leave arangement
  372. fern.ls        fern plant
  373. leaves.ls    variation on bop00.ls
  374.  
  375. fract*.ls        L-systems from FractInt
  376.  
  377. shell*.ls    shell type forms based on spirals and bop10.ls
  378.  
  379. airhorse.ls    part seahorse but with external lung
  380. dinofly.ls    what would this be without a dino ?
  381. spider.ls    octo-spider
  382.  
  383.  
  384. Ls-files by Cees van der Mark
  385. ──────────────────────────────────────────────────────────────────────────── 
  386. passie.ls    a passion flower plant
  387. leaf01.ls    variation on bop00.ls
  388. plant01.ls    two plants winding around a stalk
  389. hangpl.ls       crystal with leaves
  390.  
  391.  
  392. Thanks to :
  393. ──────────────────────────────────────────────────────────────────────────── 
  394. C.J.van der Mark [2:283/203.11 fidonet, 9:580/203.11 PCGnet] for testing all 
  395. versions, feedback and working on the various formats.
  396.  
  397. BBS Bennekom [2:283/203 fidonet, 9:580/203 PCGnet] for acting as go-between.
  398. ──────────────────────────────────────────────────────────────────────────── 
  399.  
  400.