// -*- C++ -*-
#ifndef RIORTHOCAMERA_H
#define RIORTHOCAMERA_H
/* Copyright 1996 
 * Mon Nov 17 17:02:34 1997  Brian Smits  (bes@phoenix.cs.utah.edu)
 * 
 * RiOrthoCamera.H
 * 
 *	
 * 
 * $Id: RiOrthoCamera.H,v 1.1 1997/11/18 01:15:23 bes Exp $ 
 * 
 */
#ifndef RICOMMON_H
#include <RiCommon.H>
#endif

#ifndef RICAMERA_H
#include <RiCamera.H>
#endif

/***************************************************************
CLASS
    RiOrthoCamera
     <one line summary> 

DESCRIPTION
     <Detailed description with any warnings>

****************************************************************/

class RiOrthoCamera : public RiRayCamera {
  public:
				// GROUP: Constructors and assignment
				//// Default Constructor
				//  eye (0,0,0)  
				//  viewDir (0,1,0) Direction of viewing rays
				//  uDir (1,0,0) Vector from center to right edge.  Image goes
				//      from -uDir to uDir
				//  vDir (0,0,1) Vector from center to top edge.  Image goes
				//      from -vDir to vDir
				//  front (0)
    RiOrthoCamera();
				//// General Constructor
				// [in] eye  Center of the image plane
				// [in] viewDir Direction of viewing rays
				// [in] uDir Vector from center to right edge.  Image goes
				//      from -uDir to uDir
				// [in] vDir Vector from center to top edge.  Image goes
				//      from -vDir to vDir
				// [in] front front clipping plane in world units, not affected by the matrix.
    RiOrthoCamera(const RiVector3 &eye, const RiVector3 &viewDir,
		  const RiVector3 &uDir, const RiVector3 &vDir, RiReal front = 0);
				// GROUP: Members
				//// general manipulation of the camera.  Some cameras may
				// not allow a scale or perhaps even a rotation (Cylindrical panoramic),
				// these need to catch or ignore this component of the matrix.
    virtual void Transform(const RiAffineTMatrix3 &);
				//// Screen coord is in the range[0,1]^2.
                                //  (0,0) is lower-left corner.  lensCoord
                                // is a seed in [0,1]^2 for lens sampling and is ignored for this RiRayCamera
    virtual RiRay3 GetRay( const RiVector2& screenCoord, const RiVector2& lensCoord ) const;
  private:
    RiVector3 eye, viewDir;
    RiVector3 uDir, vDir;
    RiReal front;
    RiReal scaledFront;
};

#endif /* RIORTHOCAMERA_H */

