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

Comparing ray/src/hd/rhdobj.c (file contents):
Revision 3.2 by gwlarson, Fri Aug 21 11:38:22 1998 UTC vs.
Revision 3.3 by gwlarson, Tue Aug 25 18:10:12 1998 UTC

# Line 482 | Line 482 | register char  *args;
482                  dobj_unmove();
483                  break;
484          case DO_OBJECT:                         /* print object statistics */
485 <                dobj_putstats(na ? alist[0] : curname, sstdout);
485 >                if (dobj_putstats(na ? alist[0] : curname, sstdout))
486 >                        if (na && alist[0][0] != '*' &&
487 >                                        strcmp(alist[0], curname))
488 >                                savedxf(curobj = getdobj(alist[0]));
489                  break;
490          case DO_DUP:                            /* duplicate object */
491                  for (nn = 0; nn < na; nn++)
# Line 506 | Line 509 | register char  *args;
509                          dobj_xform(curname, 1, na-nn, alist+nn);
510                  else
511                          curobj->drawcode = DO_HIDE;
512 +                savedxf(curobj);
513                  break;
514          case DO_SHOW:                           /* change rendering option */
515          case DO_LIGHT:
# Line 542 | Line 546 | char   *oct, *nam;
546                  error(COMMAND, "illegal name");
547                  return(0);
548          }
549 +        if (getdobj(nam) != NULL) {
550 +                error(COMMAND, "name already taken (unload first)");
551 +                return(0);
552 +        }
553                                          /* get octree path */
554          if ((fpp = getpath(oct, getlibpath(), R_OK)) == NULL) {
555                  sprintf(errmsg, "cannot find octree \"%s\"", oct);
# Line 549 | Line 557 | char   *oct, *nam;
557                  return(0);
558          }
559          strcpy(fpath, fpp);
552        freedobj(getdobj(nam));         /* free previous use of nam */
560          op = (DOBJECT *)malloc(sizeof(DOBJECT));
561          if (op == NULL)
562                  error(SYSTEM, "out of memory in dobj_load");
# Line 664 | Line 671 | FILE   *fp;
671          }
672          getdcent(ocent, op);
673          fprintf(fp, "%s: %s, center [%f %f %f], radius %f", op->name,
674 <                        op->drawcode==DO_HIDE ? "hid" :
675 <                        op->drawcode==DO_LIGHT && op->ol!=NULL ? "lit" :
674 >                        op->drawcode==DO_HIDE ? "hidden" :
675 >                        op->drawcode==DO_LIGHT && op->ol!=NULL ? "lighted" :
676                          "shown",
677                          ocent[0],ocent[1],ocent[2], getdrad(op));
678          if (op->xfac)
# Line 724 | Line 731 | char   *oldnm, *nam;
731                  error(COMMAND, "illegal name");
732                  return(0);
733          }
734 +        if (getdobj(nam) != NULL) {
735 +                error(COMMAND, "name already taken (unload first)");
736 +                return(0);
737 +        }
738                                          /* allocate and copy struct */
739          opdup = (DOBJECT *)malloc(sizeof(DOBJECT));
740          if (opdup == NULL)
# Line 786 | Line 797 | FVECT   rorg, rdir;
797          register DOBJECT        *op;
798          FVECT   xorg, xdir;
799          double  darr[6];
800 <
800 >                                        /* check each visible object? */
801          if (nm == NULL || *nm == '*') {
802                  double  dist, mindist = 1.01*FHUGE;
803 <                                        /* check each visible object */
803 >
804 >                if (nm != NULL) nm[0] = '\0';
805                  for (op = dobjects; op != NULL; op = op->next) {
806                          if (op->drawcode == DO_HIDE)
807                                  continue;
808                          dist = dobj_trace(op->name, rorg, rdir);
809                          if (dist < mindist) {
810 <                                dist = mindist;
811 <                                if (nm != NULL)
800 <                                        strcpy(nm, op->name);
810 >                                if (nm != NULL) strcpy(nm, op->name);
811 >                                mindist = dist;
812                          }
813                  }
814                  return(mindist);
# Line 807 | Line 818 | FVECT   rorg, rdir;
818                  error(COMMAND, "unknown object");
819                  return(FHUGE);
820          }
821 <        if (op->xfac) {         /* transform ray */
821 >        if (op->xfac) {         /* put ray in local coordinates */
822                  multp3(xorg, rorg, op->xfb.b.xfm);
823                  multv3(xdir, rdir, op->xfb.b.xfm);
824                  VCOPY(darr, xorg); VCOPY(darr+3, xdir);
# Line 821 | Line 832 | FVECT   rorg, rdir;
832                                  /* return distance */
833          if (darr[0] >= .99*FHUGE)
834                  return(FHUGE);
835 <        return(darr[0] * op->xfb.f.sca);
835 >        return(darr[0]*op->xfb.f.sca);
836   }
837  
838  
# Line 887 | Line 898 | dobj_render()                  /* render our objects in OpenGL */
898                                  glLightfv(glightid[i], GL_AMBIENT, vec);
899                                  glEnable(glightid[i]);
900                          }
901 <                } else {                        /* no sources to draw on */
901 >                } else {                        /* fake lighting */
902                          vec[0] = vec[1] = vec[2] = 0.; vec[3] = 1.;
903                          glLightModelfv(GL_LIGHT_MODEL_AMBIENT, vec);
904                          getdcent(v1, op);
# Line 937 | Line 948 | dobj_render()                  /* render our objects in OpenGL */
948                  else
949                          glDisable(GL_LIGHT0);
950                                          /* check errors */
940                rgl_checkerr("rendering object in dobj_render");
951          }
952          glPopAttrib();                  /* restore rendering params */
953 +        rgl_checkerr("rendering objects in dobj_render");
954          return(1);
955   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines