1 /** 2 * Mandelbulber v2, a 3D fractal generator ,=#MKNmMMKmmßMNWy, 3 * ,B" ]L,,p%%%,,,§;, "K 4 * Copyright (C) 2014-21 Mandelbulber Team §R-==%w["'~5]m%=L.=~5N 5 * ,=mm=§M ]=4 yJKA"/-Nsaj "Bw,==,, 6 * This file is part of Mandelbulber. §R.r= jw",M Km .mM FW ",§=ß., ,TN 7 * ,4R =%["w[N=7]J '"5=],""]]M,w,-; T=]M 8 * Mandelbulber is free software: §R.ß~-Q/M=,=5"v"]=Qf,'§"M= =,M.§ Rz]M"Kw 9 * you can redistribute it and/or §w "xDY.J ' -"m=====WeC=\ ""%""y=%"]"" § 10 * modify it under the terms of the "§M=M =D=4"N #"%==A%p M§ M6 R' #"=~.4M 11 * GNU General Public License as §W =, ][T"]C § § '§ e===~ U !§[Z ]N 12 * published by the 4M",,Jm=,"=e~ § § j]]""N BmM"py=ßM 13 * Free Software Foundation, ]§ T,M=& 'YmMMpM9MMM%=w=,,=MT]M m§;'§, 14 * either version 3 of the License, TWw [.j"5=~N[=§%=%W,T ]R,"=="Y[LFT ]N 15 * or (at your option) TW=,-#"%=;[ =Q:["V"" ],,M.m == ]N 16 * any later version. J§"mr"] ,=,," =="""J]= M"M"]==ß" 17 * §= "=C=4 §"eM "=B:m|4"]#F,§~ 18 * Mandelbulber is distributed in "9w=,,]w em%wJ '"~" ,=,,ß" 19 * the hope that it will be useful, . "K= ,=RMMMßM""" 20 * but WITHOUT ANY WARRANTY; .''' 21 * without even the implied warranty 22 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 23 * 24 * See the GNU General Public License for more details. 25 * You should have received a copy of the GNU General Public License 26 * along with Mandelbulber. If not, see <http://www.gnu.org/licenses/>. 27 * 28 * ########################################################################### 29 * 30 * Authors: Krzysztof Marczak (buddhi1980@gmail.com) 31 * 32 * cCameraTarget class - manipulation of camera and target coordinates and rotation 33 */ 34 35 #ifndef MANDELBULBER2_SRC_CAMERA_TARGET_HPP_ 36 #define MANDELBULBER2_SRC_CAMERA_TARGET_HPP_ 37 38 #include "algebra.hpp" 39 40 class cCameraTarget 41 { 42 public: 43 enum enumRotationMode 44 { 45 constantRoll, 46 constantTop 47 }; 48 49 cCameraTarget(); 50 cCameraTarget(CVector3 _camera, CVector3 _target, CVector3 _top); 51 void SetCameraTargetRotation(CVector3 _camera, CVector3 _target, double roll); 52 void SetCameraTargetTop(CVector3 _camera, CVector3 _target, CVector3 _top); 53 void SetCamera(CVector3 _camera, enumRotationMode mode); 54 void SetTarget(CVector3 _target, enumRotationMode mode); GetCamera() const55 CVector3 GetCamera() const { return camera; } GetTarget() const56 CVector3 GetTarget() const { return target; } GetRotation() const57 CVector3 GetRotation() const { return CVector3(yaw, pitch, roll); } GetForwardVector() const58 CVector3 GetForwardVector() const { return forwardVector; } GetTopVector() const59 CVector3 GetTopVector() const { return topVector; } GetRightVector() const60 CVector3 GetRightVector() const { return rightVector; } GetDistance() const61 double GetDistance() const { return distance; } CorrectAngle(double angle)62 static double CorrectAngle(double angle) { return fmod(angle + 3 * M_PI, 2 * M_PI) - M_PI; } 63 64 private: 65 CVector3 camera; 66 CVector3 target; 67 68 double yaw; 69 double pitch; 70 double roll; 71 double distance; 72 CVector3 forwardVector; 73 CVector3 topVector; 74 CVector3 rightVector; 75 76 // probably should be implemented vector which will indicate actual top direction! 77 }; 78 79 #endif /* MANDELBULBER2_SRC_CAMERA_TARGET_HPP_ */ 80