diff options
Diffstat (limited to 'source/blender/freestyle/intern/scene_graph/NodeCamera.h')
-rw-r--r-- | source/blender/freestyle/intern/scene_graph/NodeCamera.h | 316 |
1 files changed, 157 insertions, 159 deletions
diff --git a/source/blender/freestyle/intern/scene_graph/NodeCamera.h b/source/blender/freestyle/intern/scene_graph/NodeCamera.h index cbff332849c..c3c93fa1f88 100644 --- a/source/blender/freestyle/intern/scene_graph/NodeCamera.h +++ b/source/blender/freestyle/intern/scene_graph/NodeCamera.h @@ -36,188 +36,186 @@ class NodeOrthographicCamera; class NodePerspectiveCamera; -class NodeCamera : public Node -{ -public: - typedef enum { - PERSPECTIVE, - ORTHOGRAPHIC, - GENERIC, - } CameraType; - - /*! Default matrices: Identity for both projection and modelview. */ - NodeCamera(CameraType camera_type = GENERIC); -#if 0 /* UNUSED, gives warning in gcc */ - NodeCamera(const NodeCamera& iBrother); +class NodeCamera : public Node { + public: + typedef enum { + PERSPECTIVE, + ORTHOGRAPHIC, + GENERIC, + } CameraType; + + /*! Default matrices: Identity for both projection and modelview. */ + NodeCamera(CameraType camera_type = GENERIC); +#if 0 /* UNUSED, gives warning in gcc */ + NodeCamera(const NodeCamera& iBrother); #endif - virtual ~NodeCamera() {} + virtual ~NodeCamera() + { + } - /*! Accept the corresponding visitor */ - virtual void accept(SceneVisitor& v); + /*! Accept the corresponding visitor */ + virtual void accept(SceneVisitor &v); - /*! Matrix is copied */ - void setModelViewMatrix(double modelview_matrix[16]); + /*! Matrix is copied */ + void setModelViewMatrix(double modelview_matrix[16]); - /*! Matrix is copied */ - void setProjectionMatrix(double projection_matrix[16]); + /*! Matrix is copied */ + void setProjectionMatrix(double projection_matrix[16]); - double *modelViewMatrix() - { - return modelview_matrix_; - } + double *modelViewMatrix() + { + return modelview_matrix_; + } - double *projectionMatrix() - { - return projection_matrix_; - } + double *projectionMatrix() + { + return projection_matrix_; + } -protected: - // row major right handed matrix - double modelview_matrix_[16]; - // row major right handed matrix - double projection_matrix_[16]; + protected: + // row major right handed matrix + double modelview_matrix_[16]; + // row major right handed matrix + double projection_matrix_[16]; - CameraType camera_type_; + CameraType camera_type_; #ifdef WITH_CXX_GUARDEDALLOC - MEM_CXX_CLASS_ALLOC_FUNCS("Freestyle:NodeCamera") + MEM_CXX_CLASS_ALLOC_FUNCS("Freestyle:NodeCamera") #endif - }; -class NodeOrthographicCamera : public NodeCamera -{ -public: - NodeOrthographicCamera(); - - /*! Builds a parallel projection matrix a la glOrtho. - * A 0 0 tx - * 0 B 0 ty - * 0 0 C tz - * 0 0 0 1 - * - * where - * A = 2 / (right - left) - * B = 2 / (top - bottom) - * C = -2 / (far - near) - * tx = -(right + left) / (right - left) - * ty = -(top + bottom) / (top - bottom) - * tz = -(zFar + zNear) / (zFar - zNear) - */ - NodeOrthographicCamera(double left, double right, double bottom, double top, double zNear, double zFar); - - double left() const - { - return left_; - } - - double right() const - { - return right_; - } - - double bottom() const - { - return bottom_; - } - - double top() const - { - return top_; - } - - double zNear() const - { - return zNear_; - } - - double zFar() const - { - return zFar_; - } - - NodeOrthographicCamera(const NodeOrthographicCamera& iBrother); - -private: - double left_; - double right_; - double bottom_; - double top_; - double zNear_; - double zFar_; +class NodeOrthographicCamera : public NodeCamera { + public: + NodeOrthographicCamera(); + + /*! Builds a parallel projection matrix a la glOrtho. + * A 0 0 tx + * 0 B 0 ty + * 0 0 C tz + * 0 0 0 1 + * + * where + * A = 2 / (right - left) + * B = 2 / (top - bottom) + * C = -2 / (far - near) + * tx = -(right + left) / (right - left) + * ty = -(top + bottom) / (top - bottom) + * tz = -(zFar + zNear) / (zFar - zNear) + */ + NodeOrthographicCamera( + double left, double right, double bottom, double top, double zNear, double zFar); + + double left() const + { + return left_; + } + + double right() const + { + return right_; + } + + double bottom() const + { + return bottom_; + } + + double top() const + { + return top_; + } + + double zNear() const + { + return zNear_; + } + + double zFar() const + { + return zFar_; + } + + NodeOrthographicCamera(const NodeOrthographicCamera &iBrother); + + private: + double left_; + double right_; + double bottom_; + double top_; + double zNear_; + double zFar_; #ifdef WITH_CXX_GUARDEDALLOC - MEM_CXX_CLASS_ALLOC_FUNCS("Freestyle:NodeOrthographicCamera") + MEM_CXX_CLASS_ALLOC_FUNCS("Freestyle:NodeOrthographicCamera") #endif - }; -class NodePerspectiveCamera : public NodeCamera -{ -public: - NodePerspectiveCamera(); - - /*! Builds a perspective projection matrix a la gluPerspective. - * Given f defined as follows: - * fovy - * f = cotangent(____) - * 2 - * The generated matrix is - * ( f ) - * | ______ 0 0 0 | - * | aspect | - * | | - * | 0 f 0 0 | - * | | - * | zNear+zFar 2*zNear*zFar | - * | 0 0 __________ ____________ | - * | zNear-zFar zNear-zFar | - * | | - * ( 0 0 -1 0 ) - * \param fovy: - * Field of View specified in radians. - */ - NodePerspectiveCamera(double fovy, double aspect, double zNear, double zFar); - - /*! Builds a perspective projection matrix a la glFrustum. - * ( 2*zNear ) - * | __________ 0 A 0 | - * | right-left | - * | | - * | 2*zNear | - * | 0 __________ B 0 | - * | top-bottom | - * | | - * | 0 0 C D | - * | | - * | 0 0 -1 0 | - * ( ) - * - * right+left - * A = __________ - * right-left - * - * top+bottom - * B = __________ - * top-bottom - * - * zFar+zNear - * C = - __________ - * zFar-zNear - * - * 2*zFar*zNear - * D = - ____________ - * zFar-zNear - */ - NodePerspectiveCamera(double left, double right, double bottom, double top, double zNear, double zFar); +class NodePerspectiveCamera : public NodeCamera { + public: + NodePerspectiveCamera(); + + /*! Builds a perspective projection matrix a la gluPerspective. + * Given f defined as follows: + * fovy + * f = cotangent(____) + * 2 + * The generated matrix is + * ( f ) + * | ______ 0 0 0 | + * | aspect | + * | | + * | 0 f 0 0 | + * | | + * | zNear+zFar 2*zNear*zFar | + * | 0 0 __________ ____________ | + * | zNear-zFar zNear-zFar | + * | | + * ( 0 0 -1 0 ) + * \param fovy: + * Field of View specified in radians. + */ + NodePerspectiveCamera(double fovy, double aspect, double zNear, double zFar); + + /*! Builds a perspective projection matrix a la glFrustum. + * ( 2*zNear ) + * | __________ 0 A 0 | + * | right-left | + * | | + * | 2*zNear | + * | 0 __________ B 0 | + * | top-bottom | + * | | + * | 0 0 C D | + * | | + * | 0 0 -1 0 | + * ( ) + * + * right+left + * A = __________ + * right-left + * + * top+bottom + * B = __________ + * top-bottom + * + * zFar+zNear + * C = - __________ + * zFar-zNear + * + * 2*zFar*zNear + * D = - ____________ + * zFar-zNear + */ + NodePerspectiveCamera( + double left, double right, double bottom, double top, double zNear, double zFar); #ifdef WITH_CXX_GUARDEDALLOC - MEM_CXX_CLASS_ALLOC_FUNCS("Freestyle:NodePerspectiveCamera") + MEM_CXX_CLASS_ALLOC_FUNCS("Freestyle:NodePerspectiveCamera") #endif - }; } /* namespace Freestyle */ -#endif // __FREESTYLE_NODE_CAMERA_H__ +#endif // __FREESTYLE_NODE_CAMERA_H__ |