/usr/include/epix/camera.h is in epix 1.2.18-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 | /*
* camera.h -- ePiX::Camera
*
* This file is part of ePiX, a C++ library for creating high-quality
* figures in LaTeX
*
* Version 1.1.21
* Last Change: September 22, 2007
*
*
* Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007
* Andrew D. Hwang <rot 13 nujnat at zngupf dot ubylpebff dot rqh>
* Department of Mathematics and Computer Science
* College of the Holy Cross
* Worcester, MA, 01610-2395, USA
*
*
* ePiX is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* ePiX is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
* License for more details.
*
* You should have received a copy of the GNU General Public License
* along with ePiX; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/*
* A Camera has a location, orientation, lens, and color filter. The
* viewer sits at given <distance> from the <target>, in the direction
* of the <eye>. The vectors <sea> and <sky> point horizontally to the
* right and vertically upward on the screen. The viewing angle is
* controlled by changing the viewer, target, and/or the distance
* between them.
*
* The implementation data comprise:
* - a frame ({sea, sky, eye}, with the intuitive meanings:)
* - a viewpoint
* - a target (at the center of the field of view)
* - the distance from the viewpoint to the target
* - a "filter" color, Neutral by default, for color separation, etc.
* - a Lens
*
* A Lens is a mapping P -> pair. In the implementation, the Camera
* ("body") passes the orientation, target, and distance to the Lens
* operator.
*/
#ifndef EPIX_CAMERA
#define EPIX_CAMERA
#include "triples.h"
#include "frame.h"
#include "Color.h"
namespace ePiX {
class halfspace;
class Lens;
class pair;
class Camera {
public:
Camera();
Camera(const P& vpt);
Camera(const Camera&);
Camera& operator= (const Camera&);
~Camera();
// rotate
Camera& tilt(double angle); // up/down (pitch)
Camera& pan(double angle); // left/right (yaw)
Camera& roll(double angle); // about viewing axis
// fix target, move viewpt radially along eye()
Camera& range(double);
// fix viewpt, move target radially along eye()
Camera& focus(double);
// set clip distance
Camera& clip_range(double);
Camera& at(const P& arg); // fix target, set viewpt
Camera& look_at(const P& arg); // fix viewpt, set target
// alternative syntax
Camera& at(double, double, double);
Camera& look_at(double, double, double);
Camera& filter(const Color&);
// set lens
Camera& perspective(); // default
Camera& orthog(); // faster
Camera& fisheye();
Camera& bubble();
// Functions for internal use
// Camera maps
Color operator() (const Color&) const; // filter
pair operator() (const P&) const; // lens map
bool is_linear() const; // lens preserves lines?
bool needs_clip() const; // lens needs scene pre-clipping
halfspace clip_plane() const;
// situation
P eye() const;
P viewpt() const;
private:
P the_viewpt; // center of projection
P the_target; // mapped to Screen origin
frame the_orient; // our {sea, sky, eye}
double the_distance;
double the_clip_range;
Color the_filter;
void adjust(); // re-orient according to target, viewpt
Lens* the_lens;
}; // end of class Camera
// global Camera
Camera& cam();
extern Camera& camera;
} // end of namespace
#endif /* EPIX_CAMERA */
|