/****************************************************************************** * Copyright (C) 2008 by Oliver Bock * * oliver.bock[AT]aei.mpg.de * * * * This file is part of PulsatingScience. * * * * PulsatingScience 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, version 3 of the License. * * * * PulsatingScience 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 PulsatingScience. If not, see . * * * ******************************************************************************/ #ifndef PULSARANIMATIONWIDGET_H_ #define PULSARANIMATIONWIDGET_H_ #include #include #include #include #define PI 3.14159265 class PulsarAnimationWidget : public QGLWidget { Q_OBJECT public: PulsarAnimationWidget(QWidget *parent); virtual ~PulsarAnimationWidget(); void setFramePerSecond(const unsigned int fps); void setPulsarRotationDelta(const float frequency); void setOrbitRotationDelta(const float frequency); void setOrbitRadius(const float radius); void setPulsarSpinAxisInclination(const int degrees); void setPulsarMagneticAxisInclination(const int degrees); public slots: void runAnimation(); void pauseAnimation(); void stopAnimation(); void updateFrame(); protected: void initializeGL(); void resizeGL(int w, int h); void paintGL(); void mousePressEvent(QMouseEvent *event); void mouseMoveEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event); void updateCameraPosition(const int angleH, const int angleV, const float zoom); void resetParameters(); QTimer m_frameTimer; GLUquadricObj *m_quadricPulsarOrbitPlane; GLUquadricObj *m_quadricPulsar; GLUquadricObj *m_quadricPulsarCone1; GLUquadricObj *m_quadricPulsarCone2; GLuint m_pulsarTexture; GLuint m_backgroundTexture; int m_framesPerSecond; float m_pulsarRotationAngle; float m_pulsarRotationDelta; float m_orbitRotationAngle; float m_orbitRotationDelta; float m_pulsarOrbitRadius; float m_companionOrbitRadius; int m_pulsarSpinAxisInclination; int m_pulsarMagneticAxisInclination; bool m_cameraInteraction; int m_mouseLastX; int m_mouseLastY; int m_mouseAngleH; int m_mouseAngleV; float m_cameraZoom; float m_cameraZoomLBound; float m_cameraPosX; float m_cameraPosY; float m_cameraPosZ; static const float deg2rad; }; #endif /* PULSARANIMATIONWIDGET_H_ */