Gitlab@AEI Hannover will go down for maintenance on 2020-09-21 at 4:00 UTC. The service will be unavailable for up to 24 hours. If you have questions about this please contact atlas_admin@aei.mpg.de

Commit 2bde7292 authored by Oliver Bock's avatar Oliver Bock

Use wireframe triangle fans for cones and visualize beam intensity by texture

parent f59e10fc
...@@ -57,13 +57,16 @@ PulsarAnimationWidget::PulsarAnimationWidget(QWidget *parent) : ...@@ -57,13 +57,16 @@ PulsarAnimationWidget::PulsarAnimationWidget(QWidget *parent) :
m_quadricCompanion = NULL; m_quadricCompanion = NULL;
m_quadricPulsarOrbitPlane = NULL; m_quadricPulsarOrbitPlane = NULL;
m_quadricPulsar = NULL; m_quadricPulsar = NULL;
m_quadricPulsarCone1 = NULL; m_quadricPulsarCone1Shell = NULL;
m_quadricPulsarCone2 = NULL; m_quadricPulsarCone2Shell = NULL;
m_quadricPulsarSpinAxis = NULL; m_quadricPulsarSpinAxis = NULL;
m_quadricPulsarSpinAxisTop1 = NULL;
m_quadricPulsarSpinAxisTop2 = NULL;
m_quadricPulsarMagneticAxis = NULL; m_quadricPulsarMagneticAxis = NULL;
// initialize texture pointers // initialize texture pointers
m_backgroundTexture = 0; m_backgroundTexture = 0;
m_beamTexture = 0;
// initial render timing settings // initial render timing settings
m_framesPerSecond = 25; m_framesPerSecond = 25;
...@@ -82,6 +85,11 @@ PulsarAnimationWidget::PulsarAnimationWidget(QWidget *parent) : ...@@ -82,6 +85,11 @@ PulsarAnimationWidget::PulsarAnimationWidget(QWidget *parent) :
m_companionSemiMajorAxis = (m_pulsarMass/m_companionMass) * m_pulsarSemiMajorAxis; m_companionSemiMajorAxis = (m_pulsarMass/m_companionMass) * m_pulsarSemiMajorAxis;
// initial spin frequency of 0.5 Hz // initial spin frequency of 0.5 Hz
m_pulsarRotationDelta = (360.0 * 0.5) / m_framesPerSecond; m_pulsarRotationDelta = (360.0 * 0.5) / m_framesPerSecond;
// beam properties (keep this order!)
m_pulsarBeamLength = 3.0f;
setPulsarBeamAngle(30);
// update orbital period (based on settings above) // update orbital period (based on settings above)
updateOrbitPeriod(); updateOrbitPeriod();
...@@ -109,12 +117,15 @@ PulsarAnimationWidget::~PulsarAnimationWidget() ...@@ -109,12 +117,15 @@ PulsarAnimationWidget::~PulsarAnimationWidget()
if(m_quadricCompanion) gluDeleteQuadric(m_quadricCompanion); if(m_quadricCompanion) gluDeleteQuadric(m_quadricCompanion);
if(m_quadricPulsarOrbitPlane) gluDeleteQuadric(m_quadricPulsarOrbitPlane); if(m_quadricPulsarOrbitPlane) gluDeleteQuadric(m_quadricPulsarOrbitPlane);
if(m_quadricPulsar) gluDeleteQuadric(m_quadricPulsar); if(m_quadricPulsar) gluDeleteQuadric(m_quadricPulsar);
if(m_quadricPulsarCone1) gluDeleteQuadric(m_quadricPulsarCone1); if(m_quadricPulsarCone1Shell) gluDeleteQuadric(m_quadricPulsarCone1Shell);
if(m_quadricPulsarCone2) gluDeleteQuadric(m_quadricPulsarCone2); if(m_quadricPulsarCone2Shell) gluDeleteQuadric(m_quadricPulsarCone2Shell);
if(m_quadricPulsarSpinAxis) gluDeleteQuadric(m_quadricPulsarSpinAxis); if(m_quadricPulsarSpinAxis) gluDeleteQuadric(m_quadricPulsarSpinAxis);
if(m_quadricPulsarSpinAxisTop1) gluDeleteQuadric(m_quadricPulsarSpinAxisTop1);
if(m_quadricPulsarSpinAxisTop2) gluDeleteQuadric(m_quadricPulsarSpinAxisTop2);
if(m_quadricPulsarMagneticAxis) gluDeleteQuadric(m_quadricPulsarMagneticAxis); if(m_quadricPulsarMagneticAxis) gluDeleteQuadric(m_quadricPulsarMagneticAxis);
if(m_backgroundTexture) deleteTexture(m_backgroundTexture); if(m_backgroundTexture) deleteTexture(m_backgroundTexture);
if(m_beamTexture) deleteTexture(m_beamTexture);
} }
void PulsarAnimationWidget::initializeGL() void PulsarAnimationWidget::initializeGL()
...@@ -143,7 +154,6 @@ void PulsarAnimationWidget::initializeGL() ...@@ -143,7 +154,6 @@ void PulsarAnimationWidget::initializeGL()
glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE); glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE);
glEnable(GL_LIGHT0); glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND); glEnable(GL_BLEND);
...@@ -152,18 +162,22 @@ void PulsarAnimationWidget::initializeGL() ...@@ -152,18 +162,22 @@ void PulsarAnimationWidget::initializeGL()
m_quadricCompanion = gluNewQuadric(); m_quadricCompanion = gluNewQuadric();
m_quadricPulsarOrbitPlane = gluNewQuadric(); m_quadricPulsarOrbitPlane = gluNewQuadric();
m_quadricPulsar = gluNewQuadric(); m_quadricPulsar = gluNewQuadric();
m_quadricPulsarCone1 = gluNewQuadric(); m_quadricPulsarCone1Shell = gluNewQuadric();
m_quadricPulsarCone2 = gluNewQuadric(); m_quadricPulsarCone2Shell = gluNewQuadric();
m_quadricPulsarSpinAxis = gluNewQuadric(); m_quadricPulsarSpinAxis = gluNewQuadric();
m_quadricPulsarSpinAxisTop1 = gluNewQuadric();
m_quadricPulsarSpinAxisTop2 = gluNewQuadric();
m_quadricPulsarMagneticAxis = gluNewQuadric(); m_quadricPulsarMagneticAxis = gluNewQuadric();
gluQuadricNormals(m_quadricCompanionOrbitPlane, GLU_SMOOTH); gluQuadricNormals(m_quadricCompanionOrbitPlane, GLU_SMOOTH);
gluQuadricNormals(m_quadricCompanion, GLU_SMOOTH); gluQuadricNormals(m_quadricCompanion, GLU_SMOOTH);
gluQuadricNormals(m_quadricPulsarOrbitPlane, GLU_SMOOTH); gluQuadricNormals(m_quadricPulsarOrbitPlane, GLU_SMOOTH);
gluQuadricNormals(m_quadricPulsar, GLU_SMOOTH); gluQuadricNormals(m_quadricPulsar, GLU_SMOOTH);
gluQuadricNormals(m_quadricPulsarCone1, GLU_SMOOTH); gluQuadricNormals(m_quadricPulsarCone1Shell, GLU_SMOOTH);
gluQuadricNormals(m_quadricPulsarCone2, GLU_SMOOTH); gluQuadricNormals(m_quadricPulsarCone2Shell, GLU_SMOOTH);
gluQuadricNormals(m_quadricPulsarSpinAxis, GLU_SMOOTH); gluQuadricNormals(m_quadricPulsarSpinAxis, GLU_SMOOTH);
gluQuadricNormals(m_quadricPulsarSpinAxisTop1, GLU_SMOOTH);
gluQuadricNormals(m_quadricPulsarSpinAxisTop2, GLU_SMOOTH);
gluQuadricNormals(m_quadricPulsarMagneticAxis, GLU_SMOOTH); gluQuadricNormals(m_quadricPulsarMagneticAxis, GLU_SMOOTH);
// query max texture size (estimate) // query max texture size (estimate)
...@@ -193,16 +207,31 @@ void PulsarAnimationWidget::initializeGL() ...@@ -193,16 +207,31 @@ void PulsarAnimationWidget::initializeGL()
backgroundTexture = backgroundTexture.scaled(maxTextureSize, maxTextureSize, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); backgroundTexture = backgroundTexture.scaled(maxTextureSize, maxTextureSize, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
} }
// prepare and check beam texture
QImage beamTexture(":/textures/resources/texture_beam.png");
if(beamTexture.width() != beamTexture.height()) {
qWarning() << msgShape.arg(tr("Beam"));
}
else {
double integer = 0.0;
double fraction = 0.0;
fraction = modf(log(beamTexture.width()) / log(2.0), &integer);
if(fraction > 0.0) {
qWarning() << msgPower.arg(tr("Beam"));
}
}
if(beamTexture.width() > maxTextureSize) {
qWarning() << msgSize.arg(tr("beam").arg(maxTextureSize).arg(maxTextureSize));
beamTexture = beamTexture.scaled(maxTextureSize, maxTextureSize, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
}
// bind textures // bind textures
m_backgroundTexture = bindTexture(backgroundTexture, GL_TEXTURE_2D, GL_RGBA); m_backgroundTexture = bindTexture(backgroundTexture, GL_TEXTURE_2D, GL_RGBA);
m_beamTexture = bindTexture(beamTexture, GL_TEXTURE_2D, GL_RGBA);
// use mipmapped textures // use mipmapped textures
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
// enable 2D mapping (s/t coordinates, sphere map won't rotate texture!)
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
} }
void PulsarAnimationWidget::resizeGL(int w, int h) void PulsarAnimationWidget::resizeGL(int w, int h)
...@@ -220,6 +249,8 @@ void PulsarAnimationWidget::resizeGL(int w, int h) ...@@ -220,6 +249,8 @@ void PulsarAnimationWidget::resizeGL(int w, int h)
void PulsarAnimationWidget::paintGL() void PulsarAnimationWidget::paintGL()
{ {
GLfloat x,y,angle;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW); glMatrixMode(GL_MODELVIEW);
...@@ -272,10 +303,17 @@ void PulsarAnimationWidget::paintGL() ...@@ -272,10 +303,17 @@ void PulsarAnimationWidget::paintGL()
glTranslatef(sin((m_orbitRotationAngle + 180.0) * deg2rad) * m_companionSemiMajorAxis, glTranslatef(sin((m_orbitRotationAngle + 180.0) * deg2rad) * m_companionSemiMajorAxis,
0.0, 0.0,
cos((m_orbitRotationAngle + 180.0) * deg2rad) * m_companionSemiMajorAxis); cos((m_orbitRotationAngle + 180.0) * deg2rad) * m_companionSemiMajorAxis);
// draw, with proper lighting
glEnable(GL_LIGHTING);
gluSphere(m_quadricCompanion, 1.0, 32, 32); gluSphere(m_quadricCompanion, 1.0, 32, 32);
glDisable(GL_LIGHTING);
} }
glPopMatrix(); glPopMatrix();
// enable wireframe mode
glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
// draw pulsar // draw pulsar
glPushMatrix(); glPushMatrix();
{ {
...@@ -302,20 +340,15 @@ void PulsarAnimationWidget::paintGL() ...@@ -302,20 +340,15 @@ void PulsarAnimationWidget::paintGL()
glPopMatrix(); glPopMatrix();
} }
// enable wireframe mode // draw sphere, with proper lighting
glPolygonMode(GL_FRONT_AND_BACK,GL_LINE); glEnable(GL_LIGHTING);
// draw pulsar glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat);
glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
gluSphere(m_quadricPulsar, 1.0, 32, 32); gluSphere(m_quadricPulsar, 1.0, 32, 32);
// disable wireframe mode glDisable(GL_LIGHTING);
glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
} }
glPopMatrix(); glPopMatrix();
// TODO: should be located elsewhere
static GLfloat coneAmbient[] = {1.0, 1.0, 0.0, 1.0};
static GLfloat coneDiffuse[] = {1.0, 1.0, 0.0, 1.0};
static GLfloat coneSpecular[] = {1.0, 1.0, 0.5, 1.0};
// first cone // first cone
glPushMatrix(); glPushMatrix();
{ {
...@@ -327,24 +360,72 @@ void PulsarAnimationWidget::paintGL() ...@@ -327,24 +360,72 @@ void PulsarAnimationWidget::paintGL()
// draw magnetic axis (for both cones) // draw magnetic axis (for both cones)
if(m_showRotationAxes) { if(m_showRotationAxes) {
glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
glColor3f(1.0f, 1.0f, 0.0f);
glPushMatrix(); glPushMatrix();
{ {
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, translucent); glTranslatef(0.0, 0.0, -4.0);
glTranslatef(0.0, 0.0, -5.0); gluCylinder(m_quadricPulsarMagneticAxis, 0.020, 0.020, 8.0, 32, 1);
gluCylinder(m_quadricPulsarMagneticAxis, 0.05, 0.05, 10.0, 32, 1);
} }
glPopMatrix(); glPopMatrix();
glPushMatrix();
{
glTranslatef(0.0, 0.0, -4.0);
gluDisk(m_quadricPulsarSpinAxisTop1, 0, 0.020, 32, 8);
}
glPopMatrix();
glPushMatrix();
{
glTranslatef(0.0, 0.0, 4.0);
gluDisk(m_quadricPulsarSpinAxisTop2, 0, 0.020, 32, 8);
}
glPopMatrix();
glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
} }
glTranslatef(0.0, 0.0, -3.0); glTranslatef(0.0, 0.0, -m_pulsarBeamLength);
// draw first cone's outer layer
glBegin(GL_TRIANGLE_FAN);
{
// Pinnacle of cone is shared vertex for fan, moved up z-axis
// to produce a cone instead of a circle
glColor4f(1.0f, 1.0f, 0.0f, 0.33f);
glVertex3f(0.0f, 0.0f, m_pulsarBeamLength);
// Loop around in a circle and specify even points along the circle
// as the vertices of the triangle fan (32 sections)
for(angle = 0.0f; angle < (2.0f*PI); angle += (PI/32.0f))
{
// Calculate x and y position of the next vertex
x = m_pulsarBeamOuterRadius * sin(angle);
y = m_pulsarBeamOuterRadius * cos(angle);
// Specify the next vertex for the triangle fan
glVertex2f(x, y);
}
}
glEnd();
// draw first cone's "base" (textured bottom to visualize beam intensity)
glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
// create texture coordinates and enable texturing
gluQuadricTexture(m_quadricPulsarCone1Shell, GL_TRUE);
glBindTexture(GL_TEXTURE_2D, m_beamTexture);
glEnable(GL_TEXTURE_2D);
gluDisk(m_quadricPulsarCone1Shell, 0, m_pulsarBeamOuterRadius, 32, 1);
// disable texturing
glDisable(GL_TEXTURE_2D);
glMaterialfv(GL_FRONT, GL_AMBIENT, coneAmbient); glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
glMaterialfv(GL_FRONT, GL_DIFFUSE, coneDiffuse);
gluCylinder(m_quadricPulsarCone1, 0.475, 0.0, 3.0, 32, 32);
} }
glPopMatrix(); glPopMatrix();
// second cone // second cone (pointing towards from camera)
glPushMatrix(); glPushMatrix();
{ {
glRotatef(-90.0, 1.0, 0.0, 0.0); glRotatef(-90.0, 1.0, 0.0, 0.0);
...@@ -353,43 +434,55 @@ void PulsarAnimationWidget::paintGL() ...@@ -353,43 +434,55 @@ void PulsarAnimationWidget::paintGL()
glRotatef(m_pulsarRotationAngle - 90.0, 0.0, 0.0, 1.0); glRotatef(m_pulsarRotationAngle - 90.0, 0.0, 0.0, 1.0);
glRotatef(m_pulsarMagneticAxisInclination, 1.0, 0.0, 0.0); glRotatef(m_pulsarMagneticAxisInclination, 1.0, 0.0, 0.0);
glTranslatef(0.0, 0.0, -3.0); glTranslatef(0.0, 0.0, -m_pulsarBeamLength);
glMaterialfv(GL_FRONT, GL_AMBIENT, coneAmbient); // draw second cone's outer layer
glMaterialfv(GL_FRONT, GL_DIFFUSE, coneDiffuse); glBegin(GL_TRIANGLE_FAN);
gluCylinder(m_quadricPulsarCone2, 0.475, 0.0, 3.0, 32, 32); {
} // Pinnacle of cone is shared vertex for fan, moved up z-axis
glPopMatrix(); // to produce a cone instead of a circle
} glColor4f(1.0f, 1.0f, 0.0f, 0.33f);
glPopMatrix(); glVertex3f(0.0f, 0.0f, m_pulsarBeamLength);
// Loop around in a circle and specify even points along the circle
// as the vertices of the triangle fan (32 sections)
for(angle = 0.0f; angle < (2.0f*PI); angle += (PI/32.0f))
{
// Calculate x and y position of the next vertex
x = m_pulsarBeamOuterRadius * sin(angle);
y = m_pulsarBeamOuterRadius * cos(angle);
// save current state (the following is using parallel projection) // Specify the next vertex for the triangle fan
glMatrixMode(GL_PROJECTION); glVertex2f(x, y);
glPushMatrix(); }
{ }
glLoadIdentity(); glEnd();
glOrtho(0, width(), 0, height(), 0.1, 501.0);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
{
glLoadIdentity();
// draw backdrop (independent parallel projection) // draw second cone's "base" (textured bottom to visualize beam intensity)
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, mat_specular); glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
glTranslatef(0.0, 0.0, -501.0); glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
drawTexture(QPointF(0.0, 0.0), m_backgroundTexture);
// restore original state // create texture coordinates and enable texturing
glMatrixMode(GL_PROJECTION); gluQuadricTexture(m_quadricPulsarCone2Shell, GL_TRUE);
glBindTexture(GL_TEXTURE_2D, m_beamTexture);
glEnable(GL_TEXTURE_2D);
gluDisk(m_quadricPulsarCone2Shell, 0, m_pulsarBeamOuterRadius, 32, 1);
// disable texturing
glDisable(GL_TEXTURE_2D);
} }
glPopMatrix(); glPopMatrix();
glMatrixMode(GL_MODELVIEW);
} }
glPopMatrix(); glPopMatrix();
// back to solid rendering
glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
// draw orbital planes // draw orbital planes
if(m_cameraInteraction || m_showOrbits) { if(m_cameraInteraction || m_showOrbits) {
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, translucent); glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, translucent);
glEnable(GL_LIGHTING);
static double sizeOffset = 0.25; static double sizeOffset = 0.25;
...@@ -424,6 +517,8 @@ void PulsarAnimationWidget::paintGL() ...@@ -424,6 +517,8 @@ void PulsarAnimationWidget::paintGL()
64, 1); 64, 1);
} }
glPopMatrix(); glPopMatrix();
glDisable(GL_LIGHTING);
} }
// save current state (the following is using parallel projection) // save current state (the following is using parallel projection)
...@@ -629,6 +724,23 @@ void PulsarAnimationWidget::setPulsarMagneticAxisInclination(const int degrees) ...@@ -629,6 +724,23 @@ void PulsarAnimationWidget::setPulsarMagneticAxisInclination(const int degrees)
updateGL(); updateGL();
} }
void PulsarAnimationWidget::setPulsarBeamAngle(const int degrees)
{
double beamTexturePeakCorrectionFactor = 0.83;
double correctedOuterRadius;
// compute visual radius
m_pulsarBeamOuterRadius = tan(deg2rad * degrees * 0.5f) * m_pulsarBeamLength;
// compute corrected angle for pulse profile
correctedOuterRadius = m_pulsarBeamOuterRadius * beamTexturePeakCorrectionFactor;
m_pulsarBeamAngle = 2 * atan(correctedOuterRadius / m_pulsarBeamLength) * 180.0/PI;
updatePulseProfile();
updateGL();
}
void PulsarAnimationWidget::updateOrbitPeriod() void PulsarAnimationWidget::updateOrbitPeriod()
{ {
m_orbitalPeriod = 3.1553e7 * sqrt( m_orbitalPeriod = 3.1553e7 * sqrt(
......
...@@ -46,6 +46,7 @@ public: ...@@ -46,6 +46,7 @@ public:
void setPulsarSpinAxisInclination(const int degrees); void setPulsarSpinAxisInclination(const int degrees);
void setPulsarMagneticAxisInclination(const int degrees); void setPulsarMagneticAxisInclination(const int degrees);
void setPulsarSemiMajorAxis(const double length); void setPulsarSemiMajorAxis(const double length);
void setPulsarBeamAngle(const int degrees);
public slots: public slots:
void runAnimation(); void runAnimation();
...@@ -84,12 +85,15 @@ private: ...@@ -84,12 +85,15 @@ private:
GLUquadricObj *m_quadricCompanion; GLUquadricObj *m_quadricCompanion;
GLUquadricObj *m_quadricPulsarOrbitPlane; GLUquadricObj *m_quadricPulsarOrbitPlane;
GLUquadricObj *m_quadricPulsar; GLUquadricObj *m_quadricPulsar;
GLUquadricObj *m_quadricPulsarCone1; GLUquadricObj *m_quadricPulsarCone1Shell;
GLUquadricObj *m_quadricPulsarCone2; GLUquadricObj *m_quadricPulsarCone2Shell;
GLUquadricObj *m_quadricPulsarSpinAxis; GLUquadricObj *m_quadricPulsarSpinAxis;
GLUquadricObj *m_quadricPulsarSpinAxisTop1;
GLUquadricObj *m_quadricPulsarSpinAxisTop2;
GLUquadricObj *m_quadricPulsarMagneticAxis; GLUquadricObj *m_quadricPulsarMagneticAxis;
GLuint m_backgroundTexture; GLuint m_backgroundTexture;
GLuint m_beamTexture;
int m_framesPerSecond; int m_framesPerSecond;
...@@ -107,6 +111,9 @@ private: ...@@ -107,6 +111,9 @@ private:
double m_pulsarSpinAxisInclination; double m_pulsarSpinAxisInclination;
double m_pulsarMagneticAxisInclination; double m_pulsarMagneticAxisInclination;
double m_pulsarBeamLength;
double m_pulsarBeamAngle;
double m_pulsarBeamOuterRadius;
bool m_showOrbits; bool m_showOrbits;
bool m_showRotationAxes; bool m_showRotationAxes;
......
...@@ -14,5 +14,6 @@ ...@@ -14,5 +14,6 @@
</qresource> </qresource>
<qresource prefix="/textures"> <qresource prefix="/textures">
<file>resources/texture_background_carina.png</file> <file>resources/texture_background_carina.png</file>
<file>resources/texture_beam.png</file>
</qresource> </qresource>
</RCC> </RCC>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="744.09448819"
height="1052.3622047"
id="svg2"
version="1.1"
inkscape:version="0.47 r22583"
sodipodi:docname="texture_beam.svg">
<defs
id="defs4">
<linearGradient
id="linearGradient3685">
<stop
style="stop-color:#ffff00;stop-opacity:1;"
offset="0"
id="stop3687" />
<stop
style="stop-color:#ffff00;stop-opacity:0;"
offset="1"
id="stop3689" />
</linearGradient>
<linearGradient
id="linearGradient3679">
<stop
id="stop3681"
offset="0"
style="stop-color:#ffff00;stop-opacity:0.17647059;" />
<stop
style="stop-color:#ffff00;stop-opacity:1;"
offset="0.84778017"
id="stop3691" />
<stop
id="stop3683"
offset="1"
style="stop-color:#ffff00;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient3671">
<stop
style="stop-color:#ffff00;stop-opacity:1;"
offset="0"
id="stop3673" />
<stop
style="stop-color:#ffff00;stop-opacity:0;"
offset="1"
id="stop3675" />
</linearGradient>
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
id="perspective10" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3679"
id="radialGradient3677"
cx="438.57144"
cy="610.93359"
fx="438.57144"
fy="610.93359"
r="187.14285"
gradientUnits="userSpaceOnUse"
spreadMethod="repeat" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.71743361"
inkscape:cx="123.94066"
inkscape:cy="470.4268"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1680"
inkscape:window-height="1002"
inkscape:window-x="1440"
inkscape:window-y="22"
inkscape:window-maximized="0" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
sodipodi:type="arc"
style="fill:url(#radialGradient3677);fill-opacity:1.0"
id="path2816"
sodipodi:cx="438.57144"
sodipodi:cy="610.93359"
sodipodi:rx="187.14285"
sodipodi:ry="187.14285"
d="m 625.71429,610.93359 a 187.14285,187.14285 0 1 1 -374.2857,0 187.14285,187.14285 0 1 1 374.2857,0 z"
transform="matrix(1.367939,0,0,1.367939,-217.81337,-338.24157)"
inkscape:export-filename="/Users/oliver/Development/pulsatingscience/src/resources/texture_beam.png"