ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/util/ranimove1.c
(Generate patch)

Comparing ray/src/util/ranimove1.c (file contents):
Revision 3.8 by schorsch, Fri Mar 26 21:36:20 2004 UTC vs.
Revision 3.13 by greg, Thu Apr 17 14:44:25 2008 UTC

# Line 4 | Line 4 | static const char      RCSid[] = "$Id$";
4   /*
5   *  ranimove1.c
6   *
7 < *  Basic frame rendering routines for ranimate(1).
7 > *  Basic frame rendering routines for ranimove(1).
8   *
9   *  Created by Gregory Ward on Wed Jan 08 2003.
10   */
# Line 367 | Line 367 | init_frame_sample(void)                /* sample our initial frame *
367                          continue;
368                  }
369                  if (!sample_here(x, y)) {       /* just cast */
370 <                        rayorigin(&ir, NULL, PRIMARY, 1.0);
370 >                        rayorigin(&ir, PRIMARY, NULL, NULL);
371                          if (!localhit(&ir, &thescene)) {
372                                  if (ir.ro != &Aftplane)
373                                          sourcehit(&ir);
# Line 385 | Line 385 | init_frame_sample(void)                /* sample our initial frame *
385                  }
386                  if (nprocs > 1) {               /* get sample */
387                          int     rval;
388 <                        rayorigin(&ir, NULL, PRIMARY, 1.0);
388 >                        rayorigin(&ir, PRIMARY, NULL, NULL);
389                          ir.rno = n;
390                          rval = ray_pqueue(&ir);
391                          if (!rval)
# Line 658 | Line 658 | extern void
658   init_frame(void)                        /* render base (low quality) frame */
659   {
660          int     restart;
661
661                                          /* allocate/swap buffers */
662          next_frame();
663                                          /* check rendering status */
# Line 667 | Line 666 | init_frame(void)                       /* render base (low quality) frame
666                  restart = -1;
667          if (restart > 0) {
668                  if (nprocs > 1)
669 <                        ray_pdone(1);
669 >                        ray_pdone(0);
670                  else
671 <                        ray_done(1);
671 >                        ray_done(0);
672          }
673                                          /* post low quality parameters */
674          if (curparams != &lorendparams)
# Line 745 | Line 744 | filter_frame(void)                     /* interpolation, motion-blur, an
744                  printf("\tFiltering frame\n");
745                  fflush(stdout);
746          }
747 <        /* normalize samples */
748 <        for (y = vres; y--; ) {
749 <                for (x = hres; x--; ) {
750 <                        n = fndx(x, y);
751 <                        if (sbuffer[n] <= 1)
747 >                                        /* normalize samples */
748 >        for (y = vres; y--; )
749 >            for (x = hres; x--; ) {
750 >                n = fndx(x, y);
751 >                if (sbuffer[n] <= 1)
752 >                        continue;
753 >                w = 1.0/(double)sbuffer[n];
754 >                scalecolor(cbuffer[n], w);
755 >            }
756 >                                        /* interpolate samples */
757 >        for (y = vres; y--; )
758 >            for (x = hres; x--; ) {
759 >                n = fndx(x, y);
760 >                if (sbuffer[n])
761 >                        continue;
762 >                nc = getclosest(neigh, NPINTERP, x, y);
763 >                setcolor(cbuffer[n], 0., 0., 0.);
764 >                if (nc <= 0) {          /* no acceptable neighbors */
765 >                        if (y < vres-1)
766 >                                nc = fndx(x, y+1);
767 >                        else if (x < hres-1)
768 >                                nc = fndx(x+1, y);
769 >                        else
770                                  continue;
771 <                        w = 1.0/(double)sbuffer[n];
772 <                        scalecolor(cbuffer[n], w);
771 >                        copycolor(cbuffer[n], cbuffer[nc]);
772 >                        continue;
773                  }
774 <        }
775 <        /* interpolate samples */
776 <        for (y = vres; y--; ) {
777 <                for (x = hres; x--; ) {
778 <                        n = fndx(x, y);
779 <                        if (sbuffer[n])
780 <                                continue;
781 <                        nc = getclosest(neigh, NPINTERP, x, y);
765 <                        setcolor(cbuffer[n], 0., 0., 0.);
766 <                        wsum = 0.;
767 <                        while (nc-- > 0) {
768 <                                copycolor(cval, cbuffer[neigh[nc]]);
769 <                                w = sample_wt((neigh[nc]%hres) - x,
770 <                                                (neigh[nc]/hres) - y);
771 <                                scalecolor(cval, w);
772 <                                addcolor(cbuffer[n], cval);
773 <                                wsum += w;
774 <                        }
775 <                        if (wsum > FTINY) {
776 <                                w = 1.0/wsum;
777 <                                scalecolor(cbuffer[n], w);
778 <                        }
774 >                wsum = 0.;
775 >                while (nc-- > 0) {
776 >                        copycolor(cval, cbuffer[neigh[nc]]);
777 >                        w = sample_wt((neigh[nc]%hres) - x,
778 >                                        (neigh[nc]/hres) - y);
779 >                        scalecolor(cval, w);
780 >                        addcolor(cbuffer[n], cval);
781 >                        wsum += w;
782                  }
783 <        }
784 <        /* motion blur if requested */
783 >                w = 1.0/wsum;
784 >                scalecolor(cbuffer[n], w);
785 >            }
786 >                                        /* motion blur if requested */
787          if (mblur > .02) {
788 <            int xs, ys, xl, yl;
789 <            int rise, run;
790 <            long        rise2, run2;
791 <            int n2;
792 <            int cnt;
793 <            /* sum in motion streaks */
794 <            memset(outbuffer, '\0', sizeof(COLOR)*hres*vres);
795 <            memset(wbuffer, '\0', sizeof(float)*hres*vres);
796 <            for (y = vres; y--; ) {
797 <                for (x = hres; x--; ) {
788 >                int     xs, ys, xl, yl;
789 >                int     rise, run;
790 >                long    rise2, run2;
791 >                int     n2;
792 >                int     cnt;
793 >                                        /* sum in motion streaks */
794 >                memset(outbuffer, '\0', sizeof(COLOR)*hres*vres);
795 >                memset(wbuffer, '\0', sizeof(float)*hres*vres);
796 >                for (y = vres; y--; )
797 >                    for (x = hres; x--; ) {
798                          n = fndx(x, y);
799                          if (xmbuffer[n] == MO_UNK) {
800                                  run = rise = 0;
# Line 810 | Line 815 | filter_frame(void)                     /* interpolation, motion-blur, an
815                          else ys = 1;
816                          rise2 = run2 = 0L;
817                          if (rise > run) {
818 <                            cnt = rise + 1;
819 <                            w = 1./cnt;
820 <                            copycolor(cval, cbuffer[n]);
821 <                            scalecolor(cval, w);
822 <                            while (cnt) {
823 <                                if (rise2 >= run2) {
824 <                                    if ((xl >= 0) & (xl < hres) &
818 >                                cnt = rise + 1;
819 >                                w = 1./cnt;
820 >                                copycolor(cval, cbuffer[n]);
821 >                                scalecolor(cval, w);
822 >                                while (cnt)
823 >                                        if (rise2 >= run2) {
824 >                                                if ((xl >= 0) & (xl < hres) &
825                                                      (yl >= 0) & (yl < vres)) {
826 <                                            n2 = fndx(xl, yl);
827 <                                            addcolor(outbuffer[n2], cval);
828 <                                            wbuffer[n2] += w;
829 <                                    }
830 <                                    yl += ys;
831 <                                    run2 += run;
832 <                                    cnt--;
833 <                                } else {
834 <                                        xl += xs;
835 <                                        rise2 += rise;
836 <                                }
837 <                            }
826 >                                                        n2 = fndx(xl, yl);
827 >                                                        addcolor(outbuffer[n2],
828 >                                                                        cval);
829 >                                                        wbuffer[n2] += w;
830 >                                                }
831 >                                                yl += ys;
832 >                                                run2 += run;
833 >                                                cnt--;
834 >                                        } else {
835 >                                                xl += xs;
836 >                                                rise2 += rise;
837 >                                        }
838                          } else {
839                                  cnt = run + 1;
840                                  w = 1./cnt;
841                                  copycolor(cval, cbuffer[n]);
842                                  scalecolor(cval, w);
843 <                                while (cnt) {
844 <                                    if (run2 >= rise2) {
845 <                                        if ((xl >= 0) & (xl < hres) &
843 >                                while (cnt)
844 >                                        if (run2 >= rise2) {
845 >                                                if ((xl >= 0) & (xl < hres) &
846                                                      (yl >= 0) & (yl < vres)) {
847 <                                                n2 = fndx(xl, yl);
848 <                                                addcolor(outbuffer[n2],
849 <                                                                cval);
850 <                                                wbuffer[n2] += w;
847 >                                                        n2 = fndx(xl, yl);
848 >                                                        addcolor(outbuffer[n2],
849 >                                                                        cval);
850 >                                                        wbuffer[n2] += w;
851 >                                                }
852 >                                                xl += xs;
853 >                                                rise2 += rise;
854 >                                                cnt--;
855 >                                        } else {
856 >                                                yl += ys;
857 >                                                run2 += run;
858                                          }
847                                        xl += xs;
848                                        rise2 += rise;
849                                        cnt--;
850                                    } else {
851                                            yl += ys;
852                                            run2 += run;
853                                    }
854                                }
859                          }
860 <                }
861 <                /* compute final results */
862 <                for (y = vres; y--; ) {
863 <                        for (x = hres; x--; ) {
864 <                                n = fndx(x, y);
865 <                                if (wbuffer[n] <= FTINY)
866 <                                        continue;
867 <                                w = 1./wbuffer[n];
868 <                                scalecolor(outbuffer[n], w);
869 <                        }
870 <                }
871 <            }
868 <        } else {
869 <                for (n = hres*vres; n--; ) {
860 >                    }
861 >                                        /* compute final results */
862 >                for (y = vres; y--; )
863 >                    for (x = hres; x--; ) {
864 >                        n = fndx(x, y);
865 >                        if (wbuffer[n] <= FTINY)
866 >                                continue;
867 >                        w = 1./wbuffer[n];
868 >                        scalecolor(outbuffer[n], w);
869 >                    }
870 >        } else
871 >                for (n = hres*vres; n--; )
872                          copycolor(outbuffer[n], cbuffer[n]);
871                }
872        }
873          /*
874             for (n = hres*vres; n--; )
875 <           if (!sbuffer[n])
876 <           setcolor(outbuffer[n], 0., 0., 0.);
875 >                   if (!sbuffer[n])
876 >                           setcolor(outbuffer[n], 0., 0., 0.);
877           */
878          /* adjust exposure */
879          if ((expval < 0.99) | (expval > 1.01))
880                  for (n = hres*vres; n--; )
881                          scalecolor(outbuffer[n], expval);
882 <        return;
882 > #if 0
883          {
884                  float   *sbuf = (float *)malloc(sizeof(float)*hres*vres);
885                  char    fnm[256];
# Line 890 | Line 890 | filter_frame(void)                     /* interpolation, motion-blur, an
890                  write_map(sbuf, fnm);
891                  free((void *)sbuf);
892          }
893 + #endif
894   }
895  
896  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines