1 /* 2 * Copyright (C) 2010-2011 Dmitry Marakasov 3 * 4 * This file is part of glosm. 5 * 6 * glosm is free software: you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation, either version 3 of the License, or 9 * (at your option) any later version. 10 * 11 * glosm is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with glosm. If not, see <http://www.gnu.org/licenses/>. 18 */ 19 20 #ifndef VIEWER_HH 21 #define VIEWER_HH 22 23 #include <glosm/Math.hh> 24 25 class Projection; 26 27 /** 28 * Abstract base class for all viewers. 29 * 30 * Viewer is a way to represent which part of map we need to render. 31 * For example, for first-person viewer that may be eye's position 32 * and look direction. This class is used in rendering process to 33 * properly setup projection matrix and in layers to determine which 34 * objects are close enough to eye to be loaded and displayed. 35 */ 36 class Viewer { 37 public: 38 /** 39 * Setups OpenGL projection matrix for the viewer 40 * 41 * @param projection projection used in this world 42 */ 43 virtual void SetupViewerMatrix(const Projection& projection) const = 0; 44 45 /** 46 * Returns pseudo-position of a viewer. 47 * 48 * @param projection projection used in the world 49 * @return pseudo-position of a viewer 50 */ 51 virtual Vector3i GetPos(const Projection& projection) const = 0; 52 }; 53 54 #endif 55