| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321 |
- /****************************************************************************
- * camera.c
- *
- * This module implements methods for managing the viewpoint.
- *
- * from Persistence of Vision(tm) Ray Tracer
- * Copyright 1996,1999 Persistence of Vision Team
- *---------------------------------------------------------------------------
- * NOTICE: This source code file is provided so that users may experiment
- * with enhancements to POV-Ray and to port the software to platforms other
- * than those supported by the POV-Ray Team. There are strict rules under
- * which you are permitted to use this file. The rules are in the file
- * named POVLEGAL.DOC which should be distributed with this file.
- * If POVLEGAL.DOC is not available or for more info please contact the POV-Ray
- * Team Coordinator by email to team-coord@povray.org or visit us on the web at
- * http://www.povray.org. The latest version of POV-Ray may be found at this site.
- *
- * This program is based on the popular DKB raytracer version 2.12.
- * DKBTrace was originally written by David K. Buck.
- * DKBTrace Ver 2.0-2.12 were written by David K. Buck & Aaron A. Collins.
- *
- *****************************************************************************/
- #include "frame.h"
- #include "vector.h"
- #include "povproto.h"
- #include "camera.h"
- #include "matrices.h"
- #include "normal.h"
- /*****************************************************************************
- *
- * FUNCTION
- *
- * Translate_Camera
- *
- * INPUT
- *
- * OUTPUT
- *
- * RETURNS
- *
- * AUTHOR
- *
- * POV-Ray Team
- *
- * DESCRIPTION
- *
- * -
- *
- * CHANGES
- *
- * -
- *
- ******************************************************************************/
- void Translate_Camera(CAMERA *Camera, VECTOR Vector)
- {
- VAddEq(((CAMERA *)Camera)->Location, Vector);
- }
- /*****************************************************************************
- *
- * FUNCTION
- *
- * Rotate_Camera
- *
- * INPUT
- *
- * OUTPUT
- *
- * RETURNS
- *
- * AUTHOR
- *
- * POV-Ray Team
- *
- * DESCRIPTION
- *
- * -
- *
- * CHANGES
- *
- * -
- *
- ******************************************************************************/
- void Rotate_Camera(CAMERA *Camera, VECTOR Vector)
- {
- TRANSFORM Trans;
-
- Compute_Rotation_Transform(&Trans, Vector);
-
- Transform_Camera(Camera, &Trans);
- }
- /*****************************************************************************
- *
- * FUNCTION
- *
- * Scale_Camera
- *
- * INPUT
- *
- * OUTPUT
- *
- * RETURNS
- *
- * AUTHOR
- *
- * POV-Ray Team
- *
- * DESCRIPTION
- *
- * -
- *
- * CHANGES
- *
- * -
- *
- ******************************************************************************/
- void Scale_Camera(CAMERA *Camera, VECTOR Vector)
- {
- TRANSFORM Trans;
-
- Compute_Scaling_Transform(&Trans, Vector);
-
- Transform_Camera(Camera, &Trans);
- }
- /*****************************************************************************
- *
- * FUNCTION
- *
- * Transform_Camera
- *
- * INPUT
- *
- * OUTPUT
- *
- * RETURNS
- *
- * AUTHOR
- *
- * POV-Ray Team
- *
- * DESCRIPTION
- *
- * -
- *
- * CHANGES
- *
- * -
- *
- ******************************************************************************/
- void Transform_Camera(CAMERA *Camera, TRANSFORM *Trans)
- {
- MTransPoint(Camera->Location, Camera->Location, Trans);
-
- MTransPoint(Camera->Direction, Camera->Direction, Trans);
-
- MTransPoint(Camera->Up, Camera->Up, Trans);
-
- MTransPoint(Camera->Right, Camera->Right, Trans);
- }
- /*****************************************************************************
- *
- * FUNCTION
- *
- * Create_Camera
- *
- * INPUT
- *
- * OUTPUT
- *
- * RETURNS
- *
- * AUTHOR
- *
- * POV-Ray Team
- *
- * DESCRIPTION
- *
- * -
- *
- * CHANGES
- *
- * -
- *
- ******************************************************************************/
- CAMERA *Create_Camera()
- {
- CAMERA *New;
-
- New = (CAMERA *)POV_MALLOC(sizeof (CAMERA), "camera");
-
- Make_Vector(New->Location, 0.0, 0.0, 0.0);
- Make_Vector(New->Direction, 0.0, 0.0, 1.0);
- Make_Vector(New->Up, 0.0, 1.0, 0.0);
- Make_Vector(New->Right, 1.33, 0.0, 0.0);
- Make_Vector(New->Sky, 0.0, 1.0, 0.0);
- Make_Vector(New->Look_At, 0.0, 0.0, 1.0);
- /* Init focal blur stuff (not used by default). */
- New->Blur_Samples = 0;
- New->Confidence = 0.9;
- New->Variance = 1.0 / 128.0;
- New->Aperture = 0.0;
- New->Focal_Distance = -1.0;
- /* Set default camera type and viewing angle. [DB 7/94] */
- New->Type = PERSPECTIVE_CAMERA;
- New->Angle = 90.0;
- /* Do not perturb primary rays by default. [DB 7/94] */
- New->Tnormal = NULL;
- return (New);
- }
- /*****************************************************************************
- *
- * FUNCTION
- *
- * Copy_Camera
- *
- * INPUT
- *
- * OUTPUT
- *
- * RETURNS
- *
- * AUTHOR
- *
- * POV-Ray Team
- *
- * DESCRIPTION
- *
- * -
- *
- * CHANGES
- *
- * -
- *
- ******************************************************************************/
- CAMERA *Copy_Camera(CAMERA *Old)
- {
- CAMERA *New;
- if (Old != NULL)
- {
- New = Create_Camera();
- *New = *Old;
- }
- else
- {
- New = NULL;
- }
- return (New);
- }
- /*****************************************************************************
- *
- * FUNCTION
- *
- * Destroy_Camera
- *
- * INPUT
- *
- * OUTPUT
- *
- * RETURNS
- *
- * AUTHOR
- *
- * Dieter Bayer
- *
- * DESCRIPTION
- *
- * -
- *
- * CHANGES
- *
- * -
- *
- ******************************************************************************/
- void Destroy_Camera(CAMERA *Camera)
- {
- if (Camera != NULL)
- {
- Destroy_Tnormal(Camera->Tnormal);
- POV_FREE(Camera);
- }
- }
|