home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / misc / volume35 / wave / part01 < prev    next >
Encoding:
Text File  |  1993-03-03  |  20.2 KB  |  533 lines

  1. Newsgroups: comp.sources.misc
  2. From: kuru@jyu.fi (Esa Kuru puh.254206)
  3. Subject: v35i114:  wave - 3D-sird-image 24bit frame generator, Part01/01
  4. Message-ID: <1993Mar3.191618.20464@sparky.imd.sterling.com>
  5. X-Md4-Signature: 69bc7bef29c7535d008f96a264b9b311
  6. Date: Wed, 3 Mar 1993 19:16:18 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8.  
  9. Submitted-by: kuru@jyu.fi (Esa Kuru puh.254206)
  10. Posting-number: Volume 35, Issue 114
  11. Archive-name: wave/part01
  12. Environment: Sun, Amiga, 24bit
  13.  
  14. This 3D-SIRD (Single-Image-Random-Dot) animation shows a sinewave
  15. generator in a plane. The waving plane can be seen behind or
  16. infront of the computer screen in all colours without glasses in 3D.
  17. If You are already familiar with SIRDs then it will ease 'seeing' it.
  18.  
  19. #! /bin/sh
  20. # This is a shell archive.  Remove anything before this line, then feed it
  21. # into a shell via "sh file" or similar.  To overwrite existing files,
  22. # type "sh file -c".
  23. # Contents:  wave.c wave.readme
  24. # Wrapped by kent@sparky on Wed Mar  3 13:09:34 1993
  25. PATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin:/usr/lbin ; export PATH
  26. echo If this archive is complete, you will see the following message:
  27. echo '          "shar: End of archive 1 (of 1)."'
  28. if test -f 'wave.c' -a "${1}" != "-c" ; then 
  29.   echo shar: Will not clobber existing file \"'wave.c'\"
  30. else
  31.   echo shar: Extracting \"'wave.c'\" \(13246 characters\)
  32.   sed "s/^X//" >'wave.c' <<'END_OF_FILE'
  33. X/* Single-Image-Random-Dot 3D-animation frame generator
  34. X * with
  35. X * - antialiasing
  36. X * - OUT.PPM 24-bit output
  37. X * with new previeously unknown:
  38. X *  - dithering pattern  (c) Esa Kuru (kuru@jyu.fi)
  39. X *    that enables 
  40. X *    a) changing of resolution of an already drawn picture afterwards 
  41. X *    b) colours and shades to be added to surfaces in the picture
  42. X *
  43. X * Copyright by Esa Kuru (the Author)
  44. X * Address: 
  45. X *   Aatoksenkatu 10 B 31
  46. X *   40720 Jyvaskyla
  47. X *   FINDLAND
  48. X *
  49. X * This code is freely distributable and released mainly on
  50. X * research purposes for 3-D vision enthusiasts.
  51. X * This comment must be kept within this program and within its
  52. X * modified versions unmodified. No part of this code may be
  53. X * sold in any format without my written and signed permission.
  54. X * This code may be modified on following conditions:
  55. X * - If you modify the code You must send the modified version
  56. X *   of this code directly to me, the author Esa Kuru 
  57. X *   (E-mail above is fine)
  58. X * - If You include any part of this or modified code to another program
  59. X *   (commercial, freely distributable, public-domain, share-ware
  60. X *   or whatever) then You must send all of the source files needed
  61. X *   to compile that program with an executable with all the gadgets
  62. X *   to run it (not the computer) and one free license for me to use 
  63. X *   that code. My contribution to Your product must be mentioned.
  64. X *
  65. X * This code is not quaranteed to do what it claims to do and the
  66. X * author is in no way responsible of any damage caused by
  67. X * running this program. WYSIWYG.
  68. X *
  69. X * Since I just have no time to include this to those Wonderful 
  70. X * public-domain or freely distributable and modifiable ray tracers
  71. X * I'm releasing this new feature for You programmers to do the
  72. X * job, thank You.
  73. X *
  74. X * My best wishes to Vesa Meskanen (the author of commercial ray-tracer 'REAL-3D')
  75. X * You ought to have answered my request for call back. Are You too proud or what? 
  76. X * Now I cannot wait for Your call forever, therefore I am releasing
  77. X * this code free for everyone. :-) Sorry. :--)
  78. X */
  79. X
  80. X/* History:
  81. X *     5.1.1993 An initial version written in AREXX-language (Esa Kuru)
  82. X *    12.1.1993 First C-language version (Esa Kuru)
  83. X *           I have successfully compiled this on SUN-Sparc-station with 
  84. X *        gcc -O2 wave.c -o wave -lm
  85. X *          and with Amiga 3000/68040 with 18Mb RAM :
  86. X *        gcc -O2 wave.c -o wave -m68020 -m68881
  87. X *          all double types converted to floats and stack set to 300000.
  88. X *    15.1.1993 Animation frame generation added and
  89. X *          a random number seed initialization corrected.
  90. X *                This version is run by a script that alters framenumber
  91. X *          in command line. (Esa Kuru)
  92. X *    Note:      Currently this code doesn't handle perspective images
  93. X *           correctly although it gives 3D-sird-effect.
  94. X *          Nor does this handle right and left eye colors
  95. X *           in incr, incg and incb statements correctly, but works.
  96. X *          amp statement should be rewritten if included to another
  97. X *          program (Esa Kuru)
  98. X *
  99. X *    Have fun! And don't loose Your sence of reality. :-)
  100. X */
  101. X/* That's about it and now the fun starts, the rest of the comments may be 
  102. X * removed if You like. Try to keep the code as portable as possible.
  103. X */
  104. X
  105. X/* maybe all of these includes are not necessary, figure out */
  106. X#include <ctype.h>
  107. X#include <stdio.h>
  108. X#include <stdlib.h>
  109. X#include <time.h>
  110. X#include <math.h>
  111. X
  112. X/* PLANE is 3d-magic number
  113. X * rest of #defines relate to maximum picture size
  114. X * ROUNDS is needed to fill the picture with dithering pattern
  115. X */
  116. X#define PLANE 60
  117. X#define XMIN 0
  118. X#define YMIN 0
  119. X#define YYMAX 2000
  120. X#define XXMAX 2000
  121. X#define ROUNDS 64
  122. X
  123. X/* Antialias must be: AALIAS > 0, or division by zero error will occur.
  124. X * BUFLEN is the length of outputbuffer to a file.
  125. X */
  126. X#define AALIAS 10
  127. X#define BUFLEN 60000L
  128. X/* header is a part of ppm P6 header
  129. X */
  130. Xstatic char header[]={0x32,0x35,0x35,0x0a,0x00};
  131. X
  132. X/* rast[] contains the NEW dithering pattern that is based on 
  133. X * prime numbers in the sense that an integral over rast[]
  134. X * is always constant and rast[] is frequencymodulated by primes. 
  135. X * There may be different amplitudes, lengths or orders preferrably
  136. X * ascending or descending frequency modulation.
  137. X * I think there is no reason to hide or keep secret any of this information,
  138. X * one can always analyze a drawn picture by magnifying it enough.
  139. X */
  140. X
  141. Xstatic long rast[]={32,64,64,00,00,48,48,48,16,16,16,40,40,40,40,40,\
  142. X        24,24,24,24,24,24,24,36,36,36,36,36,36,36,28,28,28,28,\
  143. X        28,28,28,28,28,28,28,34,34,34,34,34,34,34,34,34,34,34,\
  144. X        34,34,31,31,31,31,31,31,31,31,31,31,31};
  145. Xchar out[BUFLEN];
  146. X
  147. X/* make this a subroutine! */
  148. Xmain(argc,argv)int argc;char *argv[];{
  149. X FILE *outf1;
  150. X long outptr=-1; /* buffer counter */
  151. X int t,xcenter,ycenter;
  152. X
  153. X/* rr - right red
  154. X * rg - right green
  155. X * rb - right blue
  156. X * lr - left red
  157. X * lg - left green
  158. X * lb - left blue
  159. X * cr - the average of rr and lr
  160. X * cg - the average of rg and lg
  161. X * cb - the average of rb and lb
  162. X */
  163. X
  164. X int y,yy,x,rr,rg,rb,lr,lg,lb,cr,cg,cb,i,aa;
  165. X int rp,gp,bp,xp,yp;
  166. X int XMAX,YMAX;
  167. X
  168. X/* Make these tables with calloc() or malloc() to keep this code
  169. X * portable with small Personal microcomputer systems. This version is a
  170. X * stack pig. (+3 in arrays is just to be sure...figure out!)
  171. X */ 
  172. X
  173. X float xposr[YYMAX+3],xposg[YYMAX+3],xposb[YYMAX+3];
  174. X float xx,amp,ftmp,incr,incg,incb,xr,xb,xg,pii;
  175. X float r[XXMAX+3],g[XXMAX+3],b[XXMAX+3];
  176. X
  177. X pii=(float)2.0*(float)acos(-1.00);
  178. X
  179. X/* initialize starting positions in left column for each colour separately
  180. X * but first dump a ppm file header and do the init stuff.
  181. X */
  182. X
  183. X for(i=0;i<5;i++){outptr++;out[outptr]=header[i];}  /* dump header */
  184. X (void) srand(time(NULL));            /* init random seed */
  185. X for(y=YMIN;y<YYMAX;y++){        /* init position tables */
  186. X  xposr[y]=(float)((rand()%111)-2*PLANE); /* constant 111 is not accurate */
  187. X  xposg[y]=(float)((rand()%111)-2*PLANE); /* find a better one */
  188. X  xposb[y]=(float)((rand()%111)-2*PLANE); /* find a better randomnumber generator */
  189. X }
  190. X
  191. X /* I'd like to see someone rewritten 'selectable' commandline parameters.
  192. X  */
  193. X
  194. X if(argc<4){
  195. X  (void) printf("Usage: %s <picture#> <xmax> <ymax>\n",argv[0]);
  196. X    (void) printf("0 <= picture# <= 30, 320 <= xmax <= %d, 200 <= ymax <= %d.\n",\
  197. X    XXMAX,YYMAX);
  198. X    (void) printf("%s is a 24-bit random-dot 'wave'-animation frame generator.\n",argv[0]);
  199. X    (void) printf("Outputfile is OUT.PPM\n");
  200. X    (void) printf("Executable is freely distributable.\n");
  201. X    (void) printf("Author: Esa Kuru (kuru@jyu.fi) 15.2.1993 \n");
  202. X    exit(10);
  203. X }
  204. X t=atoi(argv[1]); /* t - the time i.e. the number of frame */
  205. X XMAX=atoi(argv[2]);
  206. X YMAX=atoi(argv[3]);
  207. X
  208. X/* the next figures are tested to be all-right with current formulaes below.
  209. X */
  210. X
  211. X if((t<0)||(t>30)){
  212. X  (void) printf("Invalid parameter: picture# must be between 0...30 \n");exit(5);
  213. X }
  214. X if(XMAX<320){
  215. X  (void) printf("Invalid parameter: xmax too small.\n");exit(1);
  216. X }
  217. X if(XMAX>XXMAX){
  218. X  (void) printf("Invalid parameter; xmax too large.\n");exit(2);
  219. X }
  220. X if(YMAX<200){
  221. X  (void) printf("Invalid parameter: ymax too small.\n");exit(3);
  222. X }
  223. X if(YMAX>YYMAX){
  224. X  (void) printf("Invalid parameter: ymax too large.\n");exit(4);
  225. X }
  226. X/* make a filename selectable in one of commandline options 
  227. X */
  228. X if(NULL==(outf1=fopen("OUT.PPM","wb"))){
  229. X    (void) printf("Cannot open outfile: OUT.PPM");
  230. X    exit(20);
  231. X }
  232. X (void) fprintf(outf1,"P6\n%d %d\n",XMAX,YMAX);
  233. X fclose(outf1);                 /* These few lines are a dirty kludge and tells */
  234. X if(NULL==(outf1=fopen("OUT.PPM","awb"))){ /* about my ignorance of programming */
  235. X    (void) printf("Cannot open outfile: OUT.PPM\n"); /* in C */
  236. X  exit(30);
  237. X }
  238. X ycenter=(int)((YMAX-YMIN)/2.0);
  239. X xcenter=(int)((XMAX-XMIN)/2.0);
  240. X
  241. X for(y=-ycenter;y<ycenter;y++){        /* main loop: process all lines */ 
  242. X  for(x=-xcenter;x<xcenter;x++){    /* init background colors */
  243. X   xx=x+xcenter;            /* this loop could be well removed */
  244. X   rr=128;rg=128;rb=128;
  245. X   lr=128;                 /* define red for left eye */
  246. X   lg=128;                 /* define green for left eye */
  247. X   lb=128;                /* define blue for left eye */
  248. X   cr=(int)(rr+lr)/2.0; cg=(int)(rg+lg)/2.0; cb=(int)(rb+lb)/2.0;
  249. X   if(((int)xx>=XMIN)&&((int)xx<=XMAX)){ r[(int)xx]=(float)cr; 
  250. X                    g[(int)xx]=(float)cg; 
  251. X                               b[(int)xx]=(float)cb;
  252. X                }
  253. X  }                    /* end init background colors */
  254. X  for(i=1;(long)i<(long)ROUNDS;i++){         /* process all micropixels in a line */
  255. X   yy=y+ycenter;
  256. X   for(aa=0;aa<AALIAS;aa++){             /* process each pixel as antialiased */
  257. X    incr=(float)(((xposr[yy]+i)*AALIAS+aa)/(float)(AALIAS+1)); /* red start position */
  258. X    incg=(float)(((xposg[yy]+i)*AALIAS+aa)/(float)(AALIAS+1)); /* green start position */
  259. X    incb=(float)(((xposb[yy]+i)*AALIAS+aa)/(float)(AALIAS+1)); /* blue start position */
  260. X    ftmp= -xcenter-PLANE; xr=ftmp+incr; xg=ftmp+incg; xb=ftmp+incb;
  261. X
  262. X    while ((long)(xr)<(long)xcenter){            /* do calc red line */
  263. X     xx=xr+xcenter;
  264. X/*
  265. X * The next three while loops could be merged together and one of them
  266. X * could handle all colours in single loop. However it is interesting to
  267. X * note that if You put different functions within different while loops
  268. X * You can easily create transparent 3D-surfaces that have different
  269. X * base colour (anything You like) and different depths (=distances from screen).
  270. X * Note that amp is not pefect for any depth functions and may have
  271. X * to be corrected. incr,incg,incb should be updated in each of those 
  272. X * while loops if You want to create transparent surfaces.
  273. X * If You want to include this into a ray-tracer then the incr,incg,incb functions
  274. X * should call a raytracer and return the distance to the nearest viewable object
  275. X * a ray crosses within point (x,y). Amp should be modified to use correct
  276. X * shades 'rast[]'-dithering included.
  277. X * sin() is here the depth function that can be modified if You just want to
  278. X * play around. 
  279. X * It would be nice to have to sliders for additive and multiplicative
  280. X * dithering coefficients in amp function and not just constants.
  281. X * This affects to the randomness of the picture and to the clarity of 3D-effect.
  282. X */
  283. X/*   an alternative static pyramid-like function is commented here
  284. X */ 
  285. X/*     incr=((float)PLANE-((float)180.0-((float)abs(xr)+(float)abs(y)))/(float)18.0); 
  286. X*/                        /* depth function (for red) */
  287. X  /*   if (incr>(float)PLANE)incr=(float)PLANE;
  288. X   */
  289. X     incr=(float)PLANE+sin(sqrt(xr*xr+y*y)/20.0+(float)t*pii/30.0)*2.0;
  290. X
  291. X     if (xx>0) {
  292. X      amp=(float)((255+((float)rast[i])*8-8*32)/(255.0+(xr*xr+y*y)/150)+ \
  293. X         ((float)rast[i])/64.0-32/64.0);
  294. X      if (amp<(float)(0.0))amp=(float)0.0;
  295. X      rr=128; lr=128; cr=(rr+lr)/2; x=(int)(xx);
  296. X      if((x>=XMIN) && (x<=XMAX))r[x]=(float)((float)(r[x])+(float)(cr)*amp);
  297. X     }
  298. X     xr=xr+incr;
  299. X    }                        /* end calc red line */
  300. X
  301. X    while ((long)(xg)<(long)xcenter){            /* do calc green line */
  302. X     xx=xg+xcenter;
  303. X
  304. X
  305. X/*     incg=(float)PLANE+(((float)180.0-((float)abs(xg)+(float)abs(y)))/(float)18.0);
  306. X*/                        /* depth function (for green) */
  307. X  /*   if (incg<(float)PLANE)incg=(float)PLANE;
  308. X   */
  309. X    incg=(float)PLANE+sin(sqrt(xg*xg+y*y)/20.0+(float)t*pii/30.0)*2.0;
  310. X     if (xx>0) {
  311. X      amp=(float)((255+(rast[i])*8-8*32)/(255.0+(xg*xg+y*y)/150)+(rast[i])/64-32/64);
  312. X      if (amp<0) amp=(float)0.0;
  313. X      rg=128; lg=128; cg=(rg+lg)/2; x=(int)(xx);
  314. X      if((x>=XMIN) && (x<XMAX))g[x]=(float)((float)(g[x])+(float)(cg)*amp);
  315. X     }
  316. X     xg=xg+incg;
  317. X    }                        /* end calc green line */ 
  318. X
  319. X    while ((long)(xb)<(long)xcenter){            /* do calc blue line */
  320. X     xx=xb+xcenter;
  321. X
  322. X
  323. X  /*   incb=(float)PLANE; */            /* depth function (for blue) */
  324. X
  325. X     incb=(float)PLANE+sin(sqrt(xb*xb+y*y)/20.0+(float)t*pii/30.0)*2.0;
  326. X
  327. X     if (xx>0) {
  328. X      amp=(float)((255+(rast[i])*8-8*32)/(255.0+(xb*xb+y*y)/150)+(rast[i])/64-32/64);
  329. X      if (amp<0) amp=(float)0.0;
  330. X      rb=128; lb=128; cb=(rb+lb)/2; x=(int)(xx);
  331. X      if((x>=XMIN) && (x<XMAX))b[x]=(float)((float)(b[x])+(float)(cb)*amp);
  332. X     }
  333. X     xb=xb+incb;
  334. X    }                         /* end calc blue line */
  335. X   }                         /* end anti aliasing */
  336. X  }                        /* end process mikropixels */
  337. X
  338. X/* The rest is an easy part of the program: 
  339. X * we just check that the pixel to be drawn into outputbuffer
  340. X * is within drawing boundaries and then we scale the colour to
  341. X * rp,gp,bp into allowable limits.
  342. X */
  343. X  x=-xcenter;
  344. X  while (x<xcenter){                /* draw line by line */
  345. X   xx=(int)(x+xcenter);
  346. X   yp=(int)(y+ycenter);xp=(int)(x+xcenter);
  347. X   if ((yp>=YMIN)&&(yp<=YMAX-1)){
  348. X    if ((xp>=XMIN)&&(xp<=XMAX-1)){
  349. X     rp=(int)(r[(int)xx]/(AALIAS+1));    /* calc anti-aliased color in xp */
  350. X     gp=(int)(g[(int)xx]/(AALIAS+1));
  351. X     bp=(int)(b[(int)xx]/(AALIAS+1));
  352. X     if (rp>255) {rp=255;}        /* color range must be 0..255 for r,g,b */
  353. X    else if (rp<0) rp=0;
  354. X     if (gp>255) {gp=255;}
  355. X    else if (gp<0) gp=0;
  356. X     if (bp>255) {bp=255;}
  357. X    else if (bp<0) bp=0;
  358. X     if ((long)outptr>(long)BUFLEN-6){
  359. X      (void) fwrite((void *) out,1,outptr+1,outf1);
  360. X      outptr=-1;
  361. X     }
  362. X     outptr++;
  363. X     out[outptr]=(char)rp;
  364. X     outptr++;
  365. X     out[outptr]=(char)gp;
  366. X     outptr++;
  367. X     out[outptr]=(char)bp;
  368. X    }                         /* end y-range ok */
  369. X   }                        /* end x-range ok */
  370. X   x=x+1;                    /* next horizontal pixel */
  371. X  }                         /* end draw line */
  372. X }                        /* end main loop: process all lines */
  373. X (void) fwrite((void *) out,1,outptr+1,outf1);  /* dump partial buffer to a file */
  374. X fclose(outf1);
  375. X exit(0);
  376. X}/* main */
  377. END_OF_FILE
  378.   if test 13246 -ne `wc -c <'wave.c'`; then
  379.     echo shar: \"'wave.c'\" unpacked with wrong size!
  380.   fi
  381.   # end of 'wave.c'
  382. fi
  383. if test -f 'wave.readme' -a "${1}" != "-c" ; then 
  384.   echo shar: Will not clobber existing file \"'wave.readme'\"
  385. else
  386.   echo shar: Extracting \"'wave.readme'\" \(4681 characters\)
  387.   sed "s/^X//" >'wave.readme' <<'END_OF_FILE'
  388. XWaveSIRDham.readme
  389. X
  390. XIntro
  391. X=====
  392. X
  393. XThis 3D-SIRD (Single-Image-Random-Dot) animation shows a sinewave 
  394. Xgenerator in a plane. The waving plane can be seen behind or 
  395. Xinfront of the computer screen in all colours without glasses in 3D.
  396. XIf You are already familiar with SIRDs then it will ease 'seeing' it.
  397. X
  398. X
  399. XABOUT WaveSIRDham.anim5
  400. X=======================
  401. X
  402. XHere the waving plane is gray and there is one lamp in Your
  403. X'forehead'.  Generally the picture is a bit noisy due to
  404. Xrandom-dot dithering that causes the '3D feeling'.
  405. XIf You wanted to have an ordinary ray-traced picture or 
  406. Xstereo-pair from same position and lightning then You wouldn't 
  407. Xsee nothing more than a gray plane and the light from a lamp 
  408. Xnear it, that is no depth perception of any kind.
  409. X
  410. X'anim5' in filename corresponds to the anim5 format. 
  411. X'ham' corresponds to Hold-And-Modify picture format widely known
  412. Xin Amiga community.
  413. XYou can play the animation on X-terminal (with xanim) 
  414. Xwith 256-colours.
  415. X
  416. X    xanim WaveSIRDham.anim5
  417. X
  418. XThat will give a glue of what is in it or even better it can be shown 
  419. Xon any Amiga (with expanded memory up to 2 Mb) 
  420. Xwith couple of thousands of colours
  421. X
  422. X    showanim -c WaveSIRDham.anim5
  423. X
  424. X(Please forget about the flickering borders)
  425. X
  426. XThe frames of this animation have been drawn by a short portable (6k) 
  427. XANSI-C program 'wave.c' and could easily be included in almost any ray-tracer
  428. Xprogram. The improved algorithm uses antialiasing, a new dithering pattern 
  429. Xthat allows rescaling, gray-levels and colours to co-operate with SIRDs.
  430. XEvery frame in this animation has been rescaled from 640x400 to 320x200
  431. Xto demonstrate the rescalability properties and to save space.
  432. XActually 'wave.c' is a dirty hack with commandline I/O.
  433. X
  434. X
  435. XPROs and CONs
  436. X=============
  437. XThis animation drawn by a specific algorithm has
  438. X
  439. X+ True 3D vision in all viewable colours without glasses on any monitor
  440. X  (looks almost as good as colour-holograms except holograms do not move)
  441. X+ Antialiasing smooths depth-levels
  442. X+ Re-scalability (to a certain limit) affects antialiasing in the
  443. X  manner than in ordinary 2D pictures.
  444. X+ inbuilt dithering in graphics conversions = in reducing colourplanes
  445. X+ no additional hardware required to wiev/play in 3D.
  446. X
  447. X- Annoying noise (that luckily can be controlled)
  448. X- You must keep Your head still to maintain 3D-vision.
  449. X- You may see the picture drawn on the screen (2D) and not 'behind' it 
  450. X  or infront of it (3D) unless You let Your sight slide to near infinity or
  451. X  somewhere between You and the screen while focusing on (or through) 
  452. X  the screen.
  453. X- long rendering times (unless You happen to have supercomputer)
  454. X
  455. X
  456. XApplications, possibilities
  457. X===========================
  458. X
  459. XNow we are interested (aren't we) in real-world applications, 
  460. Xsuch as computer-tomography fronts end in hospital environment, 
  461. Xray-traced scene viewers at home computers,
  462. Xaltitude presentations of maps on a computer-screen or on
  463. Xposters, or true 3D TV-commercials, logos or whole 3D-movies
  464. Xlow-cost software based 3D virtual-world displays,
  465. Xmolecular 3D-modelling etc.
  466. X
  467. XIf You want to test 3D-TV right away and are already familiar with
  468. Xseeing SIRDs then try this:
  469. XIf You have a professional single-frame video recorder at Your hands
  470. Xand a computer with 24-bit video-output jacket then You may test 
  471. Xthe high-resolution SIRD-anim on video.
  472. XThe separate 640x400 jpeg frames are available on ftp site 
  473. Xat phoenix.oulu.fi in directory pub/incoming/ in files: frame* 
  474. Xfor a while or so. 
  475. XThis WaveSIRDham.anim5.lha is FTP:able from nic.funet.fi (128.214.6.100)
  476. Xin directory pub/amiga/graphics/animations/3d with a WaveSIRDham.reamde
  477. Xfile.
  478. X
  479. XA very good introduction into seeing SIRD-images (if You don't)
  480. Xcan be found in sunsite.unc.edu via FTP and change to the directory 
  481. Xpub/academic/computer-science/virtual-reality/3d
  482. X
  483. XI'm still looking for a good anim-player for this kind of animations.
  484. XIf You can find a suitable one, please let me know.
  485. X
  486. XLet's keep discussion in Alt.3d newsgroup (if any).
  487. X
  488. XIf You have any comments, questions or suggestions then
  489. Xplease send e-mail to:
  490. X
  491. Xkuru@jyu.fi
  492. XEsa Kuru
  493. X
  494. XGood Luck!
  495. X+-----------------------------------------------+
  496. X!       The future is here to stay now in       !
  497. X!                                               !
  498. X!              ----            ----             !
  499. X!             /    /           /    \           !
  500. X!                 /           /     /           !
  501. X!             ---    ----    /     /            !
  502. X!               /           /     /             !
  503. X!         /    /           /     /              !
  504. X!         ----           -------                !
  505. X!                                               !
  506. X+-----------------------------------------------+
  507. X
  508. END_OF_FILE
  509.   if test 4681 -ne `wc -c <'wave.readme'`; then
  510.     echo shar: \"'wave.readme'\" unpacked with wrong size!
  511.   fi
  512.   # end of 'wave.readme'
  513. fi
  514. echo shar: End of archive 1 \(of 1\).
  515. cp /dev/null ark1isdone
  516. MISSING=""
  517. for I in 1 ; do
  518.     if test ! -f ark${I}isdone ; then
  519.     MISSING="${MISSING} ${I}"
  520.     fi
  521. done
  522. if test "${MISSING}" = "" ; then
  523.     echo You have the archive.
  524.     rm -f ark[1-9]isdone
  525. else
  526.     echo You still must unpack the following archives:
  527.     echo "        " ${MISSING}
  528. fi
  529. exit 0
  530. exit 0 # Just in case...
  531.