home *** CD-ROM | disk | FTP | other *** search
/ ftp.xmission.com / 2014.06.ftp.xmission.com.tar / ftp.xmission.com / pub / lists / fractdev / archive / fractdev.9709 < prev    next >
Internet Message Format  |  1997-09-28  |  176KB

  1. From: "Tim Wegner" <twegner@phoenix.net>
  2. Subject: (fractdev) Latest sources
  3. Date: 01 Sep 1997 21:35:42 -0600
  4.  
  5. We're up to 19.61 patch 12. The Xfract sources are in
  6.  
  7. ftp.phoenix.net/pub/USERS/twegner/tw05.zip
  8.  
  9. and a complete set of diff's (for the DOS version) is in
  10.  
  11. ftp.phoenix.net/pub/USERS/twegner/tw03.zip.
  12.  
  13. This version has the evolver and a temporary version of synchronous 
  14. orbits.
  15.  
  16. I deleted tw01.zip, which was the DOS executable for an earlier 
  17. patch. If anyone needs this and does not have access to CompuServe, 
  18. let me know. We've decided not to leave the executable in a public 
  19. place.
  20.  
  21. The last patch fixes some pretty bad xfractint bugs. Makes me wonder 
  22. if any serious users play with xfractint, because I had no reports!
  23.  
  24. I upped the length of directory buffers from 80 to 256. This is 
  25. because Xfractint hung when attempting to change to a new *.frm file. 
  26. I want to investigate this more because I'm afraid I have glossed 
  27. over a bug rather than fixed it. If anyone is setup to compile 
  28. Xfractint and is good at debugging, let me know and I'll tell you how 
  29. to attempt to duplicate the problem.
  30.  
  31. I still need to update the conversion of the binary data in GIF files 
  32. for some of the newer features.
  33.  
  34. Tim
  35.  
  36. Thanks for using Fractdev, The Fractint Developer's Discussion List
  37. Post Message:   fractdev@xmission.com
  38. Get Commands:   majordomo@xmission.com "help"
  39. Administrator:  twegner@phoenix.net
  40. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  41.  
  42.  
  43. -------------------------------------------------------------------------------
  44.  
  45. From: Rich Thomson <rthomson@ptc.com>
  46. Subject: Re: (fractdev) array initializations 
  47. Date: 02 Sep 1997 15:04:04 -0600
  48.  
  49.  
  50. In article <199708311942.OAA23292@raid2.fddi.phoenix.net> ,
  51.     "Tim Wegner" <twegner@phoenix.net>  writes:
  52. > static char *calcmodes[] = {"1","2", ... };
  53. > If the "static" is removed, this still works OK under Microsoft C and 
  54. > Linux's gcc. Is this type of array initialization legal under ANSI C?
  55.  
  56. The 'static' is an (optional) storage class specifier.  The
  57. declaration should be legal with or without the static.  However, some
  58. code uses static variables within a function as a sort of "secret
  59. global" to the function and removing the static may break code that is
  60. depending on this.  However, I don't suspect that to be the case here.
  61.  
  62. > Anyone know what the ANSI C standard says about array initialization 
  63. > of local variables?
  64.  
  65. I'm not an ANSI expert, but I believe that arrays can be initialized
  66. anywhere.  Were you looking for something more specific than that?
  67. --
  68.   ``Between stimulus and response is the will to choose.''  -- Steven Covey
  69.  =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  70.      3D Paint: The Power to Create in 3D;        Rich Thomson
  71.      email me for more info                rthomson@ptc.com
  72.  
  73. Thanks for using Fractdev, The Fractint Developer's Discussion List
  74. Post Message:   fractdev@xmission.com
  75. Get Commands:   majordomo@xmission.com "help"
  76. Administrator:  twegner@phoenix.net
  77. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  78.  
  79.  
  80. -------------------------------------------------------------------------------
  81.  
  82. From: Rich Thomson <rthomson@ptc.com>
  83. Subject: Re: (fractdev) Greetings 
  84. Date: 02 Sep 1997 17:08:21 -0600
  85.  
  86.  
  87. In article <199708292341.SAA24103@raid2.fddi.phoenix.net> ,
  88.     "Tim Wegner" <twegner@phoenix.net>  writes:
  89. > This is the biggy. Users will *not* accept a slower program, and the 
  90. > port *will* be slower without the assembler. I'd vote for forgetting 
  91. > the integer math, since floating point has comparable speed these 
  92. > days, but giving high priority to incorporating the floating point 
  93. > assembler, especially the fast parser.
  94.  
  95. Which brings up a question: what is the "target platform" for
  96. fractint?  Is it 486s running DOS, or P90s running Win95?
  97.  
  98. > Let's not rush to judgement on this. The TK toolkit has been used to 
  99. > Port Python to a variety of GUI environments, including Windows. I 
  100. > don't have first hand knowledge of this, but at work there are a 
  101. > number of Python gurus, and they recommended TK. 
  102.  
  103. I'm a little battle-shy of Tk having spent a lot of time trying to get
  104. other Tcl/Tk based tools to work in unix environments without any
  105. success.  Perhaps its gotten better since I last tried, but I would
  106. argue against a Tk-based approach because: a) fractint doesn't need
  107. scriptable dialogs and so-on which is what Tk is apparently good at.
  108. As I outlined previously, fractint has relatively modest requests of
  109. the windowing system when it comes to its UI.  (That may be because
  110. the UI grew out of DOS where supporting the mouse in a meaningful way
  111. was a pain in the ass.)  All window systems are pretty much the same.
  112. Writing simple UI components (if you make them C++ classes, fine, just
  113. don't expose the OS/Window System in your class interface, make it
  114. abstract) should make fractint's UI portable to other environments.
  115.  
  116. > I do agree with Rich that our interface needs are relatively modest. 
  117.  
  118. As was pointed out, this could change... but building in a portable
  119. non-OS/WindowSystem specific in NOW will save huge amounts of grief
  120. later.
  121.  
  122. > I'd be very cautious about this. There are places where Fractint 
  123. > could use C++ (same code used for different data types, such as 
  124. > arbitrary precision). But there's not necessarily value in porting a 
  125. > non object oriented program to C++ unless the program is totally 
  126. > redesigned. Such a redesign would be a "good thing" but we'd never 
  127. > finish it. Unless an army of new programmers emerges from the 
  128. > woodwork, I don't favor a massive redesign. I do believe more 
  129. > incremental restructuring is possible and desirable.
  130.  
  131. Yes, I'd favor a complete redesign if we were to move in this
  132. direction.  Right now I'm not sure that porting to C++ is a win.
  133. I understand the benefits of C++, I program it all day long at
  134. work, I'm just not sure that its worth the effort.  I can see how
  135. writing an "Iterates" class could be helpful as it would automatically
  136. shift from fixed point to floating point to arbitrary precision based
  137. on the zoom level and this could be reused for all fractal types.
  138. But is this a big enough win to warrant the effort?
  139. --
  140.   ``Between stimulus and response is the will to choose.''  -- Steven Covey
  141.  =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  142.      3D Paint: The Power to Create in 3D;        Rich Thomson
  143.      email me for more info                rthomson@ptc.com
  144.  
  145. Thanks for using Fractdev, The Fractint Developer's Discussion List
  146. Post Message:   fractdev@xmission.com
  147. Get Commands:   majordomo@xmission.com "help"
  148. Administrator:  twegner@phoenix.net
  149. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  150.  
  151.  
  152. -------------------------------------------------------------------------------
  153.  
  154. From: Rich Thomson <rthomson@ptc.com>
  155. Subject: Re: (fractdev) Greetings 
  156. Date: 02 Sep 1997 16:22:11 -0600
  157.  
  158.  
  159. In article <199708302257.RAA01227@raid2.fddi.phoenix.net> ,
  160.     "Tim Wegner" <twegner@phoenix.net>  writes:
  161. > The fast parser has a pretty good optimizer. George Martin and I are 
  162. > just starting to understand it. Very possibly some of the 
  163. > optimizations could be done in C also.
  164.  
  165. I've seen people posting tutorials about how to factor out
  166. sub-expressions that don't vary per-pixel and constant expressions and
  167. so-on.  Is the optimizer good enough to recognize these?  Also, does
  168. it replace z*z with sqr(z), those sorts of things?  The kinds of
  169. suggestions that people make about optimizing formulas for speed are
  170. the kinds of things an optimizer should be able to accomplish with a
  171. modicum of effort.
  172. --
  173.   ``Between stimulus and response is the will to choose.''  -- Steven Covey
  174.  =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  175.      3D Paint: The Power to Create in 3D;        Rich Thomson
  176.      email me for more info                rthomson@ptc.com
  177.  
  178.  
  179. Thanks for using Fractdev, The Fractint Developer's Discussion List
  180. Post Message:   fractdev@xmission.com
  181. Get Commands:   majordomo@xmission.com "help"
  182. Administrator:  twegner@phoenix.net
  183. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  184.  
  185.  
  186. -------------------------------------------------------------------------------
  187.  
  188. From: "Tim Wegner" <twegner@phoenix.net>
  189. Subject: Re: (fractdev) Greetings 
  190. Date: 03 Sep 1997 17:14:57 -0600
  191.  
  192.  
  193. > Tim, you didn't mention anything about that fractint source code URL I
  194. > mailed you.  Did you miss that mail?  There has been a lot of
  195. > discussion lately! <g>
  196.  
  197. I did see it, didn't answer, my apologies. It looks useful, I suggest 
  198. you share the URL. Your tool does better with C than assembler <g!>
  199.  
  200. Tim
  201.  
  202.  
  203. Thanks for using Fractdev, The Fractint Developer's Discussion List
  204. Post Message:   fractdev@xmission.com
  205. Get Commands:   majordomo@xmission.com "help"
  206. Administrator:  twegner@phoenix.net
  207. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  208.  
  209.  
  210. -------------------------------------------------------------------------------
  211.  
  212. From: Rich Thomson <rthomson@ptc.com>
  213. Subject: Re: (fractdev) Greetings 
  214. Date: 03 Sep 1997 16:31:25 -0600
  215.  
  216.  
  217. In article <199709032227.RAA02092@raid2.fddi.phoenix.net> ,
  218.     "Tim Wegner" <twegner@phoenix.net>  writes:
  219. > I did see it, didn't answer, my apologies. It looks useful, I suggest 
  220. > you share the URL. Your tool does better with C than assembler <g!>
  221.  
  222. OK, take a look at <URL:
  223. http://www.xmission.com/~legalize/fractint/src/index.html>.
  224.  
  225. My "tool" is simply a perl script :).
  226.  
  227. Emacs comes with something called "etags" that extracts tags from
  228. source files (assembly, C, fortrash, pascal, etc.) and records them in
  229. a file called TAGS.  Emacs uses this TAGS database to let you browse
  230. through the source code.  I wrote a perl script that takes the TAGS
  231. database and generates a collection of web pages from the items found
  232. by etags and cross-links them together.  Each source file is annotated
  233. with the line number on the left hand side as well.  That way we can
  234. say "look at lines 50-60 of frobnicate.c and you'll see...." when we
  235. are talking about specific items in the fractint source.  I can
  236. regenerate the web pages automatically any time the source code
  237. changes.
  238. --
  239.   ``Between stimulus and response is the will to choose.''  -- Steven Covey
  240.  =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  241.      3D Paint: The Power to Create in 3D;        Rich Thomson
  242.      email me for more info                rthomson@ptc.com
  243.  
  244. Thanks for using Fractdev, The Fractint Developer's Discussion List
  245. Post Message:   fractdev@xmission.com
  246. Get Commands:   majordomo@xmission.com "help"
  247. Administrator:  twegner@phoenix.net
  248. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  249.  
  250.  
  251. -------------------------------------------------------------------------------
  252.  
  253. From: Rich Thomson <rthomson@ptc.com>
  254. Subject: (fractdev) free, portable GUI framework
  255. Date: 03 Sep 1997 16:32:39 -0600
  256.  
  257. I don't know if this is something we want to use or not.  Its C++, not
  258. C.  However, the source code is available and it looks like it works
  259. well on X as well as Win95.  I haven't used it, only learned about it
  260. today :)
  261.  
  262. <URL: http://www.cs.unm.edu/~wampler/vgui/vgui.html>
  263. --
  264.   ``Between stimulus and response is the will to choose.''  -- Steven Covey
  265.  =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  266.      3D Paint: The Power to Create in 3D;        Rich Thomson
  267.      email me for more info                rthomson@ptc.com
  268.  
  269. Thanks for using Fractdev, The Fractint Developer's Discussion List
  270. Post Message:   fractdev@xmission.com
  271. Get Commands:   majordomo@xmission.com "help"
  272. Administrator:  twegner@phoenix.net
  273. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  274.  
  275.  
  276. -------------------------------------------------------------------------------
  277.  
  278. From: robin bussell <robin.bussell@lucent.com>
  279. Subject: (fractdev) Wishlist MK II
  280. Date: 04 Sep 1997 21:14:37 -0600
  281.  
  282. Okay folks I've put up a new version of the fractint wishlist, see what
  283. you think. I've included some suggestions from Lee to seed things and
  284. get off on a good footing.
  285. here's the address:
  286.  
  287. http://web.ukonline.co.uk/members/robin.b2/olig/fracwish.htm
  288.  
  289. Do we make this official?
  290.  
  291. Cheers,
  292.      Robin.
  293.  
  294.  
  295. Thanks for using Fractdev, The Fractint Developer's Discussion List
  296. Post Message:   fractdev@xmission.com
  297. Get Commands:   majordomo@xmission.com "help"
  298. Administrator:  twegner@phoenix.net
  299. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  300.  
  301.  
  302. -------------------------------------------------------------------------------
  303.  
  304. From: "Tim Wegner" <twegner@phoenix.net>
  305. Subject: Re: (fractdev) Wishlist MK II
  306. Date: 04 Sep 1997 22:25:32 -0600
  307.  
  308.  
  309. > Do we make this official?
  310.  
  311. I don't know what "official" means, but I have no problem with your 
  312. publicizing the URL. Thanks for taking the initiative.
  313.  
  314. Tim
  315.  
  316.  
  317. Thanks for using Fractdev, The Fractint Developer's Discussion List
  318. Post Message:   fractdev@xmission.com
  319. Get Commands:   majordomo@xmission.com "help"
  320. Administrator:  twegner@phoenix.net
  321. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  322.  
  323.  
  324. -------------------------------------------------------------------------------
  325.  
  326. From: Rich Thomson <rthomson@ptc.com>
  327. Subject: (fractdev) XaoS
  328. Date: 08 Sep 1997 16:45:14 -0600
  329.  
  330. What do the people on this list think of the XaoS program?
  331. <URL: http://www.paru.cas.cz/~hubicka/XaoS/>
  332. --
  333.   ``Between stimulus and response is the will to choose.''  -- Steven Covey
  334.  =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  335.      3D Paint: The Power to Create in 3D;        Rich Thomson
  336.      email me for more info                rthomson@ptc.com
  337.  
  338. Thanks for using Fractdev, The Fractint Developer's Discussion List
  339. Post Message:   fractdev@xmission.com
  340. Get Commands:   majordomo@xmission.com "help"
  341. Administrator:  twegner@phoenix.net
  342. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  343.  
  344.  
  345. -------------------------------------------------------------------------------
  346.  
  347. From: "Tim Wegner" <twegner@phoenix.net>
  348. Subject: (Fwd) Re: (fractdev) XaoS
  349. Date: 09 Sep 1997 23:16:02 -0600
  350.  
  351. > What do the people on this list think of the XaoS program?
  352.  
  353. I looked at it briefly (there's a DOS version, I'll try the X also) 
  354. and it looks very interesting, amd the source is public!
  355.  
  356. Tim
  357.  
  358.  
  359. Thanks for using Fractdev, The Fractint Developer's Discussion List
  360. Post Message:   fractdev@xmission.com
  361. Get Commands:   majordomo@xmission.com "help"
  362. Administrator:  twegner@phoenix.net
  363. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  364.  
  365.  
  366. -------------------------------------------------------------------------------
  367.  
  368. From: "Damien M. Jones" <dmj@emi.net>
  369. Subject: Re: (fractdev) XaoS
  370. Date: 10 Sep 1997 00:58:25 -0400
  371.  
  372. Rich,
  373.  
  374.  - What do the people on this list think of the XaoS program?
  375.  
  376. XaoS is interesting, but it's a different approach to fractals than
  377. FractInt.  XaoS emphasizes speed and sacrifices rendering quality to
  378. achieve it.  (Yes, you can stop it and do a full render, but that sort of
  379. defeats the purpose of the program, IMO.)  It's neat to be able to "zoom"
  380. is real-time, even if you have to keep the resolution pretty low to have a
  381. decent frame rate. :)
  382.  
  383. I don't think it's the sort of thing FractInt needs to be doing, but hey,
  384. that's just my opinion. :)  Adding that kind of capability would involve a
  385. full-screen blit every time the screen is redrawn, which means having a
  386. copy of the screen in system RAM, which can get big in a hurry.  Maybe in a
  387. 32-bit DOS version this would be practical, but... ick.  And if FractInt's
  388. video drivers don't have full-screen blit support, forget about
  389. performance... or write blit routines for all the drivers so you can have
  390. performance (big chore).
  391.  
  392. Of course, it's late and I really ought to know better than to offer
  393. technical commentary when I'm not in full command of my mental faculties.
  394. I'm liable to get something wrong.  So if I'm off base in the blather
  395. above, please feel free to correct me.  :)
  396.  
  397. Damien M. Jones  /  temporary sanity designs  /  http://www.emi.net/~dmj/
  398.    dmj@emi.net  /  my gallery: http://www.geocities.com/SoHo/Lofts/2605/
  399.  
  400.  
  401. Thanks for using Fractdev, The Fractint Developer's Discussion List
  402. Post Message:   fractdev@xmission.com
  403. Get Commands:   majordomo@xmission.com "help"
  404. Administrator:  twegner@phoenix.net
  405. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  406.  
  407.  
  408. -------------------------------------------------------------------------------
  409.  
  410. From: "Damien M. Jones" <dmj@emi.net>
  411. Subject: Re: (fractdev) XaoS
  412. Date: 10 Sep 1997 00:58:25 -0400
  413.  
  414. Rich,
  415.  
  416.  - What do the people on this list think of the XaoS program?
  417.  
  418. XaoS is interesting, but it's a different approach to fractals than
  419. FractInt.  XaoS emphasizes speed and sacrifices rendering quality to
  420. achieve it.  (Yes, you can stop it and do a full render, but that sort of
  421. defeats the purpose of the program, IMO.)  It's neat to be able to "zoom"
  422. is real-time, even if you have to keep the resolution pretty low to have a
  423. decent frame rate. :)
  424.  
  425. I don't think it's the sort of thing FractInt needs to be doing, but hey,
  426. that's just my opinion. :)  Adding that kind of capability would involve a
  427. full-screen blit every time the screen is redrawn, which means having a
  428. copy of the screen in system RAM, which can get big in a hurry.  Maybe in a
  429. 32-bit DOS version this would be practical, but... ick.  And if FractInt's
  430. video drivers don't have full-screen blit support, forget about
  431. performance... or write blit routines for all the drivers so you can have
  432. performance (big chore).
  433.  
  434. Of course, it's late and I really ought to know better than to offer
  435. technical commentary when I'm not in full command of my mental faculties.
  436. I'm liable to get something wrong.  So if I'm off base in the blather
  437. above, please feel free to correct me.  :)
  438.  
  439. Damien M. Jones  /  temporary sanity designs  /  http://www.emi.net/~dmj/
  440.    dmj@emi.net  /  my gallery: http://www.geocities.com/SoHo/Lofts/2605/
  441.  
  442.  
  443. Thanks for using Fractdev, The Fractint Developer's Discussion List
  444. Post Message:   fractdev@xmission.com
  445. Get Commands:   majordomo@xmission.com "help"
  446. Administrator:  twegner@phoenix.net
  447. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  448.  
  449.  
  450. -------------------------------------------------------------------------------
  451.  
  452. From: "Damien M. Jones" <dmj@emi.net>
  453. Subject: (fractdev) Coloring algorithms
  454. Date: 10 Sep 1997 01:16:06 -0400
  455.  
  456. --=====================_873882966==_
  457. Content-Type: text/plain; charset="us-ascii"
  458.  
  459. Hey folks,
  460.  
  461. Tim asked me to send my coloring algorithm FRMs when I "finished" them and
  462. weeded out the boring ones.  So I've attached the FRM file to this message.
  463.  It's ZIPped, because the ZIP is 7K, and the unpacked FRM itself is 170K...
  464.  
  465. Most of the coloring techniques are of the "orbit trap" variety.  However,
  466. they are not like the average orbit trap.  Usually, when an orbit point
  467. enters the trap, it bails out and is colored immediately.  The method I use
  468. is to simply track which point comes closest to the trap, and when the
  469. point finally bails out through the normal method, color based on that
  470. point.  Since points are merely "tagged" and not trapped, I probably
  471. shouldn't call them "trap" types...
  472.  
  473. The trap shapes included in this FRM file are points, rings, hyperbolae,
  474. rectangles, crosses, and spirals.  Each trap shape has a version that
  475. returns the distance to the trap, the angle between the tagged point and
  476. the trap, the angle between the tagged point and the origin, and the
  477. iteration number of the tagged point.  Each of these combinations includes
  478. a version that plots inside points with the same method; and each
  479. combination is available for Mandelbrot and NovaM fractals.  (Yes, this
  480. means there are about 100 formulae in the file.)
  481.  
  482. I have also included a formula for Linas Vepstas' continuous coloring
  483. algorithm, in three flavors; also, Kerry Mitchell's triangle inequality
  484. coloring algorithm, from which I removed all banding.  There are also two
  485. customized flavors of Kerry's "average theta" algorithm, again with no
  486. banding.
  487.  
  488. The reason I'm posting this here is that I'd like anyone here with an
  489. interest to test the formulae and see if they work for them. :)  I'd like
  490. to release the file so people can play.  I've been meaning to post some
  491. pictures generated with these techniques, but I've been so busy lately I
  492. haven't had a chance.  (Haven't had much time to work on a 32-bit Windows
  493. FractInt, either.)  Any feedback would be appreciated.
  494.  
  495. --=====================_873882966==_
  496. Content-Type: application/zip; name="dmj-pub.zip";
  497.  x-mac-type="705A4950"; x-mac-creator="705A4950"
  498. Content-Transfer-Encoding: base64
  499. Content-Disposition: attachment; filename="dmj-pub.zip"
  500.  
  501. UEsDBBQACAAIAOEFKiOzdsUDQh4AAESnAgALAAAAZG1qLXB1Yi5mcm3tnWtz2zbWx1+7M/0OWL9o
  502. JceSLbreNk7b2dRONt5tmoyTPk27052hREjihiIVkrIjb/a7P+fgQpGUbIuKL5T990ximcLl4ODg
  503. hwPgCHoivNF/WuNJt92PR19+8UQ8j91eehym4nkUjyaBK577gRTdqThyR74Mxcu2+EcUyuTLL778
  504. 4kS6XuulbD334yQV/32SL0t02ruiJd7IcSpHXRmLx9ui8/jxt19+sfFEvOnFURAILzoLRePw7cnP
  505. raNXv/3SFGkkEimFS+9FfZEO/USk8mPa5kwq41t+1DeS9VmyXhSmrh9mT6U4i/00JUkXyUxFNM6G
  506. 0UhMo4nouaHO3kvFqe8K2Rq5fiDclNvxN7/ntXvRqJmvXCZyVs84jk59T4pQnlExQRT74YBEH9CL
  507. dDhKuDHpUIqXbujJoBtHqSqkz/p1A3H+r/BR50/xA7/489+OeCR6glKK1+4kEEcy7k6ToR/LrxPx
  508. S3TqvhTpdCxVAYWMpOGGKmCv1WmKHdHY08U1ubyZ5L9Ta8980moopceCTbghQeSmJHNrHPnU3yM3
  509. HYpGFCqh34mxO5BNypQOVQlZl7AKWJakLcRxX+nRi8Kv0231UlUykKGMKcOUXqXCVfmTKPC9llIT
  510. SeCPqHRxNvR7Q0EdGlPVZCHeJAioVN1eo6eEak4iVUQsP0xII2IsY9+Len465ZZ0SZxJHFKhr54/
  511. F41xLJNEDLZn+trk9JHnc4Yfdjdz/fnq5Kfjt+LtydPX4uWzty9eHb1Rj0Vm+qE7ksqwRBR3/VSk
  512. sTvWjRcuCTLwT8m43MTkYuN/9+5d6/fff2/98ccf/2od/zmri9440NbLNk0atnbAxbVNCWwq1KNv
  513. Y9fzUz8K6e2Z9dDISG1CVhElVL9etuwbuqt//71YkRZ9k2Xf1LUJ8Zp7PKGOEyEVTIJMuLtM4fTT
  514. 5XEQTVLqIqkMYqoazGWMpbc9e5L4ozH1c+oOBtKb5WeVBW4qYyvwazIwEljVS/X/xj0vT6nPlRFT
  515. qXHk0pNE9IIokQQT6tlxh5owK5N/yGw9yn7kJ6kb9jg5DWGyAI8eRHFKRkCDvjd0wwGPxbHjF7Mb
  516. w9+UQeCPU7/nBpsqK5cliCEp8YytvOfHPer/eLuYnXuHOsLlenhgUAVZA19Mx9xA+kVDNwrcZRvp
  517. fpSlNnqxe8Y6j6PJYKiVMN9u1v1IuskkzqudfzaHRgRuXjDd3KahR6UR1DZ5/OjmpptirE2AaVYs
  518. wOZ32VB+JXVRK1lS3XJlUix0TkKrg0M/Zh3Qr14gl1ZAsXYN0ZRK3RY8DCaJGO/52zkl/FTsYSqj
  519. 1Evi1A0mZPeKKdTyUHSIa7HYbW5r6ZOxJOITdPzIMG2BDMay3ICsmE2eO59zK9shreQNoZg9ZxWH
  520. sTPTyL8dkl6NzDOXejAUMo5JrF4sdUFDns5G7nuufU4mXcSMQNuiS8OTBjbp1JuwSVB3kqQJE13z
  521. tWRXDcnt9hWXlfVya44kTXHjKFG4Ecmk2+LCm9mwJf7ysA0myS0a9FyXsqS2CvejnzwpWoCadFRH
  522. qZSbuoM358Z+3z1llIdSFSKiU5NBWQpJ85TNeuROud9N9xbLKA/6k56i2gnVRuIsb/PLkK2kED1n
  523. uDFPwFoJlyt528yuxozL2GJzLhaQvJdnuqZL1WRL8K0O3ox91gH9oil/aSMRiUpfFKEnlQl7evzn
  524. zIQcL5OBHwbRwFUult9rFwt46w+GacgOgB7WuUzs57HPmdOBHtMl/oz80B9NRiKcKKeVyvFJJkYF
  525. uZhqAPX9WRmZFk7IatgS3OnyKojdabFuchzJppVPZlSgqlGmpTptppGnVtBiCQulNiZwsfBHJ0r4
  526. I3ICqrVg7PpxqQl9blZyaVMSa4D8+1Hnu91iEQsaeVm7Sla8uJEqEflkRc/ID3n2U6XpGZJdUWm8
  527. yX5MqwQFHuPazyrKfHyrwKfUSlLgU8MANlfdacYMjd+k51ya1yT5RuQ7LuQcp93OS2JmYa9Aah6g
  528. kzTh5ccPpemP+CEKXrxaVQ2jM9Jd1uOyp3o8X+bVgpdmyVkrjJ/JXb5A9BKoLmzHJaKXLGTWjkQB
  529. 2FLTNCFz6Ra1IuvYkup5Yp3X+kw4mqWDOeFKxldU8nGq3KFja7FGusyCF4tXBns1gS7WlnrYOj7g
  530. RVtqBgGZvHJpQs/K0s+tfLatj8hjIyvzLJoEHi0baOCwJ0Fg2STPmUTa1PMwTzZUoOJ45mYkVFxW
  531. QjZ8yBPTE7ZplHVKqam8YH3565u3am2X5cyt5Ejgvlpm6E2CiOSK37MzRGmC6azFr92Y6iaVJwcb
  532. /GOUciT7tM5OD0zRxKeD/BpPz0SmR3bEPyaB74rexkZjd3u3afM48YGeV6kvyexDMu1BLGWyrZRJ
  533. xVB1u1li/6DoeDaGpIRz3n0IDgi0ajXSzHJ2bL49qkQRSCSUgHGqvFtuyrf7WSIqnJdsvGLbEfIj
  534. FUEGYRpOKTvOd/S8M1v4vn3x7KS05n0q+vLMzPGUbxh52gfh5Tc1rhdMPOpReteMMrJFettkZnPx
  535. 8gtgtfgVvOpdtN7d5p4PaJRmDpbbJTeDMrSOSZN9wat4yaj0Q+pu8lzYvVV2r6ZyvYnAkl2y7s22
  536. ZHRrMn9lFFEj2QZaWXJXuQd+OIkmid6jyDGefG/jbBbHlbbIvVibfSBTtQGi3VAGAS22eu95bUyy
  537. jF16P5ULCgiiaMwG/8zlrRCyugFlnyGiy9OkqmDonsoLBFAScyFv46kWIGyPyIr1FEgJEqkmbGd/
  538. v72wCN/qzBjRNpmyGh9sj2Q8VHTjJ5cmZeLNggI4pxp+lPpnmvUT8X9yTAhO2s2C0l+/OMwp3XKB
  539. bUG/r9c0NPnTm2eRbtaC6nggUJLGzIvwm+qFWgEFkhSlSh8tWJtl8rIsns/WfpGJvHPyJpL4Iz9w
  540. 1UI4a4yWVyH8EnFjMh4SSHUi7z4kkocmraTHUawdGcPei42k0VcbrEM36NNyniZQaiz/ka3T3sa+
  541. nretxNokqD91p4l/0lpzKl76KTlxQfA16cfkWFCbH8oP5AoyZLVeRIPbmahmk0HPxkpzkTkdZrRS
  542. o5VtrztlM3ySMUr9nbmfBJPU/S03IsvCq0U7MZKnuMw9odlnQeXsrlpHxuTg9bbkhQEVZrdCFJBY
  543. p4uanw2+XjTR0x+txKKE960axyEvKfQ+k9LpggKsljPr1w10bruBgXsb7VMJDl88/eXvx7/8XdDE
  544. Ip6/Onn5689Pn5msimzWr+DBpJapkmATRL33iWmMtnAaGSmJRQ1Lci4aLQJSnwzyvOA25dwIGg59
  545. Gl5q5yO07LKTY+YA2IWkHj+mKnN4oApU26B2olpct8JMpsBGGg0kM6Rpd3YM17hwU4DqDvLK2GtS
  546. vtE4cHt6oa02MeT8brCSM8vux4uE7U6C91YT84cP9MiTT2wR0Zkbe4l19fRG/Uwi3mEoSWPH6fFz
  547. UwRrTDvsvtryj9WhR15o4pFZH9MDk3+Wmadus2xr88ERPU+JR4ucWVaiquPrWKrH7GRGdpuT9c8Q
  548. dY1TxNNc4L/nwwzq5ama9uhxl1ykhP9QlU2pgrH/UQZbDp+X7G23nPY3zW0+t+C6d7f1SMi9dPg1
  549. 5VSrkm7SYDka06Y6puG9NfW6uSDBXi7BHh/CyAWJGq39Zi4d/5lPKsWW6OzyT/agxYc1UdyQOzQb
  550. N7fYn3sk9hx635uMRty+syGZZfKBnpyz7Aeq4fzynFKy52ebqH/rZ8fPhRVKfC9au+1v9rlRtEij
  551. hJ+mrCz1cJv+391vflLvcSZP/Cjo0a6zL776ilJ/z385jsktxBNP9CaxclgIAD+/eWaeG423OvqN
  552. X47Ywug1JykI8wNL4zSzCotvfGPr4bcaRo8sEktj/2SZOk3x6ZPIpeBSi4lanMqWx5IrwbtunJhn
  553. OfHLDciaYFop5hS6l69sUfWUZKY08pmC90vpjF4tUtusOH6c1aKUtrs/L0tejwW5O6w3+4T72lGK
  554. zD3hwvL1FpQ4Ui35fA0qs7N6yNvkbtEml7NKFiyQ/TSNxtUlm5OCmryqEDHP1tWlKHf9XEf/qPph
  555. QZ/yG/vlHvtr0R4uM00S+j+eOsCuqLWidGxY+8vLl699NjQq15+v5JsF5mQJ16nckf+ZQW4VW5oT
  556. bm6A7s2xyslXT+5AsJoNsQXNXqrmcp4faerQFfCc0jDqyQZbk2cmUgJNH/nHKkM2b5oXNMNslO3U
  557. pslqIX/WzG/qrYKIOfky2b784n88XzxpXdsPh7zwGXsg1Rk7e56Zl8L7Gfxe63WYtnir8b/iScln
  558. Ocg2xLNNR7Vjzoc8avNIbX4r1+U3tRrvsF55F2mb1q32dbYhl18TK0cs6v9112x9qEIyVy8aaw9U
  559. fuzJsToI5BV4YsVjh/RYbWir/RuzetWOV6RjTA7dmN4KaS24+dOk26Ul9aYNRjAmoQxv7DR1h21Q
  560. 3uPwlHxhz5yw8vZbfk+rrfrPNqvDPo0ybyqCM7+ZdJPUTycpu292g0GV1M51dzYoxnuXVjzbFJOm
  561. 3j2q99t961hR9mqV2lyXVWoc21yF3FByybKmUq3LVmot5wfRkY/2vtvgKg/tKac5ceEFXd9VB47a
  562. nkg2lVBFUugFAJlYr5StbQfND8JRyY+Liz4dmBFnHfVvq3OnufN4l5twGI3GLL/d4KSR0UujuJ35
  563. lewqW7/6gKvIRaoUF01tkyP5EDfOVWDSRik9dSLHW5jEM9nVLwYJpz/iP/jfiFYDs0WYKl2Z3Hlr
  564. 3GFCxSr5q37fbHvRmJtFbmTJVXvPVaBUP/DHuvv57y1h7b5Jw/1IR5YYO1d65Ynj3Pmk+8uoKRv9
  565. ur5G8mHi0ppFbZDoyeR720nNrJ9NdMI4lqd+NElmFiKE7exzVcsbl49ZuKPVc51kZj5ePpFcaAx5
  566. Q/90/olmF2vuzZk1MUuklxSt3PRc2rDis4bt+GzpLnoiTtQphRmUtAZX6zm1aiUTPdclZbOSFpc6
  567. hxZtA3XiHMU9qSIiPurTikXsN/pWe0+S14hq3cwl8I5KINUo+d8ibreOr5ncy+C6eG64Eq4tqvUW
  568. C3ANXAPXDx3XvAy3SBy5hMsmLQQW81vsGBTdD5BzkEUR4zqU4GC2ZW5VeRHIS6EGOliZQxhckQS8
  569. Jg+mZBr9voxlmGYAb88izw3zdYX5AAgVBAkOg8PgMNxmS1stTYtaxoktWU01OZHujKdzjjGICqKC
  570. qCBqXTzbCq5tvWHLAbe1Re0sehfIBXKBXDixZSd2o6ZMrbMDC6qCqqAqHNmVHNlaApc/0LToIC1c
  571. BrSVDtE6qx2igbPgLDhbD86yBooUncXN64/z3tl+rBYt42vhA5l1gu0FcQvALXAL3AK3d4nba9qs
  572. rT2JX0zHV0b+WgRnFydZDF8PpGZGp6Y5kOr6SbWx/qjyzGfMcnSy4Mq3fXY5WEai+7FNaUuci2na
  573. qGtMk0HLFcGpgAvgArjc7m7d8n7MelJnhUjKOfxUit8BpAApQOrBRhsa5lQ/rAV1QB1QZz1do3rj
  574. aIV4vOowWhQBAigBSoDSg4xZM9y5DTcI5AF5QJ7auUO1RFKlqC5sQwMuDxAu5dP1O9/kWYuD84oh
  575. TGAL2AK21Hgrp/bQOfTjpaN1Zl80tvZhjDdMOKUp/V1sJcoVGAfIPYB4RkZkj//jDC2RN7pMc2wu
  576. 9V/V8RS9cS8DiwwFlwwsAgfBQXDwQXPwgYVAMR9XCIHKg/JB3F4EnAKnwOkNuZX1DY8weKx+TAlA
  577. ApAAJAB5s/5mvcG5QlxZJWzep0uFgE/gE/i8Sf9yo6aIvGHfEpAEJAFJ+Jj3LFiP4VkpWA9HO8Ag
  578. MFh3DN5o/E/V7ci1CPGpGFcIDAKDwOBDx+ADiYCMHURAgos3xEWtAsO5wscWDg3epFGTMPcagqYz
  579. mjb4MkhmqVbRhSTN6w6xk3fCT8ROgqAgKAiKqMtrJSuiLgFigBggRrzm9YMV8ZpAK9AKtCLS85Z2
  580. CRDpCfACvAAvYkRvBK6IEQVegVfgFdGlt4ddRJcCoAAoAIq41FXxibhUABQABUAR0Xpt34UeJEtH
  581. tPbiKEmAVFxb/GCvLVa9/dyPSYP5wHzPMeksRLcyZKph3Iuo1LlIfofA5zXNSC8k0cOVMWiwwC3U
  582. /fNrwi1i3qTS9cqmiS8ZvhN6LhnPCn6Cn+An+InvUV4KrCuEsxYIi6ArcBgcBofxVdFlrFY//AdY
  583. AVaAFWDFt2GvskNQPZa1Gm8RbQXugrvg7sP6wm+D1pt2ZgFXwBVwBVzxneYZdSsFsuLUC/wEP+8j
  584. P/G17SvCs0oYK/AJfAKfwCe+mf4Srp700uXvZaWholf5gCqgCqheC1R/vASq1Jk0ghHKWu+IK4PQ
  585. Za9mBUQBUUAUEEU869J0XeV61jJmEXoFGAPGgDGCWufYusKNVqAr6Aq6gq6IbF11w2CFW1orQxcB
  586. WIAv4Av4PrDwVsPX23BrQVgQFoQFYRHjOkNvtctacRwGiAKi9xWiCHRdkaCV7msFQ8FQMBQMRbTr
  587. FXB9M/aXjnZNxn7sBiWk2gF2GV9SfzBMQ5kkOZ52ilhzKmINQL09oNaVjOfmLKNERYvCzk6jx5hj
  588. EmbhPU5TMXEwoRIzgDX88FTGqfSa5fnDM0PqwllDC+JkeD4p0pjKb+SRvGOZqy7ALsuRjbF2/Vfq
  589. X31l6Fi40vvehbIaPi4ZygpCgpAg5EMl5DKIXORUvpqkf1lzRK4Qj1pkZaVwKRAVRAVR4XMu5XPW
  590. N+rJgLP6qTzQCXQCnUDnjTuj9WbnChGjFcm5KJgJBAVBQVA4n8s7nxs1heeNO57AJ/AJfMIB/UwH
  591. tJb8rBTTiXMhkBAkXAcS3k5o0WdtZK5FTFHFgE0AEoAEIB8wIK91u7L+hBxFUTpsvHv67vhNcyEl
  592. E5UiJ7oijh8O1LJ7vBcf5BhEj2mIst1Qv5qxTnV3qDRqpBxIxkboJU2T2T/IQlcL6YkiJfiuQsHO
  593. mkHwakr5gZpWdoJo0HDamVAyTqSgZ8IRDRoyDB41yoMxpea0/C9TgsplntoGNIsZa0jD1T5b0jDF
  594. O1ukui3SR0uoF0Ynmp3NZg6eWZjLnY7I1y8OVxmNzkWjsbPUeHT8C7I71z2cnYrD+Rq8qWU+crO4
  595. 4s/7xA0wst4Y4RxnQyok+aA/dfI0oAJD8oASIZVb+mHixsZeVqWOU6DOs5/fPFuxuMzK88UZw7g7
  596. nL1zVqCZ+iMRu62O860gDQu33yefVHqiO53jWz4HDZyWs79/VR4HzAQzwcw1ZmYuO3X8VqNxvrXb
  597. 3t399ruOs88ETONJ2Cs8bF4XX1eomlXtfFci8rlZ4ysRWmJfrxZH0aksYHFyd0vEt7GvDlQvWySm
  598. Jg2ZpqSeDfx0KmjBHbsDqTCnz17dQFAmV31YlKQdkU2KfhyNxM9t8U8Zx1Px0k97QxkEKtMo8vy+
  599. Lz29vRallL2nJefiieck4rZ43Pqu9fjba1gtrt2eWTIZmS0wtplJGPLko/SU2/LqXEw0lwGjjFtR
  600. Ron8tJtEAderZY76mkBFRN0WCvvW0CnlL2TgMU2s1AY2o6w9U5nmqKmErUROV21uEd1mu0TunA76
  601. 6qPLVOdoBdgG0VmXlG4/E80VtoTbUx8CN2lZbWfsGKh0bCjUt+2si/n/R8JyiHLbIptiR3CBj6gr
  602. c08pozEKFkN0ZXomZahLT9o5IlSbAljyalNAX3yvhkL26e/UH0nqdaKWn4pBJNyBq0IyFEu5u69C
  603. MMtKhS2wBFtKFHgzre1kO3DZ/p/Bkr5WIbelrGeFjfznyllaMXZJ7kLLhFhUwdN8ufkm9aktTtuA
  604. Xz8yMlKf0q+W/osnl77ggUQtGkfKKowV2ImmP79JoaaMbH/Rti23W1ppxphNTNc7d7SOMXlg8sDk
  605. gclj7koLfYDSUkdWmE0wm1w6mwxl6v62cA45k3z8TrjXkaNR4qsBfr3TiK6EQcm5L5lUHt/9pHI5
  606. 33VLMsIfTuJY0tDTj5ebAD6H4zxp1QThFXmsDqzzx8HWEeZxPaLiR6T3EkX08Xlr7JRP8R39fp7T
  607. lx2mb5leYxMYiclYxzmbeJOsR82LLbHbNpsJ3oTG5axry4NxlX0g7sCNNVgAXDurLYL3HjSCLwio
  608. AoQBYUD4NiE8F4nU6lwRvwkq31sqO4Dybex8gLnXztwtwuQV3F0EXHiyYObnMhOuLKgJasL1BEYr
  609. YfRJ69p+qDAarqfuS8E0oH5L2hbU/Lj1OkyvvBg6+3SJ/RiX/gDG/bhz35LjlkLoOGKJfzoP6dJ9
  610. g/ZOeTLQhrlgHtABbF42HfCz3qSrnmRvbolzfk7Dn5+aOs5bDZ2SgLnT2NuyqZuPelmFt3xfv0pu
  611. Z42Cj8B/bxU+G3pEQy2KUzNS7IfAPp07nwofI8t/3ovqa9hG1vN+FeqhFk1s34u8Y3TFR0uo39OG
  612. bcICbtfwltQ8T6+4SPpyolKlv/npkHtWM6O5TTXPbmBJXJouXf26G/X/umu+l6AY4B2N1SBssIrH
  613. ygE4i+L3iZWp2SafQQVDuwERI/FHfuByMAe5TxPtTh+6Mb0Vfp2IzZ8m3S55OJsinY5lG9AH9AF9
  614. QL8S9Bd8rrfCN62s83ywwq3Z5flglpUXpOLMDwIx4Ou3XJEEvM8RTMk++n2pDrnsPNCueGsscA6c
  615. A+fA+TX58LW8VjZP5eo3I4LL4DK4DC7fVze73she4Sbw2wP2oltwAW6AG+AGuK/Tod6oKZnr7EyD
  616. zWAz2Aw236FTXUtsV7rd/LPOKDurnVGC1qA1aH1faF2+VDh/C1M4GXVlfKf71HW+TziP7Co3rgPa
  617. gDagDWivF7SvZxO79jx/MR1fGXxtQT6cjmXcjQJ34bdnrNWtSg+SdxsPG3j2jqUc47IP0uT0Zq3c
  618. 72U8uz/bt7bUuei1jbpGrxlAXRHNDEQBUUDUfd/FXE96rRB7O4exSrFagB1gB9ghPvU6yFX9SB3s
  619. ArvAroftqNUbayvEcFaH2qJ4H8ANcAPcEOf4ufS6DacM/AK/wC/EAt4m2irFAmKrH5ACpK4hmqIW
  620. G2BrEShRMfANhAKhQKhaE+qBRHkd+vHSUV6xuq/4XlysecOkVJqKXc+fJKXv7CtQEphEHO2lcbQM
  621. WX3dscMBDXmDzbTOprYmq9SZr3Af49EMSpeMRwNMAVPAFDD9fJgu8FStnd6ngDnG6woBc3nOPoh7
  622. zUBj0Bg0rrNrW98YGMPY6qfIoCwoC8qCsrX2eevN3RViDytR9z5dMwb6gr6gb+193I2acvaG/VuQ
  623. FqQFaUHaO/Vza8neSmGcOCEDRUHR+0zRm4/mWmVbdi1itioGnIKlYClYCpbe/eZr/ekaO4iIBVZv
  624. CKtaBQaSM3WrL7TWhJNGTcJQEDC+Hhg3+FJaRrFW74UgzusdsbR3C2HE0gLDwDAwjCjcOoEZUbjg
  625. ODgOjj9Ud7rGcWSazojfBZ/BZ/AZfvZaEBuRv+A2uA1uw6+uZdyaJjRihsFoMBqMhm+9HtHGRG1E
  626. G4O/4C/46yFO+S4ZjDhlUBgUBoUR4VwTLr8OkqUjnHtxlCQgMq5Hx4dHVr4eXdnLcz8m7ec/7eE5
  627. Jp0l8VbGXQWCXkSlzn08xCFOeU3DikISPeCZpQYs3ELdt78m3CImVipdr2zc+PL6O2PwkgHOoDAo
  628. DAqDwvX6ZrH7GN/MXF4hvrkAaATQAePAODC+zl9wW8tgOQPn6qEYwDPwDDwDz/fTy643sFeIbq6G
  629. a4TOAdvANrC9Bl71Rk0BfdMeNRANRAPRQPRaeta1hHal2GYcHwK/wC/wezdRdStsPa9FCF3F0GZA
  630. GBAGhAHhu4Xw/Y5sPumly9/dTGNM71SAyWAymFwTJv94CZPJEIgBCG+ufxidAfGy9zcDxUAxUAwU
  631. I8b5tuC8yh3OZUojkA4sB8vBcgQ63xChV7hzDowGo8FoMBrRzne06bHCXc6VmY1wOrAb7Aa7EfK8
  632. OqVvw7cGp8FpcBqcRtzztZG72p3OOFcEg8FgMBjBzzfA4Ur3OoPEIDFIDBIjAvpm2fxm7C8dAZ2M
  633. /dgNSkS2I/MyPKX+YJiGMklyOO4UqehUpCJ4fNs8vo9gPTfnQiWoWpJ2dho9piSDNIvXcpoKqYMJ
  634. lZjxr+GHpzJOScTy1OWZQXnhhKUFcTK6nxRhTuU38kTfschWt+2X5chGaXtNdhu++srAtfAlAvcu
  635. vtlgdsn4ZoAWoAVoAdpVQbs0aRe5tq8m6V/WnLQrBCsXkVspCg5gBpgBZoD5Nj3g+ga1Gf5WD5cA
  636. gUFgEBgEXhfXuN4IXiGuuCKAFwWrAcQAMUAMEN+6K7xRUwbfuBsMCoPCoDAoXA93uJYYrhQCjKM3
  637. ABVAfRhAvcUYss/a5F2LILKKAb7gLDgLzoKztdrKrSdo/x9QSwcIs3bFA0IeAABEpwIAUEsBAhQL
  638. FAAKAAgA4QUqI7N2xQNCHgAARKcCAAsAAAAAAAAAAQAgAAAAAAAAAGRtai1wdWIuZnJtUEsFBgAA
  639. AAABAAEAOQAAAHseAAAAAA==
  640. --=====================_873882966==_
  641. Content-Type: text/plain; charset="us-ascii"
  642.  
  643.  
  644. Damien M. Jones  /  temporary sanity designs  /  http://www.emi.net/~dmj/
  645.    dmj@emi.net  /  my gallery: http://www.geocities.com/SoHo/Lofts/2605/
  646.  
  647. --=====================_873882966==_--
  648.  
  649.  
  650. Thanks for using Fractdev, The Fractint Developer's Discussion List
  651. Post Message:   fractdev@xmission.com
  652. Get Commands:   majordomo@xmission.com "help"
  653. Administrator:  twegner@phoenix.net
  654. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  655.  
  656.  
  657. -------------------------------------------------------------------------------
  658.  
  659. From: George Martin <76440.1143@compuserve.com>
  660. Subject: Part 2 of (fractdev) Coloring algorithms
  661. Date: 10 Sep 1997 09:06:17 -0400
  662.  
  663. Damien,
  664.  
  665.     A few style thoughts on your very interesting dmj-pub.frm formulas.
  666.  
  667.     I like your technique of using empty lines to block the
  668. formulas into logical sections. This has not been done by anyone before
  669. to my knowledge, but blank lines in a formula are ignored by the parser
  670. and are a perfectly acceptable technique to make formulas more readable.
  671. Also, your brief comments on each line, left hand justified, are useful.
  672. I hope other formula writers pick up on this and start doing the same.
  673.  
  674.  
  675.      I note your care in making sure that the formula names do not exceed
  676. 18 characters; proposed new code for the next version of Fractint will
  677. report an error and not run the formula if the name is more than the 
  678. maximum space allocated for a formula name, currently 18 characters.
  679.  
  680.      You are the first to write a real formula called "Read-me-first".
  681. I suggest we rename it to dmj--Read-me-first (18 characters!). This will
  682. assure that it is always the first formula listed in the file when
  683. the alphabetical sort is on. Also, when we add these formulas to the
  684. orgform compilation, the formula will be the lead formula in _d.frm 
  685. for all the dmj formulas; as you post more formulas, you can simply
  686. update the dmj--read-me-first formula to add commentary on the new 
  687. formulas. Other formula writers who have used some variation of their
  688. names or initials as the lead in to their formulas may want to consider
  689. writing their own "read-me" formulas to the same effect.
  690.  
  691.      A technical point about some of your boolean expressions. In the
  692. C language, && has precedence over ||, so an expression
  693.  
  694. a || b && c 
  695.  
  696. will be compiled in C as 
  697.  
  698. a || ( b && c).
  699.  
  700. The formula parser treats the two as equal in precedence, and evaluates
  701. left to right, so the same expression becomes 
  702.  
  703. (a || b) && c. 
  704.  
  705. This leads to a different result in some cases (as when a is true and 
  706. c is false).
  707.  
  708. An expression in the form a && b || c evaluates the same in C and 
  709. the parser, and I did see some of those in your formulas. For safety, I
  710. think it's a good idea for formula writers using multiple ANDs and ORs
  711. in a single expression to use parentheses to assure that the
  712. expression is being evaluated as they intend.
  713.  
  714. Regards,
  715.  
  716. George
  717.  
  718. Thanks for using Fractdev, The Fractint Developer's Discussion List
  719. Post Message:   fractdev@xmission.com
  720. Get Commands:   majordomo@xmission.com "help"
  721. Administrator:  twegner@phoenix.net
  722. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  723.  
  724.  
  725. -------------------------------------------------------------------------------
  726.  
  727. From: Lee Skinner <LeeHSkinner@compuserve.com>
  728. Subject: (fractdev) Coloring algo
  729. Date: 10 Sep 1997 11:04:23 -0400
  730.  
  731. Damien,
  732.  
  733.   Does the formula file you just released replace any of the formulas you=
  734.  
  735. posted earlier or are they in addition to them:
  736.  
  737. Color01 { ; New coloring technique #1 (bof60 outside) Color01 { ; New
  738. coloring technique #1 (bof60 outside) Color01 { ; New coloring technique =
  739. #1
  740. (bof60 outside) Color05i { ; New coloring technique #5 (angle of closest
  741. approach) Color11 { ; New coloring technique #11 (ring trap) Color12 { ;
  742. New coloring technique #12 (absolute decomposition) Color13(XAXIS) { ; Ne=
  743. w
  744. coloring technique #13 (continuous color) Color13phc { ; New coloring
  745. technique #13 (continuous color, PHC)
  746.  
  747. Lee Skinner
  748.  
  749. Thanks for using Fractdev, The Fractint Developer's Discussion List
  750. Post Message:   fractdev@xmission.com
  751. Get Commands:   majordomo@xmission.com "help"
  752. Administrator:  twegner@phoenix.net
  753. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  754.  
  755.  
  756. -------------------------------------------------------------------------------
  757.  
  758. From: Lee Skinner <LeeHSkinner@compuserve.com>
  759. Subject: (fractdev) Coloring algo
  760. Date: 10 Sep 1997 12:06:13 -0400
  761.  
  762. Damien,
  763.  
  764.   Does the formula file you just released replace any of the formulas
  765. you posted earlier or are they in addition to them:
  766.  
  767. Color01 { ; New coloring technique #1 (bof60 outside)
  768. Color01 { ; New coloring technique #1 (bof60 outside)
  769. Color01 { ; New coloring technique #1 (bof60 outside)
  770. Color05i { ; New coloring technique #5 (angle of closest approach)
  771. Color11 { ; New coloring technique #11 (ring trap)
  772. Color12 { ; New coloring technique #12 (absolute decomposition)
  773. Color13(XAXIS) { ; New coloring technique #13 (continuous color)
  774. Color13phc { ; New coloring technique #13 (continuous color, PHC)
  775.  
  776. Lee Skinner
  777.  
  778. Thanks for using Fractdev, The Fractint Developer's Discussion List
  779. Post Message:   fractdev@xmission.com
  780. Get Commands:   majordomo@xmission.com "help"
  781. Administrator:  twegner@phoenix.net
  782. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  783.  
  784.  
  785. -------------------------------------------------------------------------------
  786.  
  787. From: Rich Thomson <rthomson@ptc.com>
  788. Subject: Re: (fractdev) XaoS
  789. Date: 10 Sep 1997 11:00:45 -0600
  790.  
  791.  
  792. This is quite a long message... it touches upon some things I've been
  793. thinking about recently and goes back to some concepts I've touched on
  794. before (anti-aliasing, quadtrees, interpolation/extrapolation for
  795. zooming.)  I hope its not too long ;)
  796.  
  797. In article <199709100427.XAA29253@raid2.fddi.phoenix.net> ,
  798.     "Tim Wegner" <twegner@phoenix.net>  writes:
  799. > I looked at it briefly (there's a DOS version, I'll try the X also)
  800. > and it looks very interesting, amd the source is public!
  801.  
  802. I bring up XaoS (darn, that's hard to type that way :) because it
  803. relates to a couple things I've mentioned on the fractint list before:
  804.  
  805. - interpolation/extrapolation of the zoom area to initialize the screen
  806. - quadtree representations of fractals vs. image/par representations
  807.  
  808. I haven't looked too carefully at the source yet, but I have run it
  809. on my home P90 system, my 250 MHz SGI at work and my friend's
  810. UltraSparc at his office.  The sparc with the 8-bit frame buffer
  811. seemed to do the best going full screen :).  It did compile rather
  812. easily on the different boxen I tried it on.
  813.  
  814. Damien wrote:
  815. > XaoS is interesting, but it's a different approach to fractals than
  816. > FractInt.  XaoS emphasizes speed and sacrifices rendering quality to
  817. > achieve it.  (Yes, you can stop it and do a full render, but that sort of
  818. > defeats the purpose of the program, IMO.)  It's neat to be able to "zoom"
  819. > is real-time, even if you have to keep the resolution pretty low to have a
  820. > decent frame rate. :)
  821.  
  822. If you think about it, fractint does something very similar to what
  823. XaoS is doing.  Suppose you're using solid-guessing and the fractal
  824. takes a long time to compute; you press PageUp and zoom in before the
  825. fractal is done computing and when you press return, it starts zooming
  826. in on the selected area.  XaoS uses solid guessing as well.  However,
  827. the actual algorithm used (what fractint calles "passes" on the X
  828. screen) doesn't really affect the underlying techniques that XaoS uses
  829. to get its speed.
  830.  
  831. > Adding that kind of capability would involve a
  832. > full-screen blit every time the screen is redrawn,
  833.  
  834. Odd, I didn't think it was doing a full screen draws, but examining
  835. the source code I see that it is.  It is using a graphics library that
  836. works with the djgpp code environment for DOS.  On X it uses shared
  837. memory transport and does a PutImage.  As fractint moves to a flat
  838. memory model and/or djgpp, it could use the same library under DOS.
  839.  
  840. Even if you have to implement your own full-screen blit, its not that
  841. hard to write.  Sometimes you're bitten by the third rule of
  842. programming.  (The rules are: 1. Don't do it; 2. Don't do it again;
  843. 3. Sometimes you are forced to break rule 1.)
  844.  
  845. However, I see XaoS' rendering technique as basically the same as that
  846. of fractint, only taken a little farther.  Fractint has ways that it
  847. takes a coarse representation of the fractal and refines it.  I would
  848. like to see fractint incorporate:
  849.  
  850. a) frame coherency
  851.     This is when you are zooming in/out of an image already computed
  852.     on the screen.  You figure out how the pixels you computed on the
  853.     current image map to the pixels in the new image.
  854.  
  855.     When zooming in, this means you take a subregion of the screen and
  856.     interpolate this to the full-screen size before you begin your
  857.     compute cycle.  When zooming out, you take the screen and
  858.     subsample it to a portion of the screen.
  859.  
  860.     I think this can be integrated into fractint although the
  861.     temporary storage requirements might mean you need extended memory
  862.     or whatever its called in order to pull it off under DOS.
  863.  
  864.     This is most of what XaoS does to get its performance.  Most of
  865.     the time the screen has been filled by an interpolated image with
  866.     the image being refined over time.
  867.  
  868. b) progressive refinement
  869.     XaoS uses this technique, along with a prioritizing scheme, to
  870.     trade off resolution for browsing (pan and zoom) speed.  Personally
  871.     I would _LOVE_ to be able to browse through the image space of the
  872.     fractint fractals at the XaoS speed and I see no reason why we
  873.     shouldn't steal all of XaoS' good ideas and incorporate them :)
  874.  
  875.   i) computation model vs. display model
  876.     This also touches on an issue that has come up before, which is a
  877.     distinction between the display model and the computation model.
  878.     Let me digress... fractint currently is implemented with an
  879.     iteration-based computation model.  Images are never rendered as
  880.     24-bit color.  They are always rendered as a 2d grid of indices
  881.     (the iteration count, as tweaked by fractint's various algorithms)
  882.     along with a color palette.  It also has an index-based display
  883.     model (<= 8-bit colormapped pixels).
  884.  
  885.     However, there is nothing precluding fractint from having a 24-bit
  886.     computation model and an 8-bit colormapped display model at the
  887.     same time.  (Palette rotation doesn't have the same effect as it
  888.     did before though!)  Naturally fractint would have to quantize the
  889.     24-bit pixels to 256 colors before it could display the pixel.  (A
  890.     standard 3/3/2 color cube could be used with Floyd-Steinberg
  891.     dithering and so on.)
  892.  
  893.   ii) anti-aliasing as refinement
  894.     For those of us who want anti-aliased fractals, currently what we
  895.     have to do is tell fractint to create a PAR file with the current
  896.     screen coordinates tiled into a larger grid of images, which we
  897.     then render with fractint and assemble together the quilt work and
  898.     then filter the final collage to get the anti-aliased effect.
  899.  
  900.     But what is anti-aliasing for a fractal?  Without programming in
  901.     detailed knowledge about the structure of each fractal, the best
  902.     general technique is to supersample the fractal and filter the
  903.     result.  So antia-aliasing could be treated as another refinement
  904.     pass to be done on the fractal after the current "image" is
  905.     finished at screen resolution.
  906.  
  907. c) multiresolution image cache
  908.     Anti-aliasing via supersampling (and there are methods to
  909.     supersample IFS and 3d orbit fractal types as well as C-plane
  910.     fractal types; I can talk more about that if anyone would like)
  911.     requires the computation of many pixels, lots of which will be
  912.     thrown away before we have a chance to use them for a frame
  913.     coherent zoom as described above.  Take a look at this crude
  914.     picture:
  915.  
  916.         increasing X pixel coordinate
  917.         +----------------------------------------------->
  918.             0        1        2    ...
  919.     Current
  920.     Screen        X        X        X
  921.     Pixels
  922.  
  923.     Supersample        X    X    X    X    X    X
  924.     Points
  925.  
  926.     Underlying
  927.     Fractal
  928.     Shape        ....,,./]\,,..,,,..,,.,,.,.,//[[]]\\..,,.,
  929.  
  930.  
  931.     Now if we zoomed in exactly by a factor of 2, we would already
  932.     have the next screen computed in our anti-aliasing process.  So if
  933.     there was some way that we could keep around the anti-aliased
  934.     samples and reuse them in our frame-coherent process, we'd be
  935.     saving a lot of work.  By careful arrangment of the point sampling
  936.     of the underlying fractal, we can reduce the number of samples
  937.     by another 25% for each doubling of the resolution from the
  938.     current screen.
  939.  
  940.     Let's take a closer look at what fractint does on the screen for
  941.     C-plane fractals.  Each pixel is a point sample of the complex
  942.     plane at the location of the pixel.  While a pixel has area, a
  943.     point sample does not.  So the point sample is chosen as a
  944.     representative for the area of the C-plane covered by the pixel.
  945.     This means that the point sample can be located anywhere within
  946.     the area of C covered by the pixel.
  947.  
  948.  
  949.     +---------------+    +-------+-------+
  950.     |        |    |    |       |
  951.     |        |    |   2   |   2   |
  952.     |        |    |       |       |
  953.     |    1       |       +-------+-------+
  954.     |        |    |       |       |
  955.     |        |    |   2   |   2   |
  956.     |        |    |    |       |
  957.     +---------------+    +-------+-------+
  958.  
  959.     Fig. A            Fig. B
  960.  
  961.     Typically the point sample is placed at the center of the pixel's
  962.     area (Fig. A).  This means that when you go to super-sample at
  963.     twice the resolution (Fig. B) you can't reuse the point sample
  964.     from the previous resolution because it isn't coincident with
  965.     any of the sample points at the higher resolution.
  966.  
  967.     1---------------+       1---3---2---3---+
  968.     |        |    |       |       |
  969.     |            |    3   3   3   3   |
  970.     |        |    |       |       |
  971.     |        |    2---3---2---3---+
  972.     |        |    |       |       |
  973.     |        |    3   3   3   3   |
  974.     |        |    |       |       |
  975.     +---------------+    +-------+-------+
  976.  
  977.     Fig. A            Fig. B
  978.  
  979.     If we position the point sample at the upper-left corner of the
  980.     pixel's area (Fig. A, location 1), then we can reuse that point
  981.     sample in computing the next higher resolution image and save
  982.     25% of the work in computing the pixels at location 2 in Fig. B.
  983.     Similarly, the pixels at location 2 save 25% of the work in
  984.     computing the point samples at location 3.
  985.  
  986.     This amounts to a hierarchical decomposition of the C-plane by
  987.     a series of images at various sampling levels.  This kind of
  988.     regular decomposition data structure is generally called a
  989.     quadtree in 2D and an octree in 3D.
  990.  
  991.     A fractal has infinite content, whereas our displays are finite
  992.     in the detail they can represent.  Obviously our computed images
  993.     are only approximations to the underlying fractal shape.  A
  994.     multiresolution data structure as described here approximates
  995.     the fractal in a sequence of increasing resolution images.
  996.  
  997.     As we zoom in and out of the fractal, the spacing of the point
  998.     samples represented by the screen pixels changes.  Generally it
  999.     will not be an exact power of two spacing as it is in our multi-
  1000.     resolution data structure.  Instead, it will be some floating point
  1001.     fraction between the spacings we have computed.    (At this point
  1002.     the problem looks just like MIP-mapped texture mapping.)
  1003.  
  1004.     The integer portion of the spacing can be used to pick a level
  1005.     from our multiresolution data structure.  The fractional portion
  1006.     is then used to select pixels from the particular level.  In
  1007.     texture mapping, you have the further tweaks of point sampling the
  1008.     nearest level, doing bilinear interpolation between samples on the
  1009.     nearest level, or doing "trilinear interpolation", where you do
  1010.     bilinear interpolation on the two nearest levels and then
  1011.     interpolating linearly between those two samples.  These three
  1012.     methods are used to control the aliasing of textures.  Point
  1013.     sampling is the fastest and least accurate; trilinear interpolation
  1014.     is the slowest and most accurate.
  1015.  
  1016.     Now I know you're thinking that this is a huge amount of storage.
  1017.     Perhaps, but there are already some memory pigs in fractint,
  1018.     things like disk video mode at 2048x2048.  Fractint does what any
  1019.     program does in that environment: uses available memory if
  1020.     possible, then spills over to disk when that is exhausted.  Such a
  1021.     multiresolution technique (obviously you could turn it off for
  1022.     the same kind of browsing you have now) would be using the same
  1023.     thing.  There are efficient ways to turn store the multiresolution
  1024.     image on disk in a sparse fashion.
  1025.  
  1026.     Now that fractint has arbitrary zooming, I think it needs to adopt
  1027.     some new techniques for facilitating interactive exploration at
  1028.     those very very deep zoom levels.  For these arbitrary precision
  1029.     deep zooms, computing each pixels is extremely expensive.  Reusing
  1030.     as many point samples of the fractal as possible (even though what
  1031.     I've discussed here is complex) is a major win.
  1032.  
  1033.     By using a multiresolution image cache combined with progressive
  1034.     refinement and prioritizing techniques, I don't see any reason why
  1035.     we shouldn't be able to pan and zoom interactively in very, very
  1036.     deep zooms.  Naturally you'd still have to wait a while for the
  1037.     image to compute to full resolution, but interactive exploration
  1038.     for interesting areas would be enhanced.
  1039.  
  1040.                         -- Rich
  1041. --
  1042.   ``Between stimulus and response is the will to choose.''  -- Steven Covey
  1043.  =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  1044.      3D Paint: The Power to Create in 3D;        Rich Thomson
  1045.      email me for more info                rthomson@ptc.com
  1046.  
  1047. Thanks for using Fractdev, The Fractint Developer's Discussion List
  1048. Post Message:   fractdev@xmission.com
  1049. Get Commands:   majordomo@xmission.com "help"
  1050. Administrator:  twegner@phoenix.net
  1051. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  1052.  
  1053.  
  1054. -------------------------------------------------------------------------------
  1055.  
  1056. From: "Damien M. Jones" <dmj@emi.net>
  1057. Subject: Re: Part 2 of (fractdev) Coloring algorithms
  1058. Date: 10 Sep 1997 13:04:39 -0400
  1059.  
  1060. George,
  1061.  
  1062.  -     I like your technique of using empty lines to block the
  1063.  - formulas into logical sections. This has not been done by anyone before
  1064.  - to my knowledge, but blank lines in a formula are ignored by the parser
  1065.  - and are a perfectly acceptable technique to make formulas more readable.
  1066.  - Also, your brief comments on each line, left hand justified, are useful.
  1067.  
  1068. Well, this is style I picked up while writing assembly code years back.
  1069. I'm allergic to uncommented, unreadable code. :-)
  1070.  
  1071.  -      I note your care in making sure that the formula names do not exceed
  1072.  - 18 characters;
  1073.  
  1074. Too many names would have been identical otherwise.
  1075.  
  1076.  -      You are the first to write a real formula called "Read-me-first".
  1077.  
  1078. Uhhh... just a whim, really. :)
  1079.  
  1080.  - I suggest we rename it to dmj--Read-me-first (18 characters!).
  1081.  
  1082. EXCELLENT notion.  I like.  Will do.
  1083.  
  1084.  -      A technical point about some of your boolean expressions. In the
  1085.  - C language, && has precedence over ||, so an expression
  1086.  - ...
  1087.  - An expression in the form a && b || c evaluates the same in C and 
  1088.  - the parser, and I did see some of those in your formulas. For safety, I
  1089.  - think it's a good idea for formula writers using multiple ANDs and ORs
  1090.  - in a single expression to use parentheses to assure that the
  1091.  - expression is being evaluated as they intend.
  1092.  
  1093. I thought I had used parentheses to enforce exactly the order I wanted.  I
  1094. just double-checked the file for all occurrences of &&, and whenever it's
  1095. used in the same expression as ||, parentheses establish the order of
  1096. operation.  I think this is not only helpful to those unfamiliar with the
  1097. nuances of operator precedence, it also clarifies for the human reader
  1098. exactly what is intended.
  1099.  
  1100. Thanks for your feedback.
  1101.  
  1102. Damien M. Jones  /  temporary sanity designs  /  http://www.emi.net/~dmj/
  1103.    dmj@emi.net  /  my gallery: http://www.geocities.com/SoHo/Lofts/2605/
  1104.  
  1105.  
  1106. Thanks for using Fractdev, The Fractint Developer's Discussion List
  1107. Post Message:   fractdev@xmission.com
  1108. Get Commands:   majordomo@xmission.com "help"
  1109. Administrator:  twegner@phoenix.net
  1110. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  1111.  
  1112.  
  1113. -------------------------------------------------------------------------------
  1114.  
  1115. From: "Damien M. Jones" <dmj@emi.net>
  1116. Subject: Re: (fractdev) Coloring algo
  1117. Date: 10 Sep 1997 13:13:22 -0400
  1118.  
  1119. Lee,
  1120.  
  1121.  -   Does the formula file you just released replace any of the formulas you
  1122.  - posted earlier or are they in addition to them:
  1123.  
  1124. No, they replace them.  Sorry to have not mentioned this (temporary brain
  1125. lapse).  Here are the equivalents:
  1126.  
  1127. Color01    = dmj-Mand-Pnt-Dst
  1128. Color05    = dmj-Mand-Pnt-Ang
  1129. Color11    = dmj-Mand-Cr2-Dec
  1130. Color13    = dmj-Mand-Smooth
  1131. Color13phc = dmj-Mand-SmoothPHC
  1132.  
  1133. I rearranged the parameters a bit, too, to make them consistent across all
  1134. the different variations.  The idea is, if you want to switch the coloring
  1135. technique of one of the images, you can just change the type and leave the
  1136. actual parameters (pretty much) alone.  But it means if you've generated
  1137. images with the ColorXXX formulae, you will want to keep them around or
  1138. convert the PARs to the new arrangement.
  1139.  
  1140. The Color12 formula I posted is not in this FRM file, because it doesn't
  1141. work the way it's supposed to.  I was asking for help when I posted it, to
  1142. see if anyone could help me understand why it didn't produce the same
  1143. results as Peitgen, Jurgens, and Saupe get in their book, _Chaos and
  1144. Fractals: New Frontiers of Science_.  As soon as I can get this figured
  1145. out, there are a *lot* of new techniques I'd like to implement that require
  1146. it (like spiral palette-wrapping, a la KPT Fractal Explorer).
  1147.  
  1148. Damien M. Jones  /  temporary sanity designs  /  http://www.emi.net/~dmj/
  1149.    dmj@emi.net  /  my gallery: http://www.geocities.com/SoHo/Lofts/2605/
  1150.  
  1151.  
  1152. Thanks for using Fractdev, The Fractint Developer's Discussion List
  1153. Post Message:   fractdev@xmission.com
  1154. Get Commands:   majordomo@xmission.com "help"
  1155. Administrator:  twegner@phoenix.net
  1156. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  1157.  
  1158.  
  1159. -------------------------------------------------------------------------------
  1160.  
  1161. From: George Martin <76440.1143@compuserve.com>
  1162. Subject: Re: Part 2 of (fractdev) Coloring algorithms
  1163. Date: 10 Sep 1997 15:20:50 -0400
  1164.  
  1165. Damien,
  1166.  
  1167. >
  1168. I thought I had used parentheses to enforce exactly the order I wanted.  I
  1169. just double-checked the file for all occurrences of &&, and whenever it's
  1170. used in the same expression as ||, parentheses establish the order of
  1171. operation.
  1172. <
  1173.  
  1174. Yep, you're right. Sorry to imply otherwise; I would reiterate the point,
  1175. however, that precedence in the formula parser is not the same as for C,
  1176. and there may be traps for the unwary. Best to use parentheses, as you did.
  1177. While I'm thinking about it, the parser does not do well with assignment
  1178. expressions in any form but a=b (or a=b=c etc.). Attempts to integrate
  1179. assignment expressions into other expressions (e.g. sin(x=2*y)), which are
  1180. permitted and even encouraged in C, will yield unexpected results in the
  1181. parser. The parser is very sparing in its warnings about such matters;
  1182. improved error reporting in the parser is on my wish list for Fractint.
  1183.  
  1184. >
  1185. Well, this is style I picked up while writing assembly code years back.
  1186. I'm allergic to uncommented, unreadable code. :-)
  1187. <
  1188.  
  1189. This just reinforces my feeling that the parser has evolved over the last
  1190. 18 months or so from an "equation" parser to a "program" interpreter. I
  1191. wonder if this is going to affect people's attitude about copyright
  1192. protection for formulas; until now, most have regarded formulas as public
  1193. domain, on the theory, I imagine, that a simple  mathematical expression is
  1194. not a proper object for copyright protection. Also, people may be waiting
  1195. for B. Mandelbrot to copyright z = z*z + c before they venture to do the
  1196. same with their formulas. :) But with the analogy to programs becoming
  1197. stronger, this practice may change.
  1198.  
  1199. George
  1200.  
  1201. Thanks for using Fractdev, The Fractint Developer's Discussion List
  1202. Post Message:   fractdev@xmission.com
  1203. Get Commands:   majordomo@xmission.com "help"
  1204. Administrator:  twegner@phoenix.net
  1205. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  1206.  
  1207.  
  1208. -------------------------------------------------------------------------------
  1209.  
  1210. From: "Damien M. Jones" <dmj@emi.net>
  1211. Subject: Re: (fractdev) XaoS
  1212. Date: 10 Sep 1997 17:50:55 -0400
  1213.  
  1214. Rich,
  1215.  
  1216.  - Odd, I didn't think it was doing a full screen draws, but examining
  1217.  - the source code I see that it is.
  1218.  
  1219. The only way NOT to do full-screen blits is to access the blitter on the
  1220. graphics card and rearrange the bitmap in video RAM to make room for new
  1221. lines.  This gets REALLY messy when you want to support more than one
  1222. chipset, and it's very hardware-dependent.  I think it would offer a
  1223. noticeable speed improvement, though (but I don't recommend this approach).
  1224.  
  1225.  - Even if you have to implement your own full-screen blit, its not that
  1226.  - hard to write.
  1227.  
  1228. For one card, no.  For dozens, it's a pain.  Not too bad if you're only
  1229. interested in supporting VESA modes, but VESA modes aren't exactly
  1230. blazingly fast (well, VESA 1.2; VESA 2.0-compliant cards offer faster
  1231. accesses like linear frame buffers).
  1232.  
  1233. The biggest problem (as far as FractInt is concerned) isn't the full-screen
  1234. blit, it's dealing with the memory consumption.  This would largely take
  1235. care of itself in a 32-bit mode, of course.
  1236.  
  1237.  - However, I see XaoS' rendering technique as basically the same as that
  1238.  - of fractint, only taken a little farther.
  1239.  
  1240. Yes and no.  The biggest problem I have with XaoS is that while it's neat
  1241. to look at, I find it pretty unusable as a primary fractal explorer.  This
  1242. is because where I spend most of my time exploring, the computer simply
  1243. *cannot* keep up a real-time display.  Personally, even if such a feature
  1244. were embedded in FractInt, I doubt I'd use it.  Once the *minimum*
  1245. iteration passes 1000, real-time performance becomes fairly impossible.
  1246. Add to that the fact that while I generally don't let an image fully render
  1247. while I'm exploring, I may not always wait the same amount of time before
  1248. zooming in further.  Sometimes only one refinement pass goes by; other
  1249. times I may need a lot more, just to identify the structures I was looking
  1250. for.
  1251.  
  1252. My gut feeling is that while XaoS is neat, real-time slow-motion zooming
  1253. isn't that important.  But it really does depend on what you're using a
  1254. fractal program for, so I'm not saying other people shouldn't think it's
  1255. important. :)
  1256.  
  1257.  - a) frame coherency
  1258.  
  1259. Sure, this is a good idea.  However, I would not want to re-use points
  1260. unless they landed *exactly* on the new sampling grid.  Otherwise you can
  1261. get subtle discontinuities that just don't look "right".
  1262.  
  1263.  -     I would _LOVE_ to be able to browse through the image space of the
  1264.  -     fractint fractals at the XaoS speed and I see no reason why we
  1265.  -     shouldn't steal all of XaoS' good ideas and incorporate them :)
  1266.  
  1267. In general I would agree with you, but I don't think the benefits are worth
  1268. the hassle at this point.  (Good thing I don't make decisions regarding
  1269. FractInt development, huh? :)
  1270.  
  1271.  -   i) computation model vs. display model
  1272.  
  1273. I fully agree that the image generated by FractInt should be separated from
  1274. the method FractInt uses to display that image.  That gives
  1275. resolution-independence as well as color-depth independence.
  1276.  
  1277.  -   Naturally fractint would have to quantize the 24-bit pixels to 256
  1278.  -   colors before it could display the pixel.  (A standard 3/3/2 color
  1279.  -   cube could be used with Floyd-Steinberg dithering and so on.)
  1280.  
  1281. Allow me to insert some technical observations at this point.  First of
  1282. all, using an 8x8x4 color cube gives horrible results for grey scale,
  1283. although for photographic or rich color images it produces moderate
  1284. results.  Second, if the code needs to be ported quickly to a windowed
  1285. environment, you should be aware that the OS generally will want to reserve
  1286. some colors for itself, and won't like an application redefining the entire
  1287. hardware palette.  (If it even lets the app get to the hardware palette.)
  1288. This is absolutely the case in Windows, and what little Mac programming
  1289. I've been exposed to leads me to believe a similar situation occurs there.
  1290.  
  1291. For this reason I would suggest (just suggest) that instead a 6x6x6 color
  1292. cube be used.  This uses up 216 colors, and provides six true greys
  1293. (including black and white).  Twenty-five more greys can be inserted at
  1294. equal spacings between the greys in the color cube, giving a total of 31
  1295. greys--just about as good grey-scale representation as you get in a 16-bit
  1296. color mode.  If you dither the greys, you get an excellent grey-scale
  1297. display, without sacrificing the color display very much.  And you've still
  1298. only used 241 colors--eight of which (black, white, red, green, blue,
  1299. yellow, magenta, and cyan) are typically represented already in the
  1300. system's palette.  This neatly slips you in at 233 colors, which is just
  1301. under the 236 colors Windows apps allow applications to modify.
  1302.  
  1303. Well, it was just a thought. :)  It's also possible to separate the entire
  1304. quantization code from the rest of the interface code, so the actual
  1305. palette used is immaterial to the main workings of the program.
  1306.  
  1307. Using a Floyd-Steinberg (or Burkes, which may be faster and arguably
  1308. better) dither produces better results than an ordered Bayer dither, but
  1309. it's generally slower.  In FractInt's case, where images are typically not
  1310. regenerated all that quickly anyway, this shouldn't be a problem, but in
  1311. any case where the images change rapidly and real-time performance is an
  1312. issue a faster dither should be considered.  If real-time zooming is
  1313. important, keep in mind that the full 24-bit image should be re-converted
  1314. to 8-bit color for each frame, or you will end up with irregularities in
  1315. the dither as some lines are doubled and others not.  This looks REALLY
  1316. messy.  (Oh yeah: blit performance in 24-bit modes can be pretty
  1317. horrendous...)
  1318.  
  1319.  -  ii) anti-aliasing as refinement
  1320.  
  1321. Well, if you've separated your rendering from your displaying, it's a piece
  1322. of cake to simply do one more refinement pass.  Doing it in the fractal
  1323. program also allows you to make it adaptive--you subsample only those
  1324. pixels which have significant change from their neighbors, much like an
  1325. extra guessing pass.  The exact filter you use (box, triangle, whatever) is
  1326. of course up in the air, but changeable without affecting much of the
  1327. controlling code.
  1328.  
  1329. Keep in mind, though, that there are plenty of reasons to cache an
  1330. "iteration count" or other similar pre-color version of a fractal image.
  1331. Because at the moment FractInt runs in a paletted mode, and maps iteration
  1332. levels to colors in a one-to-one fashion, it is easy to change the palette
  1333. and thus affect the entire screen.  However, if you're rendering a 24-bit
  1334. image, adjacent iteration values may have equivalent, indistinguishable RGB
  1335. values.  In a paletted system this is not a problem, because you can use a
  1336. different color index with the same color definition; the pixels are
  1337. distinguished by the color index, even though visually they are the same.
  1338. A 24-bit image doesn't have this advantage.  You'd want to keep the
  1339. original iteration count around so that the palette can be changed without
  1340. recalculating the entire image.
  1341.  
  1342. Once you've got the original iteration data handy, you might as well allow
  1343. the user to arbitrarily scale the palette, loop it X number of times of the
  1344. entire range of iterations, using a logarithmic or parabolic mapping
  1345. (preferably with tweakable curves!), and so forth.
  1346.  
  1347.  -     Anti-aliasing via supersampling (and there are methods to
  1348.  -     supersample IFS and 3d orbit fractal types as well as C-plane
  1349.  -     fractal types; I can talk more about that if anyone would like)
  1350.  
  1351. I for one am aware of the general techniques, although I've never written
  1352. any code to handle it...
  1353.  
  1354.  -     requires the computation of many pixels, lots of which will be
  1355.  -     thrown away before we have a chance to use them for a frame
  1356.  -     coherent zoom as described above.
  1357.  
  1358. Not a bad idea.  Keep the pixels used during anti-aliasing for the next
  1359. zoom.  As long as your next zoom lines up with your sub-sampled grid, as I
  1360. mentioned before.
  1361.  
  1362.  -     A fractal has infinite content, whereas our displays are finite
  1363.  -     in the detail they can represent.  Obviously our computed images
  1364.  -     are only approximations to the underlying fractal shape.  A
  1365.  -     multiresolution data structure as described here approximates
  1366.  -     the fractal in a sequence of increasing resolution images.
  1367.  
  1368. Interestingly enough, it's the same sort of technique that Fractal eXtreme
  1369. uses to do zoom movies.  I've seen similar zoom movies in PC demos
  1370. (Triton's Crystal Dreams II) and I wrote a program myself to do the
  1371. zooming.  The images along the way are pre-generated, rather than real-time
  1372. generated, but by only storing each 2:1 zoom, fairly impressive compression
  1373. "ratios" can be achieved.  (My crude experimentation demo got 75:1.)
  1374.  
  1375. As long as you're not doing a "final" render, I think caching the image
  1376. data would be pretty cool, even if you're not trying to do real-time
  1377. zooming.  I've often wondered what it would be like to have a CD-ROM of the
  1378. Mandelbrot set, pre-generated to respectable resolution, and stored in a
  1379. quadtree to optimize retrieval. :)
  1380.  
  1381.  -     The integer portion of the spacing can be used to pick a level
  1382.  -     from our multiresolution data structure.  The fractional portion
  1383.  -     is then used to select pixels from the particular level.
  1384.  -     ...point sampling... bilinear... trilinear...
  1385.  
  1386. Sure, these are all great if you're trying to keep up a real-time display.
  1387. Newer 3D cards will even help you out with the trilinear MIP mapping. :)
  1388. (Pretty sure the Voodoo chipset does trilinear.  Maybe it just does
  1389. bilinear.  But by the time FractInt's ready for it, chips that do trilinear
  1390. would be out.)
  1391.  
  1392.  -     Now I know you're thinking that this is a huge amount of storage.
  1393.  -     Perhaps, but there are already some memory pigs in fractint,
  1394.  -     things like disk video mode at 2048x2048.
  1395.  
  1396. Yeah, but as it stands that's not the fastest storage in the world.  When
  1397. FractInt's a 32-bit program, storage becomes much less of an issue.  In a
  1398. nice environment, the system handles the virtual memory for you.
  1399.  
  1400.  -     Now that fractint has arbitrary zooming, I think it needs to adopt
  1401.  -     some new techniques for facilitating interactive exploration at
  1402.  -     those very very deep zoom levels.  For these arbitrary precision
  1403.  -     deep zooms, computing each pixels is extremely expensive.  Reusing
  1404.  -     as many point samples of the fractal as possible (even though what
  1405.  -     I've discussed here is complex) is a major win.
  1406.  
  1407. Except that, as I pointed out, unless your new sampling grid exactly
  1408. coincides with your existing sampling grid, you will produce
  1409. discontinuities in your image which are visually distracting.  Think I'm
  1410. kidding?  Generate an image at 1024x768, especially one with smooth
  1411. gradients in it.  Then display it in an 800x600 window, such that the
  1412. entire image is shrunk to fit.  Just about any graphics app will let you do
  1413. this.  You will see the irregularity of the sampling grid and it won't look
  1414. very nice.
  1415.  
  1416. It may be okay for real-time use, but what you're talking about here are
  1417. deepzooms, which aren't even close to real-time anyway.  I'd rather have
  1418. the quality.
  1419.  
  1420. Just my thoughts.  I'm not trying to tear you down, Rich, just explain why
  1421. I think that XaoS isn't the right direction for FractInt (or any other
  1422. "serious" fractal app) to go.  I'm feeling quite amicable as I write this. :)
  1423.  
  1424. Damien M. Jones  /  temporary sanity designs  /  http://www.emi.net/~dmj/
  1425.    dmj@emi.net  /  my gallery: http://www.geocities.com/SoHo/Lofts/2605/
  1426.  
  1427.  
  1428. Thanks for using Fractdev, The Fractint Developer's Discussion List
  1429. Post Message:   fractdev@xmission.com
  1430. Get Commands:   majordomo@xmission.com "help"
  1431. Administrator:  twegner@phoenix.net
  1432. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  1433.  
  1434.  
  1435. -------------------------------------------------------------------------------
  1436.  
  1437. From: Rich Thomson <rthomson@ptc.com>
  1438. Subject: Re: (fractdev) XaoS 
  1439. Date: 10 Sep 1997 16:58:17 -0600
  1440.  
  1441.  
  1442. Damien, first thanks for your obviously thoughtful reply.
  1443.  
  1444. Now onto the nits I'd like to pick... :)
  1445.  
  1446. In article <3.0.1.32.19970910175055.0068e944@mail.emi.net> ,
  1447.     "Damien M. Jones" <dmj@emi.net>  writes:
  1448. > [...]  This gets REALLY messy when you want to support more than one
  1449. > chipset, and it's very hardware-dependent.  [...]
  1450.  
  1451. > [full screen blit] For one card, no.  For dozens, it's a pain. [...]
  1452.  
  1453. I guess my workstation centricity is showing here.  I don't know a lot
  1454. about writing code for PCs that accesses the video memory directly,
  1455. but I agree that such an approach would be very hardware dependent and
  1456. a huge pain.  I guess I was under the (apparently wrong) assumption
  1457. that there was some sort of standard kind of API that would allow you
  1458. to get the performance from the card you want without having to write
  1459. all these card-specific drivers and so on.  The XaoS code seems to use
  1460. an SVGA library in order to avoid that problem -- I was thinking
  1461. something similar would be used for fractint.
  1462.  
  1463. > The biggest problem (as far as FractInt is concerned) isn't the full-screen
  1464. > blit, it's dealing with the memory consumption.  This would largely take
  1465. > care of itself in a 32-bit mode, of course.
  1466.  
  1467. Well memory consumption is a problem with fractint in general at this
  1468. point.  I think there needs to be a point at which the line is drawn
  1469. and the 640K memory model is killed and the code converted to a flat
  1470. address space.  Then all this hemming and hawing about memory would go
  1471. away?
  1472.  
  1473. > Yes and no.  The biggest problem I have with XaoS is that while it's neat
  1474. > to look at, I find it pretty unusable as a primary fractal explorer.  This
  1475. > is because where I spend most of my time exploring, the computer simply
  1476. > *cannot* keep up a real-time display.
  1477.  
  1478. Yes, arbitrarily complex objects (like fractals) take an arbitrary
  1479. amount of time to render, but XaoS uses several speedup mechanisms
  1480. that I feel would make exploring in fractint faster, even for very
  1481. expensive, complex fractals.  Even if you leave fractint's compute
  1482. engine alone and just carve the screen up into 16x16 blocks of pixels
  1483. and then use a prioritizing scheme to arrange the order of the
  1484. computation of the blocks would increase its usability for interactive
  1485. exploration.
  1486.  
  1487. > [...]  Once the *minimum*
  1488. > iteration passes 1000, real-time performance becomes fairly impossible.
  1489.  
  1490. Perhaps I wasn't so clear... while its obvious that XaoS' goals are to
  1491. achieve real-time performance first and other things second, that
  1492. isn't exactly what I had in mind for fractint.  I think fractint
  1493. should keep accuracy of the rendering first and speed second.  For
  1494. instance, there are fractal types where it is known that boundary
  1495. tracing and solid guessing have problems.  For these types, they set
  1496. the default rendering mode to some other technique.
  1497.  
  1498. > Add to that the fact that while I generally don't let an image fully render
  1499. > while I'm exploring, I may not always wait the same amount of time before
  1500. > zooming in further.  Sometimes only one refinement pass goes by; other
  1501. > times I may need a lot more, just to identify the structures I was looking
  1502. > for.
  1503.  
  1504. This would still be the case under what I am proposing.  I am
  1505. proposing alternate methods for improving the progressive refinement
  1506. of the image, which at low magnifications/maxiter counts means that
  1507. you should be able to pan and zoom at the same speed as XaoS.
  1508. Obviously if you are at 10^100 magnification with a maxiter of 100,000
  1509. it doesn't matter how many tricks you employ, you aren't going to get
  1510. real-time rendering on a PC :)  (Where's my Personal Connection Machine?)
  1511.  
  1512. >  - a) frame coherency
  1513. > Sure, this is a good idea.  However, I would not want to re-use points
  1514. > unless they landed *exactly* on the new sampling grid.  Otherwise you can
  1515. > get subtle discontinuities that just don't look "right".
  1516.  
  1517. I agree completely, which is why I suggested my progressive refinement
  1518. technique where existing samples are _by definition_ exactly twice as
  1519. far apart as the samples you are going to take at the next level of
  1520. refinement.
  1521.  
  1522. >  -   i) computation model vs. display model
  1523. > I fully agree that the image generated by FractInt should be separated from
  1524. > the method FractInt uses to display that image.  That gives
  1525. > resolution-independence as well as color-depth independence.
  1526.  
  1527. Yes, yes, yes!  Not only would that benefit come from this separation,
  1528. but it would enable people with 8-bit video cards to explore 24-bit
  1529. fractal types.
  1530.  
  1531. >  -   Naturally fractint would have to quantize the 24-bit pixels to 256
  1532. >  -   colors before it could display the pixel.  (A standard 3/3/2 color
  1533. >  -   cube could be used with Floyd-Steinberg dithering and so on.)
  1534. > Allow me to insert some technical observations at this point.  First of
  1535. > all, using an 8x8x4 color cube gives horrible results for grey scale,
  1536. > although for photographic or rich color images it produces moderate
  1537. > results.
  1538.  
  1539. True, but if you're using a gray-scale palette, then you don't need a
  1540. 24-bit video mode anyway.  Just stick with 8-bit pseudocolor and load
  1541. the grayscale ramp into the DAC.
  1542.  
  1543. > Second, if the code needs to be ported quickly to a windowed
  1544. > environment, you should be aware that the OS generally will want to reserve
  1545. > some colors for itself, and won't like an application redefining the entire
  1546. > hardware palette.  (If it even lets the app get to the hardware palette.)
  1547. > This is absolutely the case in Windows, and what little Mac programming
  1548. > I've been exposed to leads me to believe a similar situation occurs there.
  1549.  
  1550. When that is the case, then a reduced color cube could be used, as you
  1551. suggest.  I see no problem with that.  This can also be the case under
  1552. X where you have a single hardware colormap and you don't want
  1553. fractint to use a private colormap (to avoid colormap flashing), so
  1554. although fractint has an 8-bit pseudocolor visual available to it, it
  1555. doesn't have 256 colors to work with.  Usually something like 236 end
  1556. up being available.
  1557.  
  1558. > [details of 6x6x6 color cube]
  1559. > Well, it was just a thought. :)  It's also possible to separate the entire
  1560. > quantization code from the rest of the interface code, so the actual
  1561. > palette used is immaterial to the main workings of the program.
  1562.  
  1563. Yes, this is what I was thinking.
  1564.  
  1565. > Using a Floyd-Steinberg (or Burkes, which may be faster and arguably
  1566. > better) dither produces better results than an ordered Bayer dither, but
  1567. > it's generally slower.
  1568.  
  1569. Yes, and it also requires a little more knowledge of the pixel
  1570. neighbourhood than just a simple ordered dither.  (BTW, this is why
  1571. OpenGL specifies ordered dither as the dithering algorithm -- it can
  1572. be implemented cheaply in hardware and each pixel can be dithered
  1573. independently of all other pixels which means you can dither pixels as
  1574. you render them.)
  1575.  
  1576. > [zooming in 24-bit, dithering, performance of 24-bit blit/dither]
  1577. > (Oh yeah: blit performance in 24-bit modes can be pretty
  1578. > horrendous...)
  1579.  
  1580. Well with 24-bit you've trebled the data load on the code, so its no
  1581. surprise :).  Add an alpha channel (which I think should be done when
  1582. truecolor support is added) and you've quadrupled the data load, uh oh
  1583. Batman... :)
  1584.  
  1585. >  -  ii) anti-aliasing as refinement
  1586. > Well, if you've separated your rendering from your displaying, it's a piece
  1587. > of cake to simply do one more refinement pass.
  1588.  
  1589. Yep, yep, yep.  I am glad that my message came across so clear :).
  1590. Sometimes its hard to tell at what "level" you should speak to an
  1591. audience until you get to know the audience better :).
  1592.  
  1593. > [...]  The exact filter you use (box, triangle, whatever) is
  1594. > of course up in the air, but changeable without affecting much of the
  1595. > controlling code.
  1596.  
  1597. I like the Mitchell filter myself.  I have a PD library of filters
  1598. implemented all in integer arithmetic with a data window buffer to
  1599. avoid recomputation.  It implements 2D separable filters and produces
  1600. excellent quality results.  The best I have gotten out of any of the
  1601. image rescaling type code out there on the net (pbmplus, Utah Raster
  1602. Toolkit, etc.).  I can point you at source code if you're interested.
  1603.  
  1604. > Keep in mind, though, that there are plenty of reasons to cache an
  1605. > "iteration count" or other similar pre-color version of a fractal image.
  1606.  
  1607. Yes, with my progressive refinement approach to rendering C-plane
  1608. fractals, my thoughts were that each point sample in the data
  1609. structure would store the iteration count and the value of the orbit
  1610. just before escape.  This gives you quick changing of the image based
  1611. on colormap changes as well as truecolor capability using the Z value
  1612. to change the color.  Thus the progressive refinement of the fractal
  1613. keeps the necessary information to distinguish it as an "image", but
  1614. the display portion involves applying the colormap to the "image" to
  1615. turn it into a colored collection of pixels.
  1616.  
  1617. > Once you've got the original iteration data handy, you might as well allow
  1618. > the user to arbitrarily scale the palette, loop it X number of times of the
  1619. > entire range of iterations, using a logarithmic or parabolic mapping
  1620. > (preferably with tweakable curves!), and so forth.
  1621.  
  1622. Exactly :)
  1623.  
  1624. >  -     Anti-aliasing via supersampling (and there are methods to
  1625. >  -     supersample IFS and 3d orbit fractal types as well as C-plane
  1626. >  -     fractal types; I can talk more about that if anyone would like)
  1627. > I for one am aware of the general techniques, although I've never written
  1628. > any code to handle it...
  1629.  
  1630. The basic idea is to use sub-pixel positioning when you plot the
  1631. points and vertices of line segments.  This sub-pixel positioning is
  1632. used to accumulate anti-aliased representations in the frame buffer.
  1633. For IFS you precalculate "anti-aliased" dots by treating the dot as a
  1634. Gaussian bump (or some other kind of bump, like a bump with the shape
  1635. of the Mitchell filter I mentioned above) in either a 2x2 or 3x3 pixel
  1636. pattern.  The sub-pixel positioning of the vertices is used to blend
  1637. these filtered representations of the dots into the frame buffer.  The
  1638. end result is as if you had rendered the IFS traditionally (where each
  1639. point is essentially in the shape of a box covering an entire pixel)
  1640. with lots of points and then downsampled the image.  For anti-aliased
  1641. lines, the technique is the same, but the rendering of the lines is
  1642. more complicated but doable.
  1643.  
  1644. > Not a bad idea.  Keep the pixels used during anti-aliasing for the next
  1645. > zoom.  As long as your next zoom lines up with your sub-sampled grid, as I
  1646. > mentioned before.
  1647.  
  1648. There is one phase of the process I might have not made clear in my
  1649. last message.  The fractal itself is kept in this multi-resolution
  1650. data structure, where the sample grids are guaranteed to be aligned
  1651. due to the nature of the data structure.  (You can orient the data
  1652. structure so that for fractals with symmetry, you don't even store the
  1653. symmetric parts of the data structure, but simply flip around the
  1654. indices when you fetch out the data.)
  1655.  
  1656. However, just because the sampling grids in the multi-resolution data
  1657. structure are aligned in this regular fashion doesn't mean that the
  1658. screen is aligned in the same fashion.  In fractint, you can rotate,
  1659. translate and scale the zoom box around in some very weird ways (even
  1660. introducing a skew transform).  However, none of these methods are
  1661. projective (leaving aside plane inversion for now), so they are all
  1662. subsumed by a single 3x3 transformation matrix defining a coordinate
  1663. transformation from the screen space into the compute space (i.e. the
  1664. C plane).
  1665.  
  1666. So to recap slightly:
  1667.  
  1668.     for each pixel on the screen
  1669.     find appropriate sample(s) in multi-resolution data structure
  1670.     copy to the screen
  1671.  
  1672. This keeps your data structure compute grids aligned properly so that
  1673. their mathematical properties are preserved, but lets the screen space
  1674. be mapped into the compute space however the user wishes.
  1675.  
  1676. Now, getting back to inversions, I'm not sure how one should handle
  1677. that.  I think the only reasonable way to do it with this sort of data
  1678. structure is to store the samples into the datastructure, after you
  1679. have inverted the C-plane.  This means that you should be recording
  1680. the C value of each sample in the data structure along with its
  1681. associated iteration count and penultimate escape Z value.  Otherwise
  1682. the data structure would be very sparsely populated and its overhead
  1683. would cancel any benefit obtained from it.
  1684.  
  1685. Note also that this datastructure must be completely flushed whenever
  1686. you changed things that effect how the iteration counts are computed:
  1687. fractal type, etc.
  1688.  
  1689. > As long as you're not doing a "final" render,
  1690.  
  1691. What stage are you attributing to the "final" render?  Are you
  1692. thinking of the "final" rendering as the process of mapping
  1693. iteration/orbit information into color?
  1694.  
  1695. > I think caching the image
  1696. > data would be pretty cool, even if you're not trying to do real-time
  1697. > zooming.  I've often wondered what it would be like to have a CD-ROM of the
  1698. > Mandelbrot set, pre-generated to respectable resolution, and stored in a
  1699. > quadtree to optimize retrieval. :)
  1700.  
  1701. Oh stop it, you're making me drool :)
  1702.  
  1703. > Yeah, but as it stands that's not the fastest storage in the world.  When
  1704. > FractInt's a 32-bit program, storage becomes much less of an issue.  In a
  1705. > nice environment, the system handles the virtual memory for you.
  1706.  
  1707. Yes, I can see we're really thinking alike here :)
  1708.  
  1709. > Except that, as I pointed out, unless your new sampling grid exactly
  1710. > coincides with your existing sampling grid, you will produce
  1711. > discontinuities in your image which are visually distracting.  Think I'm
  1712. > kidding?
  1713.  
  1714. No, I'm keenly aware of it, in fact!  I see artifacts in the way that
  1715. XaoS generates its images, because it doesn't use sub-pixel
  1716. positioning for its samples.  Using the multi-resolution approach,
  1717. each sample point is very well defined and very regular.  These
  1718. samples are then combined appropriately to render the image to the
  1719. screen.  One interesting aspect of this is that once you compute a
  1720. level at a resolution finer than the screen, lets call it level N,
  1721. then the zooms come for "free" until you zoom the image up to the
  1722. point where pixels need to be computed at level N+1.
  1723.  
  1724. > Generate an image at 1024x768, especially one with smooth
  1725. > gradients in it.  Then display it in an 800x600 window, such that the
  1726. > entire image is shrunk to fit.  Just about any graphics app will let you do
  1727. > this.  You will see the irregularity of the sampling grid and it won't look
  1728. > very nice.
  1729.  
  1730. Presumably you are talking about the effects of taking a 1024x768
  1731. image and point sampling it to 800x600?  Yes, the effects would be
  1732. annoying.  However, I would think the image would look fine at 800x600
  1733. if you used an anti-aliasing filter to change the resolutions.
  1734.  
  1735. > It may be okay for real-time use, but what you're talking about here are
  1736. > deepzooms, which aren't even close to real-time anyway.  I'd rather have
  1737. > the quality.
  1738.  
  1739. Hmm... what I am proposing keeps the quality, and since it provides a
  1740. clean framework for anti-aliasing it can increase the quality.
  1741. Perhaps there is some portion of this that's in my head that I haven't
  1742. effectively communicated yet?  If we separate the computation of the
  1743. samples from the display of the samples (as discussed above), then the
  1744. integrity of the samples isn't compromised by how we display them.  We
  1745. can use approximate display techniques (for instance, quantizing
  1746. 24-bit fractals to a limited palette), but still keep the richness of
  1747. the underlying samples.  Naturally this has a larger memory appetite
  1748. than what fractint is using right now.  There ain't no such thing as a
  1749. free lunch :).
  1750.  
  1751. I'm developing an X-based prototype for exploring this concept
  1752. (fractint is just too messy for me to understand yet, so my
  1753. explorations are in my own little sandbox for now :).  Maybe a "proof
  1754. of concept" program would allay your fears?  Or I'll just keep
  1755. explaining until we both understand and then maybe we'll agree or just
  1756. agree to disagree :)
  1757.  
  1758. > Just my thoughts.  I'm not trying to tear you down, Rich, just explain why
  1759. > I think that XaoS isn't the right direction for FractInt (or any other
  1760. > "serious" fractal app) to go.  I'm feeling quite amicable as I write this. :)
  1761.  
  1762. Oh, I'm not feeling tore down at all :).  I can see that you're
  1763. understanding what I'm saying, so having a back and forth not only
  1764. helps me explain it to you, but forces me to be more exact and
  1765. concrete about some of this hand-waiving I like to do :).
  1766.  
  1767. I'd like to steal some ideas from XaoS, but not make fractint a XaoS
  1768. replacement.  I think of XaoS as kind of like a "Doom" for fractals.
  1769. Its fast and whizz-bang, but it obviously trades off some image quality
  1770. in order to achieve this.
  1771. --
  1772.   ``Between stimulus and response is the will to choose.''  -- Steven Covey
  1773.  =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  1774.      3D Paint: The Power to Create in 3D;        Rich Thomson
  1775.      email me for more info                rthomson@ptc.com
  1776.  
  1777. Thanks for using Fractdev, The Fractint Developer's Discussion List
  1778. Post Message:   fractdev@xmission.com
  1779. Get Commands:   majordomo@xmission.com "help"
  1780. Administrator:  twegner@phoenix.net
  1781. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  1782.  
  1783.  
  1784. -------------------------------------------------------------------------------
  1785.  
  1786. From: "Damien M. Jones" <dmj@emi.net>
  1787. Subject: Re: (fractdev) XaoS 
  1788. Date: 11 Sep 1997 13:25:04 -0400
  1789.  
  1790. Rich,
  1791.  
  1792.  - Now onto the nits I'd like to pick... :)
  1793.  
  1794. Have at it! :)
  1795.  
  1796.  - I guess I was under the (apparently wrong) assumption that there was
  1797.  - some sort of standard kind of API that would allow you to get the
  1798.  - performance from the card you want without having to write all these
  1799.  - card-specific drivers and so on.  The XaoS code seems to use an SVGA
  1800.  - library in order to avoid that problem -- I was thinking something
  1801.  - similar would be used for fractint.
  1802.  
  1803. Well, there is and there isn't.  There's VESA, which is a standardized way
  1804. of inquiring what modes are supported, switching to those modes, and then
  1805. accessing video RAM in those modes.  Problems: (a) a lot of cards only
  1806. support VESA 1.2, rather than the newer 2.0 (although software VESA drivers
  1807. for DOS can be loaded); (b) with VESA 1.2, your screen access is limited to
  1808. 64K at a time--not a major problem, but a nuisance; (c) you don't have any
  1809. access to the hardware blitter.
  1810.  
  1811. If all you're doing is full-screen (or fairly large) blitting, these are
  1812. not prime issues, as most of the time is spent actually moving data into
  1813. video RAM and not messing with overhead.  VESA 2.0 typically allows (from a
  1814. protected mode) full linear access to video memory with no 64K limits,
  1815. which improves performance quite a bit.  It's the single-point get/set type
  1816. of access that will kill performance, and FractInt appears to deal with
  1817. screens in that fashion.  (Someone who's looked at the video driver code in
  1818. FractInt, please correct me if I err!)
  1819.  
  1820. In Windows, the situation is a little different.  Windows 95 generally
  1821. doesn't like for apps to go messing with the hardware; NT will stop such a
  1822. rogue app dead in its tracks.  DirectDraw (a component of DirectX) provides
  1823. a standardized high-speed way of accessing video RAM and the graphics card
  1824. blitter, but it isn't without its problems.  (Compatibility troubles with
  1825. DirectX can bring an otherwise functioning system to its knees.)
  1826.  
  1827. I guess you can tell that my experience lately has been PCs and hardware.
  1828. :)  Before I started working on PCs, I worked on Atari computers and
  1829. Atari's ill-fated Jaguar game console.  I'm *used* to being able to bang on
  1830. the metal, and it stinks not being able to do it on the PC. :(  But banging
  1831. on the metal is only practical when the metal only comes in one atomic
  1832. weight... :)
  1833.  
  1834.  - Well memory consumption is a problem with fractint in general at this
  1835.  - point.  I think there needs to be a point at which the line is drawn
  1836.  - and the 640K memory model is killed and the code converted to a flat
  1837.  - address space.  Then all this hemming and hawing about memory would go
  1838.  - away?
  1839.  
  1840. Sure would.  I don't think there's anyone here that disagrees; it's just
  1841. that moving such a large code base to a 32-bit environment--especially all
  1842. the assembly--is no small undertaking.  I guess it's the sort of thing that
  1843. everyone would want to put off as long as possible--not because there
  1844. aren't obvious advantages, but because it means while the code is being
  1845. ported, not much other work can be done.
  1846.  
  1847.  - Even if you leave fractint's compute engine alone and just carve the
  1848.  - screen up into 16x16 blocks of pixels and then use a prioritizing scheme
  1849.  - to arrange the order of the computation of the blocks would increase its
  1850.  - usability for interactive exploration.
  1851.  
  1852. Perhaps.  A while back I downloaded a program called "DFrac", written by a
  1853. hotshot Electronic Arts programmer who was spouting ridiculous things about
  1854. DirectX being the future of gaming and other nonsense.  Anyway, DFrac used
  1855. essentially a tesseral generation method with a prioritizing scheme.  The
  1856. prioritizing scheme sucked.  It did the "easiest" blocks first, which meant
  1857. 90% of the picture was typically rendered in 10% of the time.  Which sounds
  1858. great, until you realize that the 10% left is typically the 10% you wanted
  1859. to see so as to know where to zoom in next.  So in practice, you ended up
  1860. waiting for the whole image to finish anyway.
  1861.  
  1862. How you prioritize is key.  Otherwise, this is a great idea.  You could do
  1863. a first guessing pass, then fill in the blocks based on priority.  (The
  1864. first guessing pass would get you the data you need to establish a priority.)
  1865.  
  1866.  - Perhaps I wasn't so clear... while its obvious that XaoS' goals are to
  1867.  - achieve real-time performance first and other things second, that
  1868.  - isn't exactly what I had in mind for fractint.  I think fractint
  1869.  - should keep accuracy of the rendering first and speed second.
  1870.  
  1871. That's what I wanted to hear.
  1872.  
  1873.  - This would still be the case under what I am proposing.  I am
  1874.  - proposing alternate methods for improving the progressive refinement
  1875.  - of the image, which at low magnifications/maxiter counts means that
  1876.  - you should be able to pan and zoom at the same speed as XaoS.
  1877.  
  1878. OK, I think I see where you're headed now.
  1879.  
  1880.  - True, but if you're using a gray-scale palette, then you don't need a
  1881.  - 24-bit video mode anyway.  Just stick with 8-bit pseudocolor and load
  1882.  - the grayscale ramp into the DAC.
  1883.  
  1884. Mmmm.  Yes, FractInt is a single-document interface anyway, not a windowed
  1885. environment.  Two images won't be competing with each other for palette
  1886. space (which they were when I designed the 6x6x6+31 scheme for Windows).
  1887. Now if FractInt suddenly sprouted a multiple-document interface with a
  1888. windowed scheme, things would get hairy. :)
  1889.  
  1890.  - [F-S vs. Burkes vs. ordered dither]
  1891.  - Yes, and it also requires a little more knowledge of the pixel
  1892.  - neighbourhood than just a simple ordered dither.
  1893.  
  1894. Yes, an ordered dither simply requires knowledge of a pixel's location.
  1895. The real-time ditherer I wrote for Windows uses it.
  1896.  
  1897.  - [24-bit blit performance sucks]
  1898.  - Well with 24-bit you've trebled the data load on the code, so its no
  1899.  - surprise :).
  1900.  
  1901. Yeah, but not just that.  On some cards it's simply worse in general.
  1902.  
  1903.  - Sometimes its hard to tell at what "level" you should speak to an
  1904.  - audience until you get to know the audience better :).
  1905.  
  1906. Oh, you have that problem too? :-)
  1907.  
  1908.  - [anti-aliasing filters]
  1909.  - I like the Mitchell filter myself.
  1910.  
  1911. Funny you should mention that.  A while back I wrote a filtered image
  1912. rescaling routine based on the technique described in Graphics Gems III.
  1913. (The one in the book has a slight flaw.)  It uses a Mitchell filter, and
  1914. I've found it produces superior results to most graphics programs.  I'm
  1915. rather fond of the filter, myself. :)
  1916.  
  1917.  - [multi-resolution sampling grid]
  1918.  - However, just because the sampling grids in the multi-resolution data
  1919.  - structure are aligned in this regular fashion doesn't mean that the
  1920.  - screen is aligned in the same fashion.  In fractint, you can rotate,
  1921.  - translate and scale the zoom box around in some very weird ways (even
  1922.  - introducing a skew transform).  However, none of these methods are
  1923.  - projective (leaving aside plane inversion for now), so they are all
  1924.  - subsumed by a single 3x3 transformation matrix defining a coordinate
  1925.  - transformation from the screen space into the compute space (i.e. the
  1926.  - C plane).
  1927.  
  1928. 3x3 if you're including the translation; the actual axis conversion only
  1929. requires a 2x2 matrix.  (Unless I've gone brain-dead again.)
  1930.  
  1931. It makes sense to only store pixels based on the results of the actual
  1932. complex -> complex mapping used.  Inversion is one such mapping, but there
  1933. are others.  Such non-linear transformations would really screw up the
  1934. multi-resolution technique, if you used the "real" c value to determine
  1935. where to store the pixel's data in the MRSG.  So you would separate your
  1936. non-linear transformations from how you're actually storing data in the
  1937. MRSG... it probably doesn't sound like it, but I'm agreeing with you here. :)
  1938.  
  1939.  - > As long as you're not doing a "final" render,
  1940.  -
  1941.  - What stage are you attributing to the "final" render?  Are you
  1942.  - thinking of the "final" rendering as the process of mapping
  1943.  - iteration/orbit information into color?
  1944.  
  1945. Ah, let me clarify.  There is a difference between "browsing" and
  1946. "rendering", in my mind.  I typically explore with solid guessing on,
  1947. periodicity on, and one of a few different palettes that highlight
  1948. structure.  (This is the point at which most people would also use the
  1949. preview window, but I don't.)  When I find a point that I think will turn
  1950. out well, I'll often turn solid guessing off (as a lot of my newer images
  1951. have thin strangs that solid guessing misses).  This is what I would call a
  1952. "final" render, the point at which I'd probably turn anti-aliasing on.  I
  1953. might also render it at 1600x1200 or larger, rather than my normal working
  1954. resolution of 1024x768.  (Although generally I do that so I can reduce it
  1955. down and get the anti-aliasing I want.)
  1956.  
  1957. "Final" render is a user decision, not a software decision.  It's the point
  1958. at which the user has enough confidence in the image that they want the
  1959. computer to take the time to make sure it gets it right.  This is the point
  1960. where I'd want to switch from a "preview"-style MSRG image to a rigidly
  1961. accurate, fixed on exactly the size I want sampling grid.
  1962.  
  1963.  - [quadtree M-set on CD]
  1964.  - Oh stop it, you're making me drool :)
  1965.  
  1966. Well, I've got a CD-R if you've got the computer to generate the data... :)
  1967.  
  1968.  - Presumably you are talking about the effects of taking a 1024x768
  1969.  - image and point sampling it to 800x600?
  1970.  
  1971. Yah, those effects.
  1972.  
  1973.  - I would think the image would look fine at 800x600 if you used an anti-
  1974.  - aliasing filter to change the resolutions.
  1975.  
  1976. Generally, yes, that helps, although such small changes in resolution still
  1977. cause problems.
  1978.  
  1979.  - Hmm... what I am proposing keeps the quality, and since it provides a
  1980.  - clean framework for anti-aliasing it can increase the quality.
  1981.  - Perhaps there is some portion of this that's in my head that I haven't
  1982.  - effectively communicated yet?
  1983.  
  1984. Perhaps.  Part of the problem is that I wouldn't want to be restricted to
  1985. only 2:1 zooms.  I prefer to be able to precisely frame exactly what I want
  1986. in an image.
  1987.  
  1988.  - I'm developing an X-based prototype for exploring this concept
  1989.  - (fractint is just too messy for me to understand yet, so my
  1990.  - explorations are in my own little sandbox for now :).  Maybe a "proof
  1991.  - of concept" program would allay your fears?
  1992.  
  1993. Well, I don't run X.  (Haven't had a spare PC to dedicate to it, although
  1994. it's on my wish list.  Right behind a dual Pentium-II 300MHz machine. :)
  1995.  
  1996. I understand the sandbox, though.  It's a lot easier than wading into
  1997. FractInt, which is a *huge* project.
  1998.  
  1999.  - Or I'll just keep explaining until we both understand and then maybe
  2000.  - we'll agree or just agree to disagree :)
  2001.  
  2002. We may yet end up at that point.
  2003.  
  2004.  - I'd like to steal some ideas from XaoS, but not make fractint a XaoS
  2005.  - replacement.  I think of XaoS as kind of like a "Doom" for fractals.
  2006.  
  2007. Interesting analogy.
  2008.  
  2009. Damien M. Jones  /  temporary sanity designs  /  http://www.emi.net/~dmj/
  2010.    dmj@emi.net  /  my gallery: http://www.geocities.com/SoHo/Lofts/2605/
  2011.  
  2012.  
  2013. Thanks for using Fractdev, The Fractint Developer's Discussion List
  2014. Post Message:   fractdev@xmission.com
  2015. Get Commands:   majordomo@xmission.com "help"
  2016. Administrator:  twegner@phoenix.net
  2017. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  2018.  
  2019.  
  2020. -------------------------------------------------------------------------------
  2021.  
  2022. From: "Damien M. Jones" <dmj@emi.net>
  2023. Subject: (fractdev) Re: Part 2 of Coloring algorithms
  2024. Date: 11 Sep 1997 14:52:23 -0400
  2025.  
  2026. George,
  2027.  
  2028.  - Yep, you're right. Sorry to imply otherwise; I would reiterate the point,
  2029.  - however, that precedence in the formula parser is not the same as for C,
  2030.  - and there may be traps for the unwary. Best to use parentheses, as you did.
  2031.  
  2032. Caveat noted.
  2033.  
  2034.  - Attempts to integrate assignment expressions into other expressions
  2035.  - (e.g. sin(x=2*y)), which are permitted and even encouraged in C, will
  2036.  - yield unexpected results in the parser.
  2037.  
  2038. Well, I'd debate whether or not they're "encouraged" in C. :)  Personally,
  2039. I think they obfuscate the programmer's intent and generally lead to
  2040. hard-to-find errors, but that's just my opinion.
  2041.  
  2042. That they don't work reliably in FractInt's parser is no great loss.
  2043.  
  2044.  - This just reinforces my feeling that the parser has evolved over the last
  2045.  - 18 months or so from an "equation" parser to a "program" interpreter.
  2046.  
  2047. I'd like to see it continue along those lines.  It would allow more
  2048. programming-like expansion of FractInt without actually requiring the user
  2049. to install, configure, and learn a full-blown C compiler and assembler.
  2050.  
  2051.  - I wonder if this is going to affect people's attitude about copyright
  2052.  - protection for formulas; until now, most have regarded formulas as public
  2053.  - domain, on the theory, I imagine, that a simple  mathematical expression is
  2054.  - not a proper object for copyright protection. Also, people may be waiting
  2055.  - for B. Mandelbrot to copyright z = z*z + c before they venture to do the
  2056.  - same with their formulas. :) But with the analogy to programs becoming
  2057.  - stronger, this practice may change.
  2058.  
  2059. Interesting point.  I deliberately omitted a copyright notice in the file I
  2060. posted, even though in general I'm a pretty strong proponent for
  2061. copyrights. :)  As you said, I'm not sure a mathematical formula is
  2062. copyrightable.  Where you draw the line becomes a difficult issue.
  2063.  
  2064. Damien M. Jones  /  temporary sanity designs  /  http://www.emi.net/~dmj/
  2065.    dmj@emi.net  /  my gallery: http://www.geocities.com/SoHo/Lofts/2605/
  2066.  
  2067.  
  2068. Thanks for using Fractdev, The Fractint Developer's Discussion List
  2069. Post Message:   fractdev@xmission.com
  2070. Get Commands:   majordomo@xmission.com "help"
  2071. Administrator:  twegner@phoenix.net
  2072. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  2073.  
  2074.  
  2075. -------------------------------------------------------------------------------
  2076.  
  2077. From: Rich Thomson <rthomson@ptc.com>
  2078. Subject: Re: (fractdev) Re: Part 2 of Coloring algorithms 
  2079. Date: 11 Sep 1997 14:37:38 -0600
  2080.  
  2081.  
  2082. In article <3.0.1.32.19970911145223.0068e8b4@mail.emi.net> ,
  2083.     "Damien M. Jones" <dmj@emi.net>  writes:
  2084. > As you said, I'm not sure a mathematical formula is
  2085. > copyrightable.  Where you draw the line becomes a difficult issue.
  2086.  
  2087. I would think it works the same way it does for math books.  If you
  2088. rip off the text of a book, whether its a book on calculus or
  2089. Shakespeare, then you are in violation of the copyright.  However, one
  2090. can still use all the calculus and given formulas without being in
  2091. violation of the copyright.  You're not copyrighting the formula
  2092. itself, you are copyrighting your authored work.  If I took your
  2093. formula file and included it on a CD-ROM and started selling it, I'd
  2094. be in violation of your copyright.  If I took your formula and made
  2095. some renderings with it and then sold the renderings, I wouldn't be in
  2096. violation of your copyright.
  2097. --
  2098.   ``Between stimulus and response is the will to choose.''  -- Steven Covey
  2099.  =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  2100.      3D Paint: The Power to Create in 3D;        Rich Thomson
  2101.      email me for more info                rthomson@ptc.com
  2102.  
  2103. Thanks for using Fractdev, The Fractint Developer's Discussion List
  2104. Post Message:   fractdev@xmission.com
  2105. Get Commands:   majordomo@xmission.com "help"
  2106. Administrator:  twegner@phoenix.net
  2107. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  2108.  
  2109.  
  2110. -------------------------------------------------------------------------------
  2111.  
  2112. From: Rich Thomson <rthomson@ptc.com>
  2113. Subject: Re: (fractdev) XaoS 
  2114. Date: 12 Sep 1997 11:01:06 -0600
  2115.  
  2116.  
  2117. In article <3.0.1.32.19970911132504.0068c264@mail.emi.net> ,
  2118.     "Damien M. Jones" <dmj@emi.net>  writes:
  2119. [PC video details]
  2120. > I guess you can tell that my experience lately has been PCs and hardware.
  2121. > :)  Before I started working on PCs, I worked on Atari computers and
  2122. > Atari's ill-fated Jaguar game console.  I'm *used* to being able to bang on
  2123. > the metal, and it stinks not being able to do it on the PC. :(  But banging
  2124. > on the metal is only practical when the metal only comes in one atomic
  2125. > weight... :)
  2126.  
  2127. Ah... I guess I come from the other end of the graphics spectrum in my
  2128. experience.  I'm used to high-level APIs that let me focus on the
  2129. problem instead of having to think about the hardware.  But then
  2130. again, the hardware is powerful enough and fast enough that you don't
  2131. NEED to worry about the hardware to get the performance you want. :)
  2132. Its like switching from a Cadillac to a Volkswagen!  Suddenly you need
  2133. to pay attention to things like momentum of the vehicle and the timing
  2134. of gear shifts :).
  2135.  
  2136. > that moving such a large code base to a 32-bit environment--especially all
  2137. > the assembly--is no small undertaking.
  2138.  
  2139. I haven't compiled code in the PC environment before; is it something
  2140. like switching a few compile directives and then just fixing all the
  2141. compile errors, or does it mean that things like the assembly must be
  2142. rewritten from scratch?
  2143.  
  2144. [prioritizing screen blocks]
  2145. > Perhaps.  A while back I downloaded a program called "DFrac", [that used]
  2146. > essentially a tesseral generation method with a prioritizing scheme.  The
  2147. > prioritizing scheme sucked.  It did the "easiest" blocks first, which meant
  2148. > 90% of the picture was typically rendered in 10% of the time.  Which sounds
  2149. > great, until you realize that the 10% left is typically the 10% you wanted
  2150. > to see so as to know where to zoom in next.  So in practice, you ended up
  2151. > waiting for the whole image to finish anyway.
  2152.  
  2153. When I had this in mind for a small delta to fractint (currently I'm
  2154. working on improving its X support), I thought the user would be able
  2155. to specify the priority scheme as one of:
  2156.  
  2157.     min        Blocks with the smallest iteration total are done
  2158.         first (as you describe above)
  2159.     max        Blocks with the largest iteration count are done first
  2160.     >N        Blocks with count > N are done first
  2161.     <N        Blocks with count < N are done first
  2162.  
  2163. Moreover, the blocks would all be refined to the same level before any
  2164. of them was refined to the next level, if a multi-level refinement
  2165. scheme is currently under use.  In other words, if you've got 1-pass
  2166. sampling on, then its going to select a 16x16 block and do all 256
  2167. pixels there.  However, if you have 3-pass sampling selected, then all
  2168. the blocks matching your prioritization scheme will be refined over
  2169. their 2nd pass first.  (Remember that we did the first pass over the
  2170. whole screen to come up with counts to prioritize.)  Then these same
  2171. blocks would be refined to their third and final pass.  At this point
  2172. the blocks that didn't match the prioritizing criteria would be
  2173. refined for their 2nd and 3rd passes.
  2174.  
  2175. The thing about prioritizing schemes is that they are largely
  2176. heuristic in a situation like this.  For instance, another
  2177. prioritizing scheme would use the initial pass to estimate the time it
  2178. will take to compute the entire 16x16 block (which was only sampled at
  2179. say 2x2 or 4x4 resolution for the initial guess).  This estimated
  2180. computation time could then be used to schedule the blocks such that a
  2181. certain target update rate could be achieved.
  2182.  
  2183. A program like XaoS has real-time concerns that make such a
  2184. prioritizing scheme interesting.  However, a program which spawned
  2185. computation workers across a distributed network might want to have
  2186. the worker processes communicate partial results at fixed time
  2187. intervals in order to more effectively utilize the network bandwidth
  2188. available rather than having all the worker processes finish at the
  2189. same time only to get logjammed on the network between them and the
  2190. coordinating gather process that will display the resulting montage.
  2191.  
  2192. Yet another possibility for fractint is to introduce a prioritizing
  2193. formula that operates on the 16x16 block to return a priority.  A sort
  2194. order is also specified for the priority list.  But that's quite a bit
  2195. more work, I don't know how well the existing formula parser can be
  2196. adopted to other uses.
  2197.  
  2198. > space (which they were when I designed the 6x6x6+31 scheme for Windows).
  2199. > Now if FractInt suddenly sprouted a multiple-document interface with a
  2200. > windowed scheme, things would get hairy. :)
  2201.  
  2202. BTW, did you ever publish anything about this color cube?  It seemed
  2203. familiar to me when I was reading your description of it.
  2204.  
  2205. > Ah, let me clarify.  There is a difference between "browsing" and
  2206. > "rendering", in my mind.  [...]
  2207.  
  2208. Ah, I see what you mean.  OK, I can see that.  Naturally in the true
  2209. fractint tradition, it could be enabled or disabled.  I have a
  2210. question though.  Do you think that if a fractal is supsersampled that
  2211. you can see the difference between slightly different alignments of
  2212. the sampling grid?  I would think that if this were true, it would
  2213. mean that you didn't sufficiently supersample the original in the
  2214. first place.
  2215.  
  2216. > "Final" render is a user decision, not a software decision.  It's the point
  2217. > at which the user has enough confidence in the image that they want the
  2218. > computer to take the time to make sure it gets it right.  This is the point
  2219. > where I'd want to switch from a "preview"-style MSRG image to a rigidly
  2220. > accurate, fixed on exactly the size I want sampling grid.
  2221.  
  2222. > Well, I've got a CD-R if you've got the computer to generate the data... :)
  2223.  
  2224. Funny you should mention that, my ESV workstation is coming on-line
  2225. soon and will be accesible over the net.  Its goal in life is to die
  2226. computing fractals and 3D graphics :)
  2227.  
  2228. > Perhaps.  Part of the problem is that I wouldn't want to be restricted to
  2229. > only 2:1 zooms.  I prefer to be able to precisely frame exactly what I want
  2230. > in an image.
  2231.  
  2232. Ah, I see the missing piece now.  Think of texture mapping -- there
  2233. you see the texture in a continuous change in level of detail, as you
  2234. orient the textured polygon's vertices in different relationships to
  2235. the camera, you are changing the image level from which the texture is
  2236. being fetched.  You don't see the change at all because of the way the
  2237. image levels are blended.
  2238.  
  2239. Similarly, for the scheme I'm proposing, you have this multi-
  2240. resolution data structure built in memory of your fractal samples.
  2241. You use the current magnification and orientation of the screen to
  2242. select samples from the data structure to create the best screen view
  2243. that you can.  The data structure accelerates panning and zooming (if
  2244. you've browsed there before).  It can also be used to achieve a level
  2245. of anti-aliasing, but for 8-bit video modes I suspect it would be
  2246. better used for panning and zooming acceleration, rather than trying
  2247. to achieve anti-aliasing without taking control of the palette.
  2248. --
  2249.   ``Between stimulus and response is the will to choose.''  -- Steven Covey
  2250.  =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  2251.      3D Paint: The Power to Create in 3D;        Rich Thomson
  2252.      email me for more info                rthomson@ptc.com
  2253.  
  2254. Thanks for using Fractdev, The Fractint Developer's Discussion List
  2255. Post Message:   fractdev@xmission.com
  2256. Get Commands:   majordomo@xmission.com "help"
  2257. Administrator:  twegner@phoenix.net
  2258. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  2259.  
  2260.  
  2261. -------------------------------------------------------------------------------
  2262.  
  2263. From: "Damien M. Jones" <dmj@emi.net>
  2264. Subject: (fractdev) Coloring Options page
  2265. Date: 13 Sep 1997 13:15:53 -0400
  2266.  
  2267. Here's a thought.
  2268.  
  2269. I know this is not a wish-list for FractInt, so what I'm asking is not a
  2270. whiny "can someone do this", but more of a reasoned "is this a good idea".
  2271. The idea is to take some of the coloring techniques I put in a FRM file,
  2272. and instead build them into FractInt.  Of course, there's not really room
  2273. in the interface for options to control coloring methods like I have; so,
  2274. how about making a new options page, tied to the "w" key?  This would allow
  2275. plenty of room for selecting "trap" points or other methods, and setting
  2276. locations, rotations, aspects, and so on.
  2277.  
  2278. Well, it was just a thought.
  2279.  
  2280. Damien M. Jones  /  temporary sanity designs  /  http://www.emi.net/~dmj/
  2281.    dmj@emi.net  /  my gallery: http://www.geocities.com/SoHo/Lofts/2605/
  2282.  
  2283.  
  2284. Thanks for using Fractdev, The Fractint Developer's Discussion List
  2285. Post Message:   fractdev@xmission.com
  2286. Get Commands:   majordomo@xmission.com "help"
  2287. Administrator:  twegner@phoenix.net
  2288. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  2289.  
  2290.  
  2291. -------------------------------------------------------------------------------
  2292.  
  2293. From: "Damien M. Jones" <dmj@emi.net>
  2294. Subject: Re: (fractdev) XaoS 
  2295. Date: 13 Sep 1997 13:13:04 -0400
  2296.  
  2297. Rich,
  2298.  
  2299.  - Ah... I guess I come from the other end of the graphics spectrum in my
  2300.  - experience.  I'm used to high-level APIs that let me focus on the
  2301.  - problem instead of having to think about the hardware.  But then
  2302.  - again, the hardware is powerful enough and fast enough that you don't
  2303.  - NEED to worry about the hardware to get the performance you want. :)
  2304.  
  2305. Hmmm, well, that's nice if you can work in such an environment, but I've
  2306. never worked in a situation where performance wasn't an issue.  Having
  2307. performance as an issue, but NOT being able to bang on the hardware is a
  2308. REAL challenge.
  2309.  
  2310.  - [16- to 32-bit porting]
  2311.  - I haven't compiled code in the PC environment before; is it something
  2312.  - like switching a few compile directives and then just fixing all the
  2313.  - compile errors, or does it mean that things like the assembly must be
  2314.  - rewritten from scratch?
  2315.  
  2316. You hope it's the former.  Generally I've found it easier to port the other
  2317. direction, but I haven't exactly done a *lot* of it that way.
  2318.  
  2319. The biggest problems you have is that in 16-bit code, you need to worry
  2320. about near, far, and huge pointer/data types.  Near means in the same 64K
  2321. chunk, and can be represented in a 16-bit pointer.  Far means in a
  2322. different 64K chunk, and can be represented with a 16-bit segment prefix
  2323. and a 16-bit offset into that segment.  (In protected mode, the segment
  2324. prefixes are "handles" into a table that gives the real address; in DOS,
  2325. they're actual physical addresses, shifted four bits left.  Go figure.)
  2326. Huge means in a different 64K chunk, but the data referred to is larger
  2327. than 64K, so the offset can be 32-bit.  And every time you cross a 64K
  2328. boundary with a huge object, you have to fudge your segment prefix, because
  2329. the processor (in 16-bit modes) can really only deal with 16-bit offsets.
  2330.  
  2331. It's a mess.  The nice thing is, in 32-bit mode, all that mucking around
  2332. with near, far, and huge disappears.  Win32 uses a different means of
  2333. managing memory that doesn't require the program (or the programmer) to
  2334. modify or even be aware of segment and 64K nerdiness.  It's much more like
  2335. writing code in a UNIX environment.  (More like than Win16, that is; it's
  2336. still pretty far off. :)  For this reason I suspect a lot of the code will
  2337. already be portable, since it's designed to be portable to UNIX anyway.
  2338.  
  2339. The kicker is all that assembly code.  Some of the rules of assembly code
  2340. change when you're in a 32-bit environment.  Not many, but some.
  2341. Particularly, though, all that segment nonsense is "in your face" in the
  2342. assembly code, because it has to be.  So all of the assembly code must be
  2343. examined.  A good portion of it will probably need to be rewritten.  Some
  2344. stuff can likely be left alone.  But all of it will need to be checked, and
  2345. that's a LOT of assembly code. :)
  2346.  
  2347.  - When I had this in mind for a small delta to fractint (currently I'm
  2348.  - working on improving its X support), I thought the user would be able
  2349.  - to specify the priority scheme as one of:
  2350.  - [details snipped]
  2351.  
  2352. This is a good idea--that was my main concern, was that a prioritizing
  2353. heuristic wouldn't fit all circumstances or all users.  Making it a user
  2354. choice would be great.
  2355.  
  2356.  - Moreover, the blocks would all be refined to the same level before any
  2357.  - of them was refined to the next level, if a multi-level refinement
  2358.  - scheme is currently under use.
  2359.  
  2360. I'd make this an option, too.  Sometimes I'd rather see the full detail, if
  2361. the prioritizing scheme is right.
  2362.  
  2363.  - [6x6x6+31 color cube]
  2364.  - BTW, did you ever publish anything about this color cube?  It seemed
  2365.  - familiar to me when I was reading your description of it.
  2366.  
  2367. Me?  Publish?  Surely you jest.  I wouldn't even know where to go...
  2368.  
  2369. No, I never published anything about it.  I never read anything about it,
  2370. either, but it's entirely likely that someone else came up with a similar
  2371. solution.  It seemed pretty obvious to me.  The ditherer I wrote for my
  2372. display code chooses between the RGB cube and the grey ramp on a
  2373. pixel-by-pixel basis, so if you have a single image with color AND grey
  2374. portions, you still get great greyscale representation in those portions of
  2375. the image.
  2376.  
  2377. Some might argue that it's better to devote those extra greys to expanding
  2378. the color cube.  The problem is, 6x6x6 is the largest cube that fits into
  2379. 256 (7x7x7 is 343) so if you change the color scaling any other way, you
  2380. lose your greys completely.  (In my view, this is Bad.)  You can get your
  2381. greys back by using a 5x9x5 cube, which is 225 colors and emphasizes the
  2382. green resolution, but this drops your red and blue resolution even further.
  2383.  I think the 6x6x6+31 is an optimal solution for the Windows environment.
  2384. For the record, Netscape and Internet Explorer both use a 6x6x6 color cube,
  2385. but the +31 is my own little twist. :)
  2386.  
  2387.  - Do you think that if a fractal is supsersampled that you can see the
  2388.  - difference between slightly different alignments of the sampling grid?
  2389.  - I would think that if this were true, it would mean that you didn't
  2390.  - sufficiently supersample the original in the first place.
  2391.  
  2392. That is exactly the case.  As you increase your supersampling, you almost
  2393. by definition reduce the variance in your sampling grid and approach a
  2394. precisely aligned grid anyway.  I regularly take 1600x1200 images and
  2395. reduce them to 640x480, which is certainly not a precise alignment.  At
  2396. this scale, slight differences in the 1600x1200 grid relative to the
  2397. 640x480 grid are unimportant.
  2398.  
  2399. The same is not true of lesser changes.  Even with an anti-aliasing scaling
  2400. routine, reducing a 1024x768 image to 800x600 is not always satisfactory,
  2401. and I think it's because the differences between the sampling grid are more
  2402. obvious.
  2403.  
  2404.  - Funny you should mention that, my ESV workstation is coming on-line
  2405.  - soon and will be accesible over the net.  Its goal in life is to die
  2406.  - computing fractals and 3D graphics :)
  2407.  
  2408. Hmmm, interesting notion.  Very interesting...
  2409.  
  2410.  - Ah, I see the missing piece now.  Think of texture mapping -- there
  2411.  - you see the texture in a continuous change in level of detail, as you
  2412.  - orient the textured polygon's vertices in different relationships to
  2413.  - the camera, you are changing the image level from which the texture is
  2414.  - being fetched.  You don't see the change at all because of the way the
  2415.  - image levels are blended.
  2416.  
  2417. I would point out here that the lower-resolution textures used in such a
  2418. technique are not simply point-sampled from the higher-resolution versions,
  2419. but are in fact filtered in some fashion to remove the high-frequency
  2420. content from them.  Otherwise the technique would be next to worthless.
  2421. For your multi-resolution fractal technique, though, your lower-resolution
  2422. image data IS point-sampled (from the original infinitely resolute
  2423. fractal).  This is why I'm not as convinced as you are that mip-mapping is
  2424. going to be that great. :)
  2425.  
  2426. Damien M. Jones  /  temporary sanity designs  /  http://www.emi.net/~dmj/
  2427.    dmj@emi.net  /  my gallery: http://www.geocities.com/SoHo/Lofts/2605/
  2428.  
  2429.  
  2430. Thanks for using Fractdev, The Fractint Developer's Discussion List
  2431. Post Message:   fractdev@xmission.com
  2432. Get Commands:   majordomo@xmission.com "help"
  2433. Administrator:  twegner@phoenix.net
  2434. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  2435.  
  2436.  
  2437. -------------------------------------------------------------------------------
  2438.  
  2439. From: Rich Thomson <rthomson@ptc.com>
  2440. Subject: Re: (fractdev) XaoS 
  2441. Date: 15 Sep 1997 09:52:51 -0600
  2442.  
  2443.  
  2444. In article <3.0.1.32.19970913131304.0069695c@mail.emi.net> ,
  2445.     "Damien M. Jones" <dmj@emi.net>  writes:
  2446. > Hmmm, well, that's nice if you can work in such an environment, but I've
  2447. > never worked in a situation where performance wasn't an issue.  Having
  2448. > performance as an issue, but NOT being able to bang on the hardware is a
  2449. > REAL challenge.
  2450.  
  2451. Agreed.  In those cases, I think the focus is to first deal with the
  2452. hardware and create yourself a layer of routines that implement the
  2453. (hopefully few) operations for which you need performance.  Then you
  2454. have an abstraction that functions at the desired performance and you
  2455. can focus on the problem to be solved rather than the details of the
  2456. implementation.  This is exactly what a higher-level 3D graphics API
  2457. does for you.  If you have an optimized implementaiton of the API,
  2458. then you can leave the performance fiddling to the API and you can
  2459. focus on your application.  However, its only recently that 3D APIs
  2460. have started to leak into the PC world.  In the workstation world,
  2461. we've had high performance 3D APIs for quite some time.
  2462.  
  2463. > The kicker is all that assembly code. [...]
  2464.  
  2465. Given that there are C equivalents for all the assembly code (used by
  2466. the unix port), I would think the natural progression for a flat
  2467. address space port of fractint would be:
  2468.  
  2469.     o port the C code to the flat address model
  2470.     o one-by-one reintegrate the assembly routines back into the code,
  2471.       replacing the C code
  2472.  
  2473. > This is a good idea--that was my main concern, was that a prioritizing
  2474. > heuristic wouldn't fit all circumstances or all users.  Making it a user
  2475. > choice would be great.
  2476.  
  2477. Yes, since its a heuristic, you basically have two choices: a one-size
  2478. fits all solution (sounds like this is what you encountered in that
  2479. other pgoram); or giving the user a choice from a few options so that
  2480. they can select the appropriate heuristic (or turn it off entirely).
  2481.  
  2482. [color cube]
  2483. > Me?  Publish?  Surely you jest.  I wouldn't even know where to go...
  2484.  
  2485. Ah, well I'm pretty sure I've seen an article on the 6x6x6 color cube
  2486. somewhere, and it was targeted at creating a good color cube for
  2487. windows like environments where you have to share the palette with
  2488. other programs.
  2489.  
  2490. BTW, one of the big differences between the windows/mac environment
  2491. and your typical X environment is that under X different windows can
  2492. have different pixel formats.  In other words, one window on the
  2493. screen can be 24-bit truecolor and another on the screen is 8-bit
  2494. pseudocolor.  Under windows/mac, the entire screen is a single video
  2495. "mode" and you can't have different application windows in different
  2496. video modes, AFAIK.
  2497.  
  2498. > That is exactly the case.  As you increase your supersampling, you almost
  2499. > by definition reduce the variance in your sampling grid and approach a
  2500. > precisely aligned grid anyway.  I regularly take 1600x1200 images and
  2501. > reduce them to 640x480, which is certainly not a precise alignment.  At
  2502. > this scale, slight differences in the 1600x1200 grid relative to the
  2503. > 640x480 grid are unimportant.
  2504.  
  2505. You do understand that what I'm proposing as a datastructure does not
  2506. attempt to filter itself to the size of the screen, right?  The
  2507. datastructure would most often have a finer granularity than the
  2508. screen, but that's due the fact that we want to scale arbitrarily in
  2509. screen space, but the datastructure only has a series of discrete
  2510. magnifications.  Ultimately, your observation about point sampling
  2511. applies and since I have no idea how to apply a band-limiting filter
  2512. to a fractal, the best you can hope to do for anti-aliasing is
  2513. supersampling.  The other thing about supersampling for AA is that I
  2514. have no idea how you could do this in 8-bit pseudocolor without doing
  2515. it all in 24-bit mode first and then doing a standard color
  2516. quantization step on the resulting image.  I suppose if you use the
  2517. 6x6x6+31 color cube, you can quantize and dither on-the-fly, but then
  2518. you color cycling gets weird!  Also, I think if you use the
  2519. quadtree for sampling, you would have to sample even farther into the
  2520. fractal to get good AA.  John Hart has published some papers on how to
  2521. AA fractals, (IFS and L-system types), but I don't think they apply to
  2522. escape-time fractals like the M-set.  Everywhere I've seen those
  2523. rendered nicely, it was always done with supersampling.
  2524. --
  2525.   ``Between stimulus and response is the will to choose.''  -- Steven Covey
  2526.  =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  2527.      3D Paint: The Power to Create in 3D;        Rich Thomson
  2528.      email me for more info                rthomson@ptc.com
  2529.  
  2530. Thanks for using Fractdev, The Fractint Developer's Discussion List
  2531. Post Message:   fractdev@xmission.com
  2532. Get Commands:   majordomo@xmission.com "help"
  2533. Administrator:  twegner@phoenix.net
  2534. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  2535.  
  2536.  
  2537. -------------------------------------------------------------------------------
  2538.  
  2539. From: "Tim Wegner" <twegner@phoenix.net>
  2540. Subject: Re: (fractdev) XaoS 
  2541. Date: 15 Sep 1997 23:06:01 -0600
  2542.  
  2543. Rich asked:
  2544.  
  2545. > Just to clarify -- djgpp is the freeware/shareware C compiler with flat
  2546. > 32-bit memory model for DOS apps, right? 
  2547.  
  2548. Yes. It's a port of the GNU C compiler to an extended DOS 32 bit flat 
  2549. memory model.
  2550.  
  2551. > Can you compile windows code
  2552. > with it, 
  2553.  
  2554. No. However there is a similar project that ports GNU C to Windows. I 
  2555. don't think it is as mature yet as djgpp. For the future it is a 
  2556. possibility. See
  2557.  
  2558. http://www.cygnus.com/misc/gnu-win32/
  2559.  
  2560.  
  2561. > or do you have to buy a MS compiler to accomplish that
  2562. > reliably?
  2563.  
  2564. Many commercial compilers will work with Windows - Microsoft, 
  2565. Borland, Watcom, etc.
  2566.  
  2567. > Can you elaborate on the details of the two assembly styles?  I'm not
  2568. > sure what 'AT&T notation' vs. MASM notation. 
  2569.  
  2570. I don't know the details. Suffice it to say they are different enough 
  2571. it would be real tough to port our NMASM assembler. For xample, MASm 
  2572. instructions are target, source, and AT&T is the reverse.
  2573.  
  2574. See 
  2575. http://www.castle.net/~avly/djasm.html
  2576.  
  2577.  
  2578. >If its a matter of 
  2579. > syntax, I could probably write a perl script toconvert the assembly 
  2580. > code from one format to another. 
  2581.  
  2582. I don't think it is necessary, as I saidf I belive there is a 
  2583. MASM-style assembler available for Linux and djgpp.
  2584.  
  2585. Tim
  2586.  
  2587.  
  2588. Thanks for using Fractdev, The Fractint Developer's Discussion List
  2589. Post Message:   fractdev@xmission.com
  2590. Get Commands:   majordomo@xmission.com "help"
  2591. Administrator:  twegner@phoenix.net
  2592. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  2593.  
  2594.  
  2595. -------------------------------------------------------------------------------
  2596.  
  2597. From: Rich Thomson <rthomson@ptc.com>
  2598. Subject: Re: (fractdev) XaoS 
  2599. Date: 16 Sep 1997 15:04:52 -0600
  2600.  
  2601.  
  2602. In article <199709160047.TAA11812@raid2.fddi.phoenix.net> ,
  2603.     "Tim Wegner" <twegner@phoenix.net>  writes:
  2604. > LINUX and djgpp use AT&T notation assembler, which would be a pain 
  2605. > to port. However, I understand that there is a MASM-like freeware 
  2606. > assembler. I presume that with Win95 we can use masm itself.
  2607.  
  2608. I looked at the djgpp web page that discusses the assembler syntax.
  2609. Writing a perl script to convert back and forth from one to another is
  2610. doable and probably worthwhile if you have a large amount of assembly.
  2611. However, given that you also want to move from the 16-bit real-mode
  2612. assembly to 32-bit protected mode assembly, I'd say its probably
  2613. better to use the C code initially for the 32-bit port and
  2614. incrementally fold in the assembly as its converted.
  2615. --
  2616.   ``Between stimulus and response is the will to choose.''  -- Steven Covey
  2617.  =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  2618.      3D Paint: The Power to Create in 3D;        Rich Thomson
  2619.      email me for more info                rthomson@ptc.com
  2620.  
  2621. Thanks for using Fractdev, The Fractint Developer's Discussion List
  2622. Post Message:   fractdev@xmission.com
  2623. Get Commands:   majordomo@xmission.com "help"
  2624. Administrator:  twegner@phoenix.net
  2625. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  2626.  
  2627.  
  2628. -------------------------------------------------------------------------------
  2629.  
  2630. From: "Damien M. Jones" <dmj@emi.net>
  2631. Subject: (fractdev) 24-bit color: cycling, anti-aliasing, displaying
  2632. Date: 17 Sep 1997 14:34:42 -0400
  2633.  
  2634. Rich,
  2635.  
  2636.  - However, its only recently that 3D APIs have started to leak into the
  2637.  - PC world.  In the workstation world, we've had high performance 3D APIs
  2638.  - for quite some time.
  2639.  
  2640. <envy>  Yeah, having good optimized versions of things like OpenGL must be
  2641. nice.  PC implementations are still buggy, and unless you have good (read:
  2642. expensive) hardware, performance is lousy anyway.  (Quick note: the
  2643. cheapest decent GL performance on a PC can be had with the Voodoo chip from
  2644. 3Dfx.)
  2645.  
  2646.  - Given that there are C equivalents for all the assembly code (used by
  2647.  - the unix port), I would think the natural progression for a flat
  2648.  - address space port of fractint would be:
  2649.  -
  2650.  -     o port the C code to the flat address model
  2651.  -     o one-by-one reintegrate the assembly routines back into the code,
  2652.  -       replacing the C code
  2653.  
  2654. Obviously.  But as Tim pointed out a while back, users will not tolerate a
  2655. slower version of FractInt, generally.  Thus virtually all of the assembly
  2656. code would need to be ported before it is releasable.
  2657.  
  2658.  - Ah, well I'm pretty sure I've seen an article on the 6x6x6 color cube
  2659.  - somewhere, and it was targeted at creating a good color cube for
  2660.  - windows like environments where you have to share the palette with
  2661.  - other programs.
  2662.  
  2663. Yeah, I think I saw one a few years ago about it.  I never claimed to be
  2664. original.  I just added my own twist--the enhanced greyscale representation.
  2665.  
  2666.  - BTW, one of the big differences between the windows/mac environment
  2667.  - and your typical X environment is that under X different windows can
  2668.  - have different pixel formats.  In other words, one window on the
  2669.  - screen can be 24-bit truecolor and another on the screen is 8-bit
  2670.  - pseudocolor.  Under windows/mac, the entire screen is a single video
  2671.  - "mode" and you can't have different application windows in different
  2672.  - video modes, AFAIK.
  2673.  
  2674. Yes and no.  A graphics card itself is incapable of switching display modes
  2675. on a window-by-window basis; thus if you want one window in 24-bit color,
  2676. and another in 8-bit color, the hardware itself must be set for 24-bit
  2677. color, and the display driver automatically translates writes to the 8-bit
  2678. window into 24-bit color actually used for display.  The application
  2679. dealing with the 8-bit window doesn't know or care that such translation is
  2680. being done.
  2681.  
  2682. In Windows, when you create a window, it isn't a "bitmap" that you can just
  2683. write to.  If you want to draw anything in that window, you have to go
  2684. through the GDI to do it.  If you want a bitmap to represent the window,
  2685. then you have to create the bitmap yourself, do what you want to the
  2686. bitmap, and then when Windows wants you to redraw the window, you just do a
  2687. simple blit using the bitmap you've already created.  The blit stage is
  2688. where the driver steps in and does the conversion.  You can easily create
  2689. an 8-bit bitmap, draw in it like an 8-bit display mode, and then blit it to
  2690. the screen--and if your programming is running in a 16-bit or 24-bit color
  2691. mode, your Windows app doesn't care, because the driver does all the dirty
  2692. work of handling the conversion.
  2693.  
  2694. The trick is, it doesn't work too well going in the other direction.  If
  2695. you have a 24-bit bitmap, and you use the same blit command
  2696. (SetDIBitsToDevice) to transfer it to an 8-bit screen, the driver is once
  2697. again responsible for doing the conversion.  All display drivers that I
  2698. have personally seen do a simplest conversion job they can--they convert
  2699. each pixel to its nearest color in the current palette.  This of course
  2700. produces *horrible* banding and is totally unacceptable.  That's why if you
  2701. plan on using 24-bit color, you have to address rendering it to an 8-bit
  2702. display.  All other conversions can be ignored (although if you write code
  2703. for them, you may be able to do a better job than the driver).
  2704.  
  2705. Hope this clears things up a tad.
  2706.  
  2707.  - You do understand that what I'm proposing as a datastructure does not
  2708.  - attempt to filter itself to the size of the screen, right?
  2709.  
  2710. Yes, I understand that.
  2711.  
  2712.  - Ultimately, your observation about point sampling applies and since I
  2713.  - have no idea how to apply a band-limiting filter to a fractal, the
  2714.  - best you can hope to do for anti-aliasing is supersampling.  The other
  2715.  - thing about supersampling for AA is that I have no idea how you could
  2716.  - do this in 8-bit pseudocolor without doing it all in 24-bit mode first
  2717.  - and then doing a standard color quantization step on the resulting
  2718.  - image.  I suppose if you use the 6x6x6+31 color cube, you can quantize
  2719.  - and dither on-the-fly, but then you color cycling gets weird!  Also, I
  2720.  - think if you use the quadtree for sampling, you would have to sample
  2721.  - even farther into the fractal to get good AA.
  2722.  
  2723. OK, first, you *must* anti-alias in color space, in 24-bit color.
  2724. (Discussions about AA a while back in Fractal-Art show that you can't AA in
  2725. iteration space or any other space in which discontinuities occur.)  An AA
  2726. image, by nature, will not simply contain the colors of the palette, but
  2727. also blends between several possibly very dissimilar colors, not easily
  2728. represented by any color in the palette.
  2729.  
  2730. Second, for 8-bit display purposes, you would want to quantize and dither
  2731. on the fly, for the user's convenience.  However, in no way should you
  2732. *attempt* to color cycle such an image; it is the height of lunacy to cycle
  2733. an 8-bit palette which has no bearing on the intended cycling.
  2734.  
  2735. This brings up bigger points: how do you color-cycle a 24-bit image, and
  2736. how do you color-cycle an anti-aliased image?  Color-cycling a 24-bit image
  2737. generally means remapping the entire image to the same palette, but rotated
  2738. slightly.  This can involve a fair amount of calculation, especially if the
  2739. palette is being interpolated smoothly (as will typically be the case with
  2740. a 24-bit image).  It also involves a full-screen blit, which means
  2741. performance will suffer on top of the actual calculation time.  To speed
  2742. things up, an intermediate stage between source data for color mapping and
  2743. final RGB value could be used--the intermediate stage would be the actual
  2744. offset into the palette, including interpolated position.  This
  2745. intermediate stage could be retained (or regenerated just before cycling is
  2746. started) and then the mapping of source data (interpolated iteration or
  2747. whatever, with log/sqr/linear mapping, arbitrary cycle length, etc.) would
  2748. not need to be recalculated for each cycled frame.  Interpolation would
  2749. still be necessary, though.  To help that, a pseudo-palette of perhaps 64K
  2750. colors might be created (enough to help hide banding), and the intermediate
  2751. stage only stores a 16-bit value for each pixel that is an index to that
  2752. palette.  Then for each frame, a pixel only needs to be fetched, an offset
  2753. added, and its result looked up in the table.  This drastically reduces the
  2754. time required to generate each cycled frame, reducing it to basically a
  2755. double-blit.  Not as fast as hardware cycling, but perhaps as fast as it
  2756. gets for 24-bit color.  (A further optimization would be to special-case
  2757. 16-bit and 8-bit display modes, where the "blit to screen" step involves
  2758. considerably more work.)
  2759.  
  2760. We're still left with the question of what to do to color-cycle AA images.
  2761. With the technique above, it's just not possible, because the color used to
  2762. generate a particular pixel will be the combination of several (possibly
  2763. wildly) varying inputs.  The above technique works in parameter space, not
  2764. color space, and assumes every pixel lands somewhere exactly on the
  2765. palette.  Imagine the palette as a crooked line weaving through 3D color
  2766. space; to cycle colors, all that is being done is to propogate points along
  2767. the line, in an orderly fashion.  With AA, you have pixels that do not land
  2768. on the line; how do you move them along the line, then?  You can't.  What
  2769. you really want to do is color-cycle the image data BEFORE you anti-alias,
  2770. but that of course is pretty impractical.  I would suggest not even
  2771. attempting to color-cycle anti-aliased images.
  2772.  
  2773. Unless... :)  You can adopt a totally different color-cycling view for
  2774. 24-bit fractals.  Steve Ferguson has been experimenting with alternate
  2775. techniques in his own programs.  The basic technique is to cycle red,
  2776. green, and blue independently of each other.  Since each primary is
  2777. independent, let us consider it to be cycling three grey-scale images.
  2778. Imagine each grey value (0-255) is an index to a triangular wave, 512 units
  2779. long, ramping from 0 to 255 and then back down to zero.  Initially, all
  2780. pixels will be in the first half of the cycle.  As the cycle progresses,
  2781. each point is offset farther and farther along the triangle wave, until
  2782. eventually it loops; each point follows the same path along the wave, but
  2783. offset (by its initial value) differently from its neighbors.  Now, put it
  2784. back together: red, green, and blue all cycle at the same time, but not
  2785. necessarily at the same rate!  The result is not at all like traditional
  2786. color-cycling, but it's just as hypnotic.  And the advantage is, it works
  2787. with *any* 24-bit image, including anti-aliased fractals or even
  2788. photographs, because it works in RGB space and not parameter space.
  2789.  
  2790. Eh, well, food for thought.
  2791.  
  2792. Damien M. Jones  /  temporary sanity designs  /  http://www.emi.net/~dmj/
  2793.    dmj@emi.net  /  my gallery: http://www.geocities.com/SoHo/Lofts/2605/
  2794.  
  2795.  
  2796. Thanks for using Fractdev, The Fractint Developer's Discussion List
  2797. Post Message:   fractdev@xmission.com
  2798. Get Commands:   majordomo@xmission.com "help"
  2799. Administrator:  twegner@phoenix.net
  2800. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  2801.  
  2802.  
  2803. -------------------------------------------------------------------------------
  2804.  
  2805. From: "Damien M. Jones" <dmj@emi.net>
  2806. Subject: Re: (fractdev) XaoS 
  2807. Date: 17 Sep 1997 14:40:35 -0400
  2808.  
  2809. Tim,
  2810.  
  2811.  - LINUX and djgpp use AT&T notation assembler, which would be a pain 
  2812.  - to port. However, I understand that there is a MASM-like freeware 
  2813.  - assembler. I presume that with Win95 we can use masm itself.
  2814.  
  2815. With Win95, I'd almost rather use inline assembly. :)  Mainly because I
  2816. don't actually *have* MASM; all of my assembly coding in Win95 has been as
  2817. inline assembly in C++ code.  It works very well.  Both MS Visual C++ and
  2818. Borland C++ have comprehensive inline assemblers; what they're missing is
  2819. usually all the extra stuff you need in .asm files about sharing variables,
  2820. declaring procedures, and so on--stuff you can do more easily with C,
  2821. anyway. :)
  2822.  
  2823. Regarding AT&T notation: this is probably because djgpp is based on a
  2824. portable compiler.  The alternative on the PC isn't really "MASM" format,
  2825. but Intel's own format for assembly language.  Anyone interested in
  2826. programming assembly for PCs should have on hand Intel's Pentium
  2827. Programmer's Reference, available in PDF format.  It's a big download, but
  2828. thoroughly essential as it's the last processor reference where Intel
  2829. actually shows clock counts.  (PPro documents do not.)  I don't have the
  2830. exact link to the file, as Intel occasionally moves these things, but you
  2831. can probably find a current link to it from http://www.x86.org .
  2832.  
  2833. Damien M. Jones  /  temporary sanity designs  /  http://www.emi.net/~dmj/
  2834.    dmj@emi.net  /  my gallery: http://www.geocities.com/SoHo/Lofts/2605/
  2835.  
  2836.  
  2837. Thanks for using Fractdev, The Fractint Developer's Discussion List
  2838. Post Message:   fractdev@xmission.com
  2839. Get Commands:   majordomo@xmission.com "help"
  2840. Administrator:  twegner@phoenix.net
  2841. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  2842.  
  2843.  
  2844. -------------------------------------------------------------------------------
  2845.  
  2846. From: "Damien M. Jones" <dmj@emi.net>
  2847. Subject: Re: (fractdev) XaoS 
  2848. Date: 17 Sep 1997 14:47:15 -0400
  2849.  
  2850. Tim,
  2851.  
  2852.  - [djgpp does Windows?]
  2853.  - No. However there is a similar project that ports GNU C to Windows. I 
  2854.  - don't think it is as mature yet as djgpp. For the future it is a 
  2855.  - possibility.
  2856.  
  2857. For the record... writing Win32 code without using a class library (like
  2858. Microsoft's MFC or Borland's OWL) is a Royal Pain In The Ass.  It can be
  2859. done, and I imagine some people even prefer it, but class libraries do take
  2860. care of a lot of the repetitive nitty-gritty message handling crap that
  2861. Windows requires your app to take care of.  So there is more to making a
  2862. good Win32 compiler than just hooking to the API; you either need to write
  2863. a class library or license somebody else's.  Theoretically, you can use MFC
  2864. with any compiler, but I have not tried this.  (The MFC.DLL avoids the
  2865. name-decoration issue by exporting all its functions by number, rather than
  2866. by name.)
  2867.  
  2868. Damien M. Jones  /  temporary sanity designs  /  http://www.emi.net/~dmj/
  2869.    dmj@emi.net  /  my gallery: http://www.geocities.com/SoHo/Lofts/2605/
  2870.  
  2871.  
  2872. Thanks for using Fractdev, The Fractint Developer's Discussion List
  2873. Post Message:   fractdev@xmission.com
  2874. Get Commands:   majordomo@xmission.com "help"
  2875. Administrator:  twegner@phoenix.net
  2876. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  2877.  
  2878.  
  2879. -------------------------------------------------------------------------------
  2880.  
  2881. From: Rich Thomson <rthomson@ptc.com>
  2882. Subject: Re: (fractdev) 24-bit color: cycling, anti-aliasing, displaying 
  2883. Date: 17 Sep 1997 16:02:57 -0600
  2884.  
  2885.  
  2886. In article <3.0.1.32.19970917143442.00714bf8@mail.emi.net> ,
  2887.     "Damien M. Jones" <dmj@emi.net>  writes:
  2888. > <envy>  Yeah, having good optimized versions of things like OpenGL must be
  2889. > nice.  PC implementations are still buggy, and unless you have good (read:
  2890. > expensive) hardware, performance is lousy anyway.  (Quick note: the
  2891. > cheapest decent GL performance on a PC can be had with the Voodoo chip from
  2892. > 3Dfx.)
  2893.  
  2894. Yes, we at PTC are keeping an eye on OpenGL performance under WinNT,
  2895. and the voodoo chip set does look nice.  I'm not keeping too close an
  2896. eye on all this stuff because it is changing too quickly.  I'm paying
  2897. attention as much as I can afford too, though :)
  2898.  
  2899. > Obviously.  But as Tim pointed out a while back, users will not tolerate a
  2900. > slower version of FractInt, generally.  Thus virtually all of the assembly
  2901. > code would need to be ported before it is releasable.
  2902.  
  2903. Well, they could just suffer in the meantime :)  How much can they
  2904. bitch considering the software is free!  Some people have no gratitude
  2905. :)
  2906.  
  2907. > Yes and no.
  2908. [drivers converting to display format from application format]
  2909.  
  2910. Ah... I wasn't aware of those kinds of machinations under Windows.  I
  2911. suppose it makes sense.  Lots of people bitch about the complexity of
  2912. handling different visual types under X (8-bit pseudocolor vs. 24-bit
  2913. truecolor).  Lots of applications (even commercial ones) STILL get
  2914. this wrong, which amazes me considering how long X has been around.
  2915. Many applications simply assume that the visuals present in their
  2916. development environment will be the same as the visuals present in the
  2917. customer's environment, including which visual will be the default
  2918. visual.  Fractint's X port suffers from this same flaw, but I'm
  2919. working on fixing it :).
  2920.  
  2921. > OK, first, you *must* anti-alias in color space, in 24-bit color.
  2922. > (Discussions about AA a while back in Fractal-Art show that you can't AA in
  2923. > iteration space or any other space in which discontinuities occur.)
  2924.  
  2925. If your iteration space is confined to integers, then I agree with
  2926. you; however if you use a fractional iteration count, as in Linus'
  2927. algorithm for computing a continuous iteration count, then I don't see
  2928. a problem with AA in iteration space, but in general I agree with your
  2929. analysis above.
  2930.  
  2931. > Second, for 8-bit display purposes, you would want to quantize and dither
  2932. > on the fly, for the user's convenience.  However, in no way should you
  2933. > *attempt* to color cycle such an image; it is the height of lunacy to cycle
  2934. > an 8-bit palette which has no bearing on the intended cycling.
  2935.  
  2936. Oh, I think people could be allowed to color cycle an image, it just
  2937. won't do anything useful :)
  2938.  
  2939. > This brings up bigger points: how do you color-cycle a 24-bit image, and
  2940. > how do you color-cycle an anti-aliased image?
  2941.  
  2942. I think the general answer is that you don't color cycle anything
  2943. other than 8-bit pseudocolor images.  At least in the way fractint
  2944. treats color cycling currently.  What you are really doing is changing
  2945. the color lookup table that maps iterations to pixels.  So if you want
  2946. to "color cycle" a 24-bit or AA image, then you have to recompute the
  2947. entire screen in order to get the effect.  Fractint users are
  2948. accustomed to color cycling by manipulating the video palette in the
  2949. hardware.  You're essentially using the CLUT in the video card to
  2950. handle the mapping of iterations to pixels.  You're storing the
  2951. iterations directly in the frame buffer and the CLUT performs the
  2952. index -> RGB mapping.  When creating AA renderings or 24-bit
  2953. renderings, this mapping is done in software.  Obviously we could
  2954. "color cycle" a 24-bit image, but the time it takes to remap all the
  2955. iterations to pixels for the entire screen wouldn't be anywhere near
  2956. as fast as manipulating the DAC.  One could do it, but when its that
  2957. slow, my inclination is to shrug my shoulders and say "what's the
  2958. point?"
  2959.  
  2960. [24-bit color cycling scheme]
  2961. > Not as fast as hardware cycling, but perhaps as fast as it
  2962. > gets for 24-bit color.
  2963.  
  2964. Yeah, I'm not sure its worth all the effort.  I think most people would
  2965. be willing to give up color cycling for the ability to generate 24-bit
  2966. AA fractals.
  2967.  
  2968. > Unless... :)  You can adopt a totally different color-cycling view for
  2969. > 24-bit fractals.  Steve Ferguson has been experimenting with alternate
  2970. > techniques in his own programs.  The basic technique is to cycle red,
  2971. > green, and blue independently of each other. [...]
  2972.  
  2973. In 24-bit modes under X there is the possibility of using the hardware
  2974. colormap to "cycle" in just this manner.  I don't know if Windows
  2975. provides a colormap that is used in 24-bit mode though.  In
  2976. workstations, this colormap is typically used to allow the application
  2977. finer control over the gamma correction process.  (For instance, I can
  2978. write my own gamma map into the CLUT and use this in conjunction with
  2979. certain AA line/dot algorithms that depend on a proper treatment of
  2980. gamma in order to avoid "ropiness" and other artifacts in the
  2981. lines/dots.)
  2982. --
  2983.   ``Between stimulus and response is the will to choose.''  -- Steven Covey
  2984.  =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  2985.      3D Paint: The Power to Create in 3D;        Rich Thomson
  2986.      email me for more info                rthomson@ptc.com
  2987.  
  2988. Thanks for using Fractdev, The Fractint Developer's Discussion List
  2989. Post Message:   fractdev@xmission.com
  2990. Get Commands:   majordomo@xmission.com "help"
  2991. Administrator:  twegner@phoenix.net
  2992. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  2993.  
  2994.  
  2995. -------------------------------------------------------------------------------
  2996.  
  2997. From: Rich Thomson <rthomson@ptc.com>
  2998. Subject: Re: (fractdev) XaoS 
  2999. Date: 17 Sep 1997 16:07:25 -0600
  3000.  
  3001.  
  3002. In article <3.0.1.32.19970917144715.00693344@mail.emi.net> ,
  3003.     "Damien M. Jones" <dmj@emi.net>  writes:
  3004. > For the record... writing Win32 code without using a class library (like
  3005. > Microsoft's MFC or Borland's OWL) is a Royal Pain In The Ass. [...]
  3006.  
  3007. Yes, that is my basic impression.  I have some books on the Windows
  3008. API that I bought a while back.  I bought them so I would have some
  3009. reasonable familiarity with Windows in order to keep my job skills
  3010. current :).  I came to the conclusion that Windows wasn't really any
  3011. different from the windowing APIs with which I was already familiar.
  3012. Naturally there are particular differences in how graphics is handled
  3013. and so on, but the basic event-driven model of an application remains.
  3014. What I did notice was that a Windows application has to handle more
  3015. than your typical X application just due to the architecture of PC
  3016. windowed environments (no window manager, for one thing).  I also came
  3017. to the conclusion that without a good class library, or at least a
  3018. very well fleshed out skeleton program that took care of the
  3019. repetitive details that programming in such environments is a pain.
  3020. I've seen the amount of code it takes to write a simple "hello world"
  3021. Mac application in Lightspeed C/Pascal and its a huge mess.  (This is
  3022. for a "hello world" application that completely adheres to and
  3023. conforms to the guidelines and suggestions in the Mac interface
  3024. guidelines.)
  3025.  
  3026. I just saw a Borland C++ Win 95/NT compiler environment at an auction
  3027. preview.  If I could pick it up for a song, would it be worth buying?
  3028. --
  3029.   ``Between stimulus and response is the will to choose.''  -- Steven Covey
  3030.  =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  3031.      3D Paint: The Power to Create in 3D;        Rich Thomson
  3032.      email me for more info                rthomson@ptc.com
  3033.  
  3034. Thanks for using Fractdev, The Fractint Developer's Discussion List
  3035. Post Message:   fractdev@xmission.com
  3036. Get Commands:   majordomo@xmission.com "help"
  3037. Administrator:  twegner@phoenix.net
  3038. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  3039.  
  3040.  
  3041. -------------------------------------------------------------------------------
  3042.  
  3043. From: Rich Thomson <rthomson@ptc.com>
  3044. Subject: Re: (fractdev) XaoS 
  3045. Date: 17 Sep 1997 16:19:13 -0600
  3046.  
  3047.  
  3048. In article <3.0.1.32.19970917144035.00cb70c4@mail.emi.net> ,
  3049.     "Damien M. Jones" <dmj@emi.net>  writes:
  3050. > Anyone interested in
  3051. > programming assembly for PCs should have on hand Intel's Pentium
  3052. > Programmer's Reference, available in PDF format.  It's a big download, but
  3053. > thoroughly essential as it's the last processor reference where Intel
  3054. > actually shows clock counts.  (PPro documents do not.)  I don't have the
  3055. > exact link to the file, as Intel occasionally moves these things, but you
  3056. > can probably find a current link to it from http://www.x86.org .
  3057.  
  3058. I found this page that has links to the above docs.
  3059. <URL: http://www.x86.org/intel.doc/IntelDocs.html>
  3060. --
  3061.   ``Between stimulus and response is the will to choose.''  -- Steven Covey
  3062.  =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  3063.      3D Paint: The Power to Create in 3D;        Rich Thomson
  3064.      email me for more info                rthomson@ptc.com
  3065.  
  3066. Thanks for using Fractdev, The Fractint Developer's Discussion List
  3067. Post Message:   fractdev@xmission.com
  3068. Get Commands:   majordomo@xmission.com "help"
  3069. Administrator:  twegner@phoenix.net
  3070. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  3071.  
  3072.  
  3073. -------------------------------------------------------------------------------
  3074.  
  3075. From: "Tim Wegner" <twegner@phoenix.net>
  3076. Subject: Re: (fractdev) XaoS 
  3077. Date: 17 Sep 1997 21:38:24 -0600
  3078.  
  3079. Rich asked:
  3080.  
  3081. > I just saw a Borland C++ Win 95/NT compiler environment at an auction
  3082. > preview.  If I could pick it up for a song, would it be worth buying?
  3083.  
  3084. What version? You could actually use it to compile the DOS fractint, 
  3085. though our Borland support is spotty.
  3086.  
  3087. I believe 3.1 or later works for DOS. I think they are up to version 
  3088. 5 or maybe 4. George Martin might know better, he uses Borland, but 
  3089. not a current version.
  3090.  
  3091. Tim
  3092.  
  3093.  
  3094. Thanks for using Fractdev, The Fractint Developer's Discussion List
  3095. Post Message:   fractdev@xmission.com
  3096. Get Commands:   majordomo@xmission.com "help"
  3097. Administrator:  twegner@phoenix.net
  3098. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  3099.  
  3100.  
  3101. -------------------------------------------------------------------------------
  3102.  
  3103. From: George Martin <76440.1143@compuserve.com>
  3104. Subject: Re: (fractdev) XaoS
  3105. Date: 18 Sep 1997 00:45:02 -0400
  3106.  
  3107. Tim,
  3108.  
  3109. Regarding Borland, you wrote:
  3110.  
  3111. >
  3112. I believe 3.1 or later works for DOS. I think they are up to version 
  3113. 5 or maybe 4. George Martin might know better, he uses Borland, but 
  3114. not a current version.
  3115. <
  3116.  
  3117.      After a year or so of neglect, we got the Borland compile working
  3118. again with 19.4. I use 3.1, and the .prj files distributed with the 19.6
  3119. source code should work. I have not fine tuned the overlays yet; the
  3120. executable which I produce with 3.1 uses way too much memory, and some
  3121. features are lost (e.g. the ability to shell to DOS) as a result. Any
  3122. experienced Borland users who want to take on the overlay structure are
  3123. welcome to do so! I am interested primarily in getting a good compile so I
  3124. can test and debug code that I write, and the current .prj files are
  3125. sufficient for my purposes. I have 4.5 in the box, but not the related
  3126. TASM, which needs to be purchased separately beginning with the 4.x
  3127. versions. Borland is at least into 5.x, but I am not familiar with it.
  3128.  
  3129. George 
  3130.  
  3131. Thanks for using Fractdev, The Fractint Developer's Discussion List
  3132. Post Message:   fractdev@xmission.com
  3133. Get Commands:   majordomo@xmission.com "help"
  3134. Administrator:  twegner@phoenix.net
  3135. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  3136.  
  3137.  
  3138. -------------------------------------------------------------------------------
  3139.  
  3140. From: "Damien M. Jones" <dmj@emi.net>
  3141. Subject: Re: (fractdev) 24-bit color: cycling, anti-aliasing,
  3142. Date: 18 Sep 1997 13:04:34 -0400
  3143.  
  3144. Rich,
  3145.  
  3146.  - [slower WinFract w/o assembly]
  3147.  - Well, they could just suffer in the meantime :)  How much can they
  3148.  - bitch considering the software is free!  Some people have no gratitude
  3149.  - :)
  3150.  
  3151. It has been my experience that people generally expect a lot from software,
  3152. even if they haven't paid for it.  Some of the most demanding people are
  3153. those who are in no position to contribute.
  3154.  
  3155. I assume you don't want to get into a philosophical discussion about why
  3156. free software is written in the first place. :)
  3157.  
  3158.  - [drivers converting to display format from application format]
  3159.  -
  3160.  - Ah... I wasn't aware of those kinds of machinations under Windows.  I
  3161.  - suppose it makes sense.  Lots of people bitch about the complexity of
  3162.  - handling different visual types under X (8-bit pseudocolor vs. 24-bit
  3163.  - truecolor).
  3164.  
  3165. I doubt it's much different than Windows, really.  BTW, I forgot to point
  3166. out something yesterday.  I mentioned that in Windows, if you want a window
  3167. to represent a bitmap, you must construct the bitmap, and write a handler
  3168. for the redraw message that blits the bitmap onto the screen.  One of the
  3169. primary reasons I wrote image libraries for Windows was to take care of
  3170. this.  With a few lines of setup code, I can set up such a window and
  3171. basically never have to worry about it again.  Ah, the wonder of class
  3172. libraries... :)
  3173.  
  3174.  - [anti-aliasing in parameter space]
  3175.  - If your iteration space is confined to integers, then I agree with
  3176.  - you; however if you use a fractional iteration count, as in Linus'
  3177.  - algorithm for computing a continuous iteration count, then I don't see
  3178.  - a problem with AA in iteration space, but in general I agree with your
  3179.  - analysis above.
  3180.  
  3181. Oh, it's easy enough to see why anti-aliasing in color space is necessary.
  3182. Even with continuous potential coloring, there is a discontinuity--a place
  3183. where potential becomes meaningless.  And that is all inside points.  Any
  3184. pixel which contains inside and outside points throws off your
  3185. anti-aliasing in parameter space (in this case, the parameter is
  3186. potential).  Also, the more I think about it, what you're trying to
  3187. accomplish with AA is to filter an object (fractal) with infinite frequency
  3188. content so that frequencies that can't be represented by your sampling grid
  3189. aren't aliased down to lower frequencies.  Now, think back to the winding
  3190. line through 3D space that is the user's palette.  If you AA in parameter
  3191. space, you still always end up with points along that line--but to me it
  3192. just seems like if you're really attentuating higher frequencies, you need
  3193. to replace them with a kind of "average"--you need to do what the human eye
  3194. does when it's not focusing on the detail of a texture, and that is to
  3195. simply note the overall color.  Such colors will most always NOT be on the
  3196. palette line.
  3197.  
  3198.  - [color-cycling an 8-bit "system" palette]
  3199.  - Oh, I think people could be allowed to color cycle an image, it just
  3200.  - won't do anything useful :)
  3201.  
  3202. OK, point taken.  I just don't think the results are worth bothering with. :)
  3203.  
  3204.  - I think the general answer is that you don't color cycle anything
  3205.  - other than 8-bit pseudocolor images.  At least in the way fractint
  3206.  - treats color cycling currently.
  3207.  
  3208. Well, as you say, FractInt uses the hardware to do the cycling.  If the
  3209. winding line through 3D color space is the palette, FractInt's palette is
  3210. simply 256 sample points along that line.  FractInt's doing exactly what I
  3211. suggested, and that is propogating points along that line, just with fixed
  3212. steps, and because it only needs to to change 768 hardware registers, it
  3213. can be done quickly.
  3214.  
  3215.  - So if you want to "color cycle" a 24-bit or AA image, then you have to
  3216.  - recompute the entire screen in order to get the effect.
  3217.  
  3218. Exactly.  I was describing ways this might be optimized.  I'm not terribly
  3219. sure it's important.
  3220.  
  3221.  - Fractint users are accustomed to color cycling by manipulating the video
  3222.  - palette in the hardware.
  3223.  
  3224. 99% of FractInt users probably aren't really aware of how it's done, they
  3225. just like the effect. :)
  3226.  
  3227.  - Obviously we could "color cycle" a 24-bit image, but the time it takes to
  3228.  - remap all the iterations to pixels for the entire screen wouldn't be
  3229.  - anywhere near as fast as manipulating the DAC.  One could do it, but when
  3230.  - its that slow, my inclination is to shrug my shoulders and say "what's the
  3231.  - point?"
  3232.  
  3233. Well, it depends how slow you consider too slow.  I find color cycling at
  3234. high speeds to be somewhat disorienting for most pictures, so the frame
  3235. rate I usually end up with is between 15 and 30 anyway.  On a modern PC,
  3236. these speeds are not unreachable, given the optimization techniques I
  3237. described yesterday, although for AA color they *might* be too slow.
  3238. Non-AA should at least be acceptable.
  3239.  
  3240.  - Yeah, I'm not sure its worth all the effort.  I think most people would
  3241.  - be willing to give up color cycling for the ability to generate 24-bit
  3242.  - AA fractals.
  3243.  
  3244. Funny you should mention that.  I know at least one person who uses Steve
  3245. Ferguson's Flarium24 program, and the feature they miss most is
  3246. color-cycling.  This person has *some* programming background, but
  3247. definitely not in hardware, and they don't completely understand why
  3248. color-cycling in 24-bit color is so hard.  When Steve showed her a 24-bit
  3249. cycler of the second variation I described (the triangle-wave thing) she
  3250. was *escstatic*.
  3251.  
  3252. If I get time today, maybe I'll do a "proof of concept" on the cycler. :)
  3253.  
  3254.  - In 24-bit modes under X there is the possibility of using the hardware
  3255.  - colormap to "cycle" in just this manner.  I don't know if Windows
  3256.  - provides a colormap that is used in 24-bit mode though.  In
  3257.  - workstations, this colormap is typically used to allow the application
  3258.  - finer control over the gamma correction process.
  3259.  
  3260. The Windows API does not provide a standard way (yet) of accessing hardware
  3261. LUTs for 24-bit display, primarily because not all PC graphics cards
  3262. support them.  I know the Matrox Millenium does, because its control panel
  3263. allows the user to tweak it.  I think this is an invaluable feature, but my
  3264. own graphics card (based on the S3, a *very* popular chipset) does not
  3265. offer it.  Such a shame.
  3266.  
  3267. The Macintosh has supported this feature for quite a long time.  Up through
  3268. the last of the 68K Macs, it was even application-accessible, and this is
  3269. how the KPT Cyclone filter (in the KPT 2 package) worked--it cycled colors
  3270. pretty much in the new fashion I described yesterday.  However, on
  3271. PowerMacs this apparently doesn't work (probably because the table moved or
  3272. something, and KPT Cyclone was banging the table directly instead of using
  3273. an API) and thus this filter was dropped when KPT 3 was released.  No
  3274. attempt was made to convert the technique to a full-screen blit, once
  3275. access to the hardware was denied.  A pity.
  3276.  
  3277.  - (For instance, I can write my own gamma map into the CLUT and use this in
  3278.  - conjunction with certain AA line/dot algorithms that depend on a proper
  3279.  - treatment of gamma in order to avoid "ropiness" and other artifacts in
  3280.  - the lines/dots.)
  3281.  
  3282. Ah, nostalgia.  You've just reminded me of Spectrum 512, the only thing
  3283. close to a "true color" paint program for Atari STs.  (Those of you not
  3284. interested in my meanderings on this subject should skip the rest of this
  3285. message. :)
  3286.  
  3287. <nostalgia>
  3288. The Atari ST had a hardware palette of 512 colors--eight shades of each
  3289. primary.  However, the highest number of colors it could display was 16.
  3290. The horizontal blank could be set up to trigger an interrupt, so that at
  3291. the end of each scan line, the hardware palette could be changed and a new
  3292. set of 16 colors used on the next line.  (Ah, the tricks we had to resort
  3293. to back then!)  Atari flatly denied that more colors could be obtained from
  3294. the computer than this.
  3295.  
  3296. Well, some very clever programmers decided to stick it in Atari's eye.
  3297. They observed that the CPU was just fast enough to reprogram the palette
  3298. registers three times per scanline, plus a few instructions to spare for
  3299. setting up registers and such.  This gave 48 colors per scanline, although
  3300. for any given pixel only sixteen were possible.  The fact that colors were
  3301. changed dynamically as the monitor beam swept across the screen was also
  3302. pretty inconvenient when it came to deciding just how to allocate those
  3303. colors, but the point was, the technique worked.  It was stable.  And it
  3304. worked on all Atari STs of the day (which all had the same clock speed and
  3305. video circuitry).
  3306.  
  3307. These guys could have done something simple with the technique, like write
  3308. a picture converter for displaying GIFs.  (They did, eventually.)  Instead,
  3309. the first thing they did with it was write a *paint program*.  And they
  3310. didn't just write any old paint program; they figured, since they had true
  3311. color, they might as well let it do anti-aliased lines and circles, too.
  3312.  
  3313. When I first saw this program, knowing what I knew about the hardware of
  3314. the Atari ST, I just about crapped my pants.  And the anti-aliasing, well,
  3315. that was icing on the cake.  And why do I think of this?  Because with only
  3316. eight shades of each primary color, there isn't sufficient color resolution
  3317. to do anything about gamma, and that means the ropiness you describe is
  3318. exactly what I saw.  Better than no AA, but definitely NOT the best that AA
  3319. has to offer.
  3320. </nostalgia>
  3321.  
  3322. Damien M. Jones  /  temporary sanity designs  /  http://www.emi.net/~dmj/
  3323.    dmj@emi.net  /  my gallery: http://www.geocities.com/SoHo/Lofts/2605/
  3324.  
  3325.  
  3326. Thanks for using Fractdev, The Fractint Developer's Discussion List
  3327. Post Message:   fractdev@xmission.com
  3328. Get Commands:   majordomo@xmission.com "help"
  3329. Administrator:  twegner@phoenix.net
  3330. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  3331.  
  3332.  
  3333. -------------------------------------------------------------------------------
  3334.  
  3335. From: "Damien M. Jones" <dmj@emi.net>
  3336. Subject: Re: (fractdev) XaoS 
  3337. Date: 18 Sep 1997 13:05:27 -0400
  3338.  
  3339. Rich,
  3340.  
  3341.  - I just saw a Borland C++ Win 95/NT compiler environment at an auction
  3342.  - preview.  If I could pick it up for a song, would it be worth buying?
  3343.  
  3344. Depends on the version.
  3345.  
  3346. Damien M. Jones  /  temporary sanity designs  /  http://www.emi.net/~dmj/
  3347.    dmj@emi.net  /  my gallery: http://www.geocities.com/SoHo/Lofts/2605/
  3348.  
  3349.  
  3350. Thanks for using Fractdev, The Fractint Developer's Discussion List
  3351. Post Message:   fractdev@xmission.com
  3352. Get Commands:   majordomo@xmission.com "help"
  3353. Administrator:  twegner@phoenix.net
  3354. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  3355.  
  3356.  
  3357. -------------------------------------------------------------------------------
  3358.  
  3359. From: Rich Thomson <rthomson@ptc.com>
  3360. Subject: Re: (fractdev) XaoS 
  3361. Date: 18 Sep 1997 15:23:53 -0600
  3362.  
  3363.  
  3364. In article <3.0.1.32.19970918130527.00697e28@mail.emi.net> ,
  3365.     "Damien M. Jones" <dmj@emi.net>  writes:
  3366. >  - I just saw a Borland C++ Win 95/NT compiler environment at an auction
  3367. >  - preview.  If I could pick it up for a song, would it be worth buying?
  3368. > Depends on the version.
  3369.  
  3370. Well I just bought it for $20.  I figure even if its a newer version
  3371. without the bundled assembler, it was a good deal.  There might be one
  3372. missing manual, but for $20 I can live with that.  The CD was still
  3373. sealed in its little envelope and the manuals had a copyright date
  3374. inside them of 1997.  So it seems that its pretty new.  I did scan
  3375. around quickly at the auction house to see if I could find a version
  3376. number but it wasn't obvious.  Right now its in my car and I won't
  3377. look at it in detail until I get home tonight.  I also bought a Visual
  3378. J++ Professional Version (java) development environment, shrink-wrapped,
  3379. brand new for $30.  I considered both of them to be a good deal!
  3380. --
  3381.   ``Between stimulus and response is the will to choose.''  -- Steven Covey
  3382.  =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  3383.      3D Paint: The Power to Create in 3D;        Rich Thomson
  3384.      email me for more info                rthomson@ptc.com
  3385.  
  3386. Thanks for using Fractdev, The Fractint Developer's Discussion List
  3387. Post Message:   fractdev@xmission.com
  3388. Get Commands:   majordomo@xmission.com "help"
  3389. Administrator:  twegner@phoenix.net
  3390. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  3391.  
  3392.  
  3393. -------------------------------------------------------------------------------
  3394.  
  3395. From: "Tim Wegner" <twegner@phoenix.net>
  3396. Subject: (fractdev) Wishlist page
  3397. Date: 18 Sep 1997 22:16:24 -0600
  3398.  
  3399. There are already ideas on Robin's wish list page. A wish list page 
  3400. is a better idea than I realized. Some of the ideas would be easy to 
  3401. implement. I suggest folks give the page a quick look from time to 
  3402. time.
  3403.  
  3404. Perhaps there should be an author's feedback section, though I guess 
  3405. it is unnecessary, we could just enter feedback as a wish on the 
  3406. list.
  3407.  
  3408. Tim
  3409.  
  3410. The page is:
  3411.  
  3412. http://web.ukonline.co.uk/members/robin.b2/olig/fracwish.htm
  3413.  
  3414.  
  3415. Thanks for using Fractdev, The Fractint Developer's Discussion List
  3416. Post Message:   fractdev@xmission.com
  3417. Get Commands:   majordomo@xmission.com "help"
  3418. Administrator:  twegner@phoenix.net
  3419. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  3420.  
  3421.  
  3422. -------------------------------------------------------------------------------
  3423.  
  3424. From: "Tim Wegner" <twegner@phoenix.net>
  3425. Subject: (fractdev) truecolor
  3426. Date: 23 Sep 1997 20:44:04 -0600
  3427.  
  3428. Mark Sargent sent us a patch to add a continuous potential truecolor 
  3429. algorithm as a test fractal type to Fractint.
  3430.  
  3431. I've studied Mike Sargent's patch, and while the effect is very nice
  3432. (and we owe him a lot for nudging us toward truecolor), the
  3433. implementation leaves a lot to be desired. It uses two passes (very
  3434. wasteful). We might use his inside BOF algorithm.
  3435.  
  3436. I'd prefer to use Linas Vepstas' algorithm. It is:
  3437.  
  3438.       int iter_count = 0;
  3439.       float escape_radius = 20.0;
  3440.       complex Z, C;
  3441.       loop (forever) {
  3442.          Z = Z*Z +C;
  3443.          iter_count ++;
  3444.          float modulus = sqrt (ReZ*ReZ + ImZ*ImZ);
  3445.          if (modulus > escape_radius) goto stop;
  3446.          if (iter_count > maxiter) goto stop;
  3447.       }
  3448.  
  3449.    stop:
  3450.       float mu = iter_count - (log (log (modulus)))/ log (2.0);
  3451.       color_value = colormap_lookup (mu);
  3452.       draw_pixel;
  3453.  
  3454. For more info, see
  3455.  
  3456. http://linas.org/art-gallery/escape/escape.html
  3457.  
  3458. Both Linas's and Mike's approach have the virtue that they can be used
  3459. with 256-color palettes. They both smoothly transition the colors
  3460. between bands. This means that artists can design colors in 256 color 
  3461. modes using the existing palette editor.
  3462.  
  3463. Thanks to Lee Skinner for persisting in emailing truecolor discussion.
  3464. Linas's web page summarizes the situation nicely.
  3465.  
  3466. The 2.0 in Linas's formula should actually be the effective degree of
  3467. the fractal formula. It is a parameter that can be tuned with 
  3468. different algorithms.
  3469.  
  3470. I should be working on synchronous orbits, but I find I 
  3471. am distracted by truecolor <g!>
  3472.  
  3473. In my musings in the last few days I have wondered if we should add 
  3474. an addition section to a formula that could be used to calculate 
  3475. colors. For starters I'm just planning a screen that allows selecting 
  3476. various parametrized truecolor algorithms.
  3477.  
  3478. It won't take long to get truecolor up and running, but there are 
  3479. many details that will have to be adjusted for truecolor before this 
  3480. is releasable.
  3481.  
  3482. Tim
  3483.  
  3484. Thanks for using Fractdev, The Fractint Developer's Discussion List
  3485. Post Message:   fractdev@xmission.com
  3486. Get Commands:   majordomo@xmission.com "help"
  3487. Administrator:  twegner@phoenix.net
  3488. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  3489.  
  3490.  
  3491. -------------------------------------------------------------------------------
  3492.  
  3493. From: "Damien M. Jones" <dmj@emi.net>
  3494. Subject: Re: (fractdev) truecolor
  3495. Date: 23 Sep 1997 23:12:10 -0400
  3496.  
  3497. Tim,
  3498.  
  3499.  - I'd prefer to use Linas Vepstas' algorithm. It is:
  3500.  
  3501. I'd lean in this direction too, even if I hadn't already written a .FRM for
  3502. it. :)  (Er, that's dmj-Mand-Smooth, dmj-Mand-SmoothPHC, and
  3503. dmj-Mand-SmoothX2.)
  3504.  
  3505.  - In my musings in the last few days I have wondered if we should add 
  3506.  - an addition section to a formula that could be used to calculate 
  3507.  - colors. For starters I'm just planning a screen that allows selecting 
  3508.  - various parametrized truecolor algorithms.
  3509.  
  3510. Um, hopefully some of the color schemes I barfed up will make their way
  3511. there... but I definitely like the thought of having another screenful of
  3512. coloring options to play with.  Making true-color algorithms simply produce
  3513. output in the range 0-1 and then mapping that range onto a palette
  3514. (smoothly interpolated between the 256 colors present in it) would leverage
  3515. the existing palette library of many FractInt users while letting them
  3516. benefit from the new smooth coloring.
  3517.  
  3518. Damien M. Jones  /  temporary sanity designs  /  http://www.emi.net/~dmj/
  3519.    dmj@emi.net  /  my gallery: http://www.geocities.com/SoHo/Lofts/2605/
  3520.  
  3521.  
  3522. Thanks for using Fractdev, The Fractint Developer's Discussion List
  3523. Post Message:   fractdev@xmission.com
  3524. Get Commands:   majordomo@xmission.com "help"
  3525. Administrator:  twegner@phoenix.net
  3526. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  3527.  
  3528.  
  3529. -------------------------------------------------------------------------------
  3530.  
  3531. From: "Tim Wegner" <twegner@phoenix.net>
  3532. Subject: (fractdev) What's up
  3533. Date: 28 Sep 1997 10:19:19 -0600
  3534.  
  3535. Since things are quiet, I thought I'd better say what I'm doing. 
  3536. Several other developers are also at work. For most of us 
  3537. professional life limits our Fractint time these days. We work, but 
  3538. breakthrough's come slowly.
  3539.  
  3540. I was working on synchronous orbits, and still intend to finish this, 
  3541. however the "customers" seem more interested in truecolor. I have an 
  3542. experimental patch by Mike Sargent that implements a continuous 
  3543. potentional truecolor algorithm. It looks nice, but I prefer Linas 
  3544. Vepstas's approach. I have taken some time to think through how to 
  3545. implement truecolor, and it doesn't look too bad, especially if we 
  3546. usurp all the putcolor() function pointers yet again.
  3547.  
  3548. Thinking about truecolor led me to PNG. No point having truecolor 
  3549. if you can't save the image. Of course we could implement saving as a 
  3550. Targa easily (the code is already there). The next few paragraphs may 
  3551. be unintelligible to those who have not wrestled with PC programming 
  3552. :-)
  3553.  
  3554. I have worked with the PNG team long and hard to make the data types
  3555. model independent, using the far keyword. Thank goodness, or using
  3556. LibPNG with Fractint would be impossible. However I found other 
  3557. medium model problems.
  3558.  
  3559. 1. The code is littered with string literals for error messages that 
  3560. gobble up near memory.
  3561.  
  3562. 2. Libpng uses setjmp and longjmp which prevent saving memory with 
  3563. overlays. You can't longjmp across to another overlay. Actually, you 
  3564. CAN, but the compiler keeps both in memory at the same time, 
  3565. defeating the purpose of the overlay.
  3566.  
  3567. I am not giving up. Both of these problems can possibly be cleared up 
  3568. with careful use of macros that won't mess up the Libpng and Zlib 
  3569. code much at all. I'd LOVE to have truecolor and PNG working in the 
  3570. DOS fractint if it's possible. 
  3571.  
  3572. You see the problem these days - looking at one issue takes one to 
  3573. another issue. Truecolor leads to PNG which leads to a port to a 
  3574. decent memory environment.
  3575.  
  3576. But if you look at Robin's wish list page, there are a number a pleas 
  3577. not to abandon DOS (along with other suggestions to turn Fractint 
  3578. into a DLL or a java class <g!>)
  3579.  
  3580. Tim
  3581.  
  3582.  
  3583.  
  3584. Thanks for using Fractdev, The Fractint Developer's Discussion List
  3585. Post Message:   fractdev@xmission.com
  3586. Get Commands:   majordomo@xmission.com "help"
  3587. Administrator:  twegner@phoenix.net
  3588. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  3589.  
  3590.  
  3591. -------------------------------------------------------------------------------
  3592.  
  3593. From: Darryl House <darryl@dcs-chico.com>
  3594. Subject: re: (fractdev) What's up
  3595. Date: 28 Sep 1997 10:57:42 -0700
  3596.  
  3597.  
  3598. Hi ... some of you will know me... others, well, it's nice to meet you :-)
  3599.  
  3600. A couple of years ago I developed a version of Fractint for X-Windows and
  3601. Motif, named xmfract. Tim and I and a few of the other developers have
  3602. been tossing around ideas for creating a file-compatible and
  3603. code-compatible version of Fractint capable of running and displaying
  3604. on U**x machines.
  3605.  
  3606. The main drawbacks to the current version of xmfract are that it is not
  3607. code-compatible with the current version of Fractint, making updates
  3608. tedious, and that it requires Motif, a commercial product. Another
  3609. annoyance is that the thing has a rather rudimentary GUI by today's
  3610. standards (I developed it as an exercise in Motif, intending to use it as
  3611. a training tool for Motif techniques). There are more... <g>.
  3612.  
  3613. Enough of the history lesson. I've been sporadically exploring techniques
  3614. for creating a platform-independent, code-compatible version of Fractint.
  3615. A huge task, as you can imagine. Anyway -- the results of that
  3616. exploration have indicated that a Tcl/Tk and/or Java framework for the GUI
  3617. is the most likely approach. One can never really develop a totally
  3618. device-independent project, imho -- at some point we must necessarily
  3619. write code for various platforms. This being said, one of the next hurdles
  3620. to cross is to decide if and how to approach separating the GUI code from
  3621. the core code. Doing that while still retaining DOS compatibility is
  3622. challenging. We'll probably need to branch the code with the preprocessor
  3623. to supplant some routines with others that incorporate disparate GUI
  3624. routines.
  3625.  
  3626. [Tim wrote:]
  3627. >For most of us professional life limits our Fractint time these days.
  3628. >We work, but breakthrough's come slowly.
  3629.  
  3630. Hear! Hear! <big ol' grin>
  3631.  
  3632. My professional life consumes an inordinate amount of time lately,
  3633. so I've only devoted a small amount of time to this. That situation will
  3634. continue for the foreseeable future. I can put a few hours in here and there,
  3635. and maybe someday we'll have a real plan <s!>.
  3636.  
  3637.  
  3638. Thanks for using Fractdev, The Fractint Developer's Discussion List
  3639. Post Message:   fractdev@xmission.com
  3640. Get Commands:   majordomo@xmission.com "help"
  3641. Administrator:  twegner@phoenix.net
  3642. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  3643.  
  3644.  
  3645. -------------------------------------------------------------------------------
  3646.  
  3647. From: "Tim Wegner" <twegner@phoenix.net>
  3648. Subject: (fractdev) PNG
  3649. Date: 28 Sep 1997 21:47:41 -0600
  3650.  
  3651. I added save-to-PNG to Xfract. This was easily done. It's 
  3652. just a simple prototype and doesn't yet save the fractal 
  3653. data. However, this code will never run under the DOS fractint as 
  3654. long as we are using conventional memory under the medium model - 
  3655. there's not enough free memory. Inflate needs to be able to malloc() 
  3656. a minimum of 256K.
  3657.  
  3658. PNG reading uses less memory and will probably work within the DOS 
  3659. Fractint OK.
  3660.  
  3661. The good news is that I have stumbled on an easy kludge for PNG 
  3662. support that should work fine. It turns out that even when 
  3663. free conventional memory is very low, a system() call to a 
  3664. djgpp-compiled program (GNU C with DOS extender) can access extended 
  3665. memory fine. Sounds like a paradox, but with as little as 100K or so 
  3666. free memory in Fractint, I can call system() and run an extended DOS 
  3667. program that can malloc() 1000K of memory! So I'll implement save to 
  3668. PNG by writing a temporary file and shelling to a stand-alone program 
  3669. that converts the temporary file to PNG.
  3670.  
  3671. My priorities have now been re-arranged, They are:
  3672.  
  3673. 1. PNG
  3674. 2. Truecolor
  3675. 3. Synchronous Orbits
  3676.  
  3677. I'll implement PNG simultaneously under both Xfract and DOS. I won't 
  3678. use the DOS kludge under Xfract. So what I implement in Xfract can be 
  3679. used for future versions.
  3680.  
  3681. Tim
  3682.  
  3683.  
  3684. Thanks for using Fractdev, The Fractint Developer's Discussion List
  3685. Post Message:   fractdev@xmission.com
  3686. Get Commands:   majordomo@xmission.com "help"
  3687. Administrator:  twegner@phoenix.net
  3688. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  3689.  
  3690.  
  3691. -------------------------------------------------------------------------------
  3692.  
  3693. From: "Tim Wegner" <twegner@phoenix.net>
  3694. Subject: re: (fractdev) What's up
  3695. Date: 28 Sep 1997 21:47:41 -0600
  3696.  
  3697. > Tim and I and a few of the other developers have
  3698. > been tossing around ideas for creating a file-compatible and
  3699. > code-compatible version of Fractint capable of running and displaying
  3700. > on U**x machines.
  3701.  
  3702. Others here are thinking along similar lines, although we also have 
  3703. the dissenting opinion that GUI's shouldn't be portable. But every 
  3704. one is in favor of making the underlying fractint engine independent 
  3705. of the GUI as you suggest.
  3706.  
  3707. > One can never really develop a totally
  3708. > device-independent project, imho -- at some point we must necessarily
  3709. > write code for various platforms. 
  3710.  
  3711. The Python fanatics at work say skip TK and TCL and go straight to 
  3712. Python. All the GUI work and portability is done at a high level in 
  3713. Python. Fractint's C code can be called directly from Python if it is 
  3714. organized right. This sounds appealing, but I don't want to have to 
  3715. distribute Python in order to distribute Fractint. However, the work 
  3716. of organizing the fractint code is probably similar for this approach 
  3717. as to others.
  3718.  
  3719. Tim
  3720.  
  3721.  
  3722.  
  3723. Thanks for using Fractdev, The Fractint Developer's Discussion List
  3724. Post Message:   fractdev@xmission.com
  3725. Get Commands:   majordomo@xmission.com "help"
  3726. Administrator:  twegner@phoenix.net
  3727. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  3728.  
  3729.  
  3730. -------------------------------------------------------------------------------
  3731.  
  3732. From: Rich Thomson <rthomson@ptc.com>
  3733. Subject: Re: (fractdev) What's up 
  3734. Date: 28 Sep 1997 21:42:42 -0600
  3735.  
  3736.  
  3737. In article <199709290300.WAA12600@raid2.fddi.phoenix.net> ,
  3738.     "Tim Wegner" <twegner@phoenix.net>  writes:
  3739. > The Python fanatics at work say skip TK and TCL and go straight to 
  3740. > Python. [...]
  3741. > This sounds appealing, but I don't want to have to 
  3742. > distribute Python in order to distribute Fractint.
  3743.  
  3744. This is why my inclination is to avoid python and Tcl/Tk altogether
  3745. and just abstract out the interface we have now and write the
  3746. necessary platform-specific routines for the interface bits.  This is
  3747. how xaos does its interface, and I think we could do the same.
  3748. My .02
  3749. --
  3750.   ``Between stimulus and response is the will to choose.''  -- Steven Covey
  3751.  =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  3752.      3D Paint: The Power to Create in 3D;        Rich Thomson
  3753.      email me for more info                rthomson@ptc.com
  3754.  
  3755. Thanks for using Fractdev, The Fractint Developer's Discussion List
  3756. Post Message:   fractdev@xmission.com
  3757. Get Commands:   majordomo@xmission.com "help"
  3758. Administrator:  twegner@phoenix.net
  3759. Unsubscribe:    majordomo@xmission.com "unsubscribe fractdev"
  3760.  
  3761.