From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- graphics/epix/camera.h | 134 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 graphics/epix/camera.h (limited to 'graphics/epix/camera.h') diff --git a/graphics/epix/camera.h b/graphics/epix/camera.h new file mode 100644 index 0000000000..87a3590db2 --- /dev/null +++ b/graphics/epix/camera.h @@ -0,0 +1,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 + * 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., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* + * A Camera has a location, orientation, lens, and color filter. The + * viewer sits at given from the , in the direction + * of the . The vectors and 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 */ -- cgit v1.2.3