Addendum to QRT Version 1.5 The following are changes to QRT made since version 1.4 Additions and Enhancements Non-Hardcoded Resolution and Aspect Ratio This release of QRT has additional support for non-Amiga platforms. The QRT input language has been extended to allow the x and y resolution and aspect ratio to be changed. The additional keywords are part of the DEFAULT() command, as in this example: DEFAULT ( x_res = 1280, { ** BIG image ** } y_res = 1024, aspect = .89 ); QRT can generate images in any practical resolution (I have tested it up to 1280 x 1024; the current limit is 2500 x anything) but the image generation time is proportional to the image size. The aspect ratio for any monitor can be determined as follows: aspect ratio = (XR/XD)/(YR/YD) where: XR = X resolution of monitor XD = width of monitor in arbitrary units YR = Y resolution of monitor YD = height length of monitor in arbitrary units There are #ifdefs in the code which should provide reasonable defaults for UNIX and AMIGA machines. Images can now be generated quickly in low resolutions, and once the desired image is found, it can be generated the full displayable resolution. QRT Ray Tracer Page 1 Addendum to 1.5 Command Line Arguments QRT now accepts optional command line arguments, as follows: -xres integer -yres integer -aspect float -foclen float For example, the following line would run QRT in the background with a resolution of 127 x 127: run qrt file.OUT -xres 127 -yres 127 or, in UN*X, qrt file.OUT -xres 127 -yres 127 & These options are very useful for generating preliminary images in a low resolution without changing the .QRT input file. Since it is possible to set these parameters from 3 places, QRT places them in order of increasing priority as follows: Built-in Defaults Parameters in .QRT file Command Line Arguments Thus, any command line arguments present will supersede parameters coded into the .QRT file, and parameters in the QRT file, if present, will supersede the built in QRT defaults. Bug Fixes Version 1.5 of QRT fixes these bugs: 1) Lexer malloc() bug - the lexer was not allocating enough memory for some symbols, causing QRT to crash upon reading certain input files. This has been fixed. 2) toupper() compatibility bug - apparently not all compilers treat toupper() the same - some change only lower case letters, as seems logical, while others change all characters. This function is no longer used in QRT to decrease porting effort. 3) Due to a really stupid error on my part, the QRT Ray Tracer Page 2 Addendum to 1.5 DiffColor() was executing a pow() function call every time though, whether it needed to or not. Since this pow() function is slow, QRT now runs noticeably faster than it used to. I haven't quantified the results, but it seems to be around 20 to 30 percent. The increase in speed will be most noticeable on machines with no floating point co-processor. 4) The TRIANGLE() command now works correctly for non-right triangles. The bug fix for this also fixed a bug with non - rectangular parallelograms. 5) Focal length is no longer resolution dependent. 6) CINFO structures are now always initialized before they are copied. This bug fix was sent to me by Paul Bayloz. Enhancements Additional information about the image is now sent to the standard output. Image X and Y size, aspect ratio, and focal length are printed. I have finally revisited the original documentation files to include some of the information from the addendums. This will make it easier for new users of QRT to learn the system. I fixed a bunch of spelling errors, too. Tabs are now counted as white space; they will no longer cause QRT to report an error message. Deletions The FIRST_SCAN and LAST_SCAN parameters have been obsoleted by the addition of the X_RES and Y_RES commands. These arguments are still accepted for backward compatibility of old QRT files, but they are ignored. In addition, since QRT has recently seen a wider audience in the non-Amiga community, I have removed several paragraphs from Addendum 1.4 which were strictly my personal opinions of some other computer systems. They might have been OK for the Amiga community, but seemed less than appropriate for wider circulation. QRT Ray Tracer Page 3 Addendum to 1.5 Notes, etc. QRT has now been Un*xized - it will compile correctly under AmigaDos or UN*X. I have added #define's for most common machine types at the beginning of qrt.h, so these can be used to add machine specific necessary compiler stuff for new machines. I have compiled QRT on an HP 9000/835 (proprietary RISC architecture), and it *hauls*. It will run all the supplied demos in less than 3 and a half minutes at a resolution of 320x400, and some of the simpler ones, such as Wall_Sphere.QRT in less than one and a half minutes! I may try to compile benchmark times for QRT on various platforms using standard demos and standard resolutions. If anyone has any benchmark times, I'd like to hear about them. I have supplied source code for a QRT RAW to GIF converter, written by David Rowley. This will eliminate the problem of finding a post processor for anyone who has the capability of displaying GIF images (this should be nearly everyone). The program, called QRT2GIF, seems to work well, except for very large image sizes where it cannot malloc() enough memory. It claims to write a temporary file, but the final GIF file is corrupt. It is also limited to 256 colors. I have used it up to resolutions of 768 by 640, however, with no trouble. It's a very useful tool. Thanks, Dave! QRT Ray Tracer Page 4 Addendum to 1.5