Panda3D
|
00001 // Filename: pSphereLens.h 00002 // Created by: drose (12Dec01) 00003 // 00004 //////////////////////////////////////////////////////////////////// 00005 // 00006 // PANDA 3D SOFTWARE 00007 // Copyright (c) Carnegie Mellon University. All rights reserved. 00008 // 00009 // All use of this software is subject to the terms of the revised BSD 00010 // license. You should have received a copy of this license along 00011 // with this source code in a file named "LICENSE." 00012 // 00013 //////////////////////////////////////////////////////////////////// 00014 00015 #ifndef PSPHERELENS_H 00016 #define PSPHERELENS_H 00017 00018 #include "pandabase.h" 00019 00020 #include "lens.h" 00021 00022 //////////////////////////////////////////////////////////////////// 00023 // Class : PSphereLens 00024 // Description : A PSphereLens is a special nonlinear lens that 00025 // doesn't correspond to any real physical lenses. It's 00026 // primarily useful for generating 360-degree wraparound 00027 // images while avoiding the distortion associated with 00028 // fisheye images. 00029 // 00030 // A PSphereLens is similar to a cylindrical lens, 00031 // except it is also curved in the vertical direction. 00032 // This allows it to extend to both poles in the 00033 // vertical direction. The mapping is similar to what 00034 // many modeling packages call a sphere mapping: the x 00035 // coordinate is proportional to azimuth, while the y 00036 // coordinate is proportional to altitude. 00037 //////////////////////////////////////////////////////////////////// 00038 class EXPCL_PANDAFX PSphereLens : public Lens { 00039 PUBLISHED: 00040 INLINE PSphereLens(); 00041 00042 public: 00043 INLINE PSphereLens(const PSphereLens ©); 00044 INLINE void operator = (const PSphereLens ©); 00045 00046 public: 00047 virtual PT(Lens) make_copy() const; 00048 00049 protected: 00050 virtual bool do_extrude(const Lens::CData *lens_cdata, const LPoint3 &point2d, 00051 LPoint3 &near_point, LPoint3 &far_point) const; 00052 virtual bool do_project(const Lens::CData *lens_cdata, 00053 const LPoint3 &point3d, LPoint3 &point2d) const; 00054 00055 virtual PN_stdfloat fov_to_film(PN_stdfloat fov, PN_stdfloat focal_length, bool horiz) const; 00056 virtual PN_stdfloat fov_to_focal_length(PN_stdfloat fov, PN_stdfloat film_size, bool horiz) const; 00057 virtual PN_stdfloat film_to_fov(PN_stdfloat film_size, PN_stdfloat focal_length, bool horiz) const; 00058 00059 public: 00060 virtual TypeHandle get_type() const { 00061 return get_class_type(); 00062 } 00063 virtual TypeHandle force_init_type() {init_type(); return get_class_type();} 00064 static TypeHandle get_class_type() { 00065 return _type_handle; 00066 } 00067 static void init_type() { 00068 Lens::init_type(); 00069 register_type(_type_handle, "PSphereLens", 00070 Lens::get_class_type()); 00071 } 00072 00073 private: 00074 static TypeHandle _type_handle; 00075 }; 00076 00077 #include "pSphereLens.I" 00078 00079 #endif