diff --git a/src/pulsaranimationwidget.cpp b/src/pulsaranimationwidget.cpp index 4a070e2bf65872cd3f83d2d62d42c9a9c8106c12..77d4d8884076a9e76c7f526d58ae3dd2c76e6651 100644 --- a/src/pulsaranimationwidget.cpp +++ b/src/pulsaranimationwidget.cpp @@ -265,113 +265,129 @@ void PulsarAnimationWidget::paintGL() // draw companion glPushMatrix(); - glTranslatef(sin((m_orbitRotationAngle + 180.0) * deg2rad) * m_companionSemiMajorAxis, - 0.0, - cos((m_orbitRotationAngle + 180.0) * deg2rad) * m_companionSemiMajorAxis); - gluSphere(m_quadricCompanion, 1.0, 32, 32); + { + glTranslatef(sin((m_orbitRotationAngle + 180.0) * deg2rad) * m_companionSemiMajorAxis, + 0.0, + cos((m_orbitRotationAngle + 180.0) * deg2rad) * m_companionSemiMajorAxis); + gluSphere(m_quadricCompanion, 1.0, 32, 32); + } glPopMatrix(); // draw pulsar glPushMatrix(); - glTranslatef(sin(m_orbitRotationAngle * deg2rad) * m_pulsarSemiMajorAxis, - 0.0, - cos(m_orbitRotationAngle * deg2rad) * m_pulsarSemiMajorAxis); - - glPushMatrix(); - glRotatef(m_pulsarSpinAxisInclination, 0.0, 0.0, 1.0); - glRotatef(m_pulsarRotationAngle, 0.0, 1.0, 0.0); + { + glTranslatef(sin(m_orbitRotationAngle * deg2rad) * m_pulsarSemiMajorAxis, + 0.0, + cos(m_orbitRotationAngle * deg2rad) * m_pulsarSemiMajorAxis); - // draw spin axis - if(m_showRotationAxes) { glPushMatrix(); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, translucent); - glRotatef(90.0, 1.0, 0.0, 0.0); - glTranslatef(0.0, 0.0, -5.0); - gluCylinder(m_quadricPulsarSpinAxis, 0.05, 0.05, 10.0, 32, 1); - glPopMatrix(); - } - - // create texture coordinates and enable texturing - glEnable(GL_TEXTURE_GEN_S); - glEnable(GL_TEXTURE_GEN_T); - glBindTexture(GL_TEXTURE_2D, m_pulsarTexture); - glEnable(GL_TEXTURE_2D); - - glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat); - glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); - gluSphere(m_quadricPulsar, 1.0, 32, 32); + { + glRotatef(m_pulsarSpinAxisInclination, 0.0, 0.0, 1.0); + glRotatef(m_pulsarRotationAngle, 0.0, 1.0, 0.0); + + // draw spin axis + if(m_showRotationAxes) { + glPushMatrix(); + { + glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, translucent); + glRotatef(90.0, 1.0, 0.0, 0.0); + glTranslatef(0.0, 0.0, -5.0); + gluCylinder(m_quadricPulsarSpinAxis, 0.05, 0.05, 10.0, 32, 1); + } + glPopMatrix(); + } - // disable texturing - glDisable(GL_TEXTURE_GEN_S); - glDisable(GL_TEXTURE_GEN_T); - glDisable(GL_TEXTURE_2D); - glPopMatrix(); + // create texture coordinates and enable texturing + glEnable(GL_TEXTURE_GEN_S); + glEnable(GL_TEXTURE_GEN_T); + glBindTexture(GL_TEXTURE_2D, m_pulsarTexture); + glEnable(GL_TEXTURE_2D); - // 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}; + glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat); + glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); + gluSphere(m_quadricPulsar, 1.0, 32, 32); - glMaterialfv(GL_FRONT, GL_SPECULAR, coneSpecular); - - // first cone - glPushMatrix(); - glRotatef(90.0, 1.0, 0.0, 0.0); - glRotatef(m_pulsarSpinAxisInclination, 0.0, 1.0, 0.0); + // disable texturing + glDisable(GL_TEXTURE_GEN_S); + glDisable(GL_TEXTURE_GEN_T); + glDisable(GL_TEXTURE_2D); + } + glPopMatrix(); - glRotatef(-m_pulsarRotationAngle - 90.0, 0.0, 0.0, 1.0); - glRotatef(-m_pulsarMagneticAxisInclination, 1.0, 0.0, 0.0); + // 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}; - // draw magnetic axis (for both cones) - if(m_showRotationAxes) { + // first cone glPushMatrix(); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, translucent); - glTranslatef(0.0, 0.0, -5.0); - gluCylinder(m_quadricPulsarMagneticAxis, 0.05, 0.05, 10.0, 32, 1); - glPopMatrix(); - } + { + glRotatef(90.0, 1.0, 0.0, 0.0); + glRotatef(m_pulsarSpinAxisInclination, 0.0, 1.0, 0.0); + + glRotatef(-m_pulsarRotationAngle - 90.0, 0.0, 0.0, 1.0); + glRotatef(-m_pulsarMagneticAxisInclination, 1.0, 0.0, 0.0); + + // draw magnetic axis (for both cones) + if(m_showRotationAxes) { + glPushMatrix(); + { + glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, translucent); + glTranslatef(0.0, 0.0, -5.0); + gluCylinder(m_quadricPulsarMagneticAxis, 0.05, 0.05, 10.0, 32, 1); + } + glPopMatrix(); + } - glTranslatef(0.0, 0.0, -4.0); + glTranslatef(0.0, 0.0, -4.0); - glMaterialfv(GL_FRONT, GL_AMBIENT, coneAmbient); - glMaterialfv(GL_FRONT, GL_DIFFUSE, coneDiffuse); - gluCylinder(m_quadricPulsarCone1, 0.475, 0.0, 3.0, 32, 32); - glPopMatrix(); + glMaterialfv(GL_FRONT, GL_AMBIENT, coneAmbient); + glMaterialfv(GL_FRONT, GL_DIFFUSE, coneDiffuse); + gluCylinder(m_quadricPulsarCone1, 0.475, 0.0, 3.0, 32, 32); + } + glPopMatrix(); - // second cone - glPushMatrix(); - glRotatef(-90.0, 1.0, 0.0, 0.0); - glRotatef(-m_pulsarSpinAxisInclination, 0.0, 1.0, 0.0); + // second cone + glPushMatrix(); + { + glRotatef(-90.0, 1.0, 0.0, 0.0); + glRotatef(-m_pulsarSpinAxisInclination, 0.0, 1.0, 0.0); - glRotatef(m_pulsarRotationAngle - 90.0, 0.0, 0.0, 1.0); - glRotatef(m_pulsarMagneticAxisInclination, 1.0, 0.0, 0.0); + glRotatef(m_pulsarRotationAngle - 90.0, 0.0, 0.0, 1.0); + glRotatef(m_pulsarMagneticAxisInclination, 1.0, 0.0, 0.0); - glTranslatef(0.0, 0.0, -4.0); + glTranslatef(0.0, 0.0, -4.0); - glMaterialfv(GL_FRONT, GL_AMBIENT, coneAmbient); - glMaterialfv(GL_FRONT, GL_DIFFUSE, coneDiffuse); - gluCylinder(m_quadricPulsarCone2, 0.475, 0.0, 3.0, 32, 32); - glPopMatrix(); + glMaterialfv(GL_FRONT, GL_AMBIENT, coneAmbient); + glMaterialfv(GL_FRONT, GL_DIFFUSE, coneDiffuse); + gluCylinder(m_quadricPulsarCone2, 0.475, 0.0, 3.0, 32, 32); + } + glPopMatrix(); + } glPopMatrix(); // save current state glMatrixMode(GL_PROJECTION); glPushMatrix(); - glLoadIdentity(); - glOrtho(0, width(), 0, height(), 0.1, 501.0); - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glLoadIdentity(); + { + glLoadIdentity(); + glOrtho(0, width(), 0, height(), 0.1, 501.0); + glMatrixMode(GL_MODELVIEW); + glPushMatrix(); + { + glLoadIdentity(); - // draw backdrop (independent parallel projection) - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, mat_specular); - glTranslatef(0.0, 0.0, -501.0); - drawTexture(QPointF(0.0, 0.0), m_backgroundTexture); + // draw backdrop (independent parallel projection) + glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, mat_specular); + glTranslatef(0.0, 0.0, -501.0); + drawTexture(QPointF(0.0, 0.0), m_backgroundTexture); - // restore original state - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); + // restore original state + glMatrixMode(GL_PROJECTION); + } + glPopMatrix(); + glMatrixMode(GL_MODELVIEW); + } glPopMatrix(); // draw orbital planes @@ -383,29 +399,33 @@ void PulsarAnimationWidget::paintGL() // companion's plane (only if not identical with pulsar's) if(m_companionSemiMajorAxis != m_pulsarSemiMajorAxis) { glPushMatrix(); - glRotatef(90.0, 1.0, 0.0, 0.0); - - // separate them slightly in case of overlap - // based on ugly mass diff check (no collision detection) - // single known problematic pair: (m_c=1.4, m_p=1.5) - if((int)(10*(m_pulsarMass-m_companionMass)+0.5) == 1){ - glTranslatef(0.0, 0.0, 0.01); + { + glRotatef(90.0, 1.0, 0.0, 0.0); + + // separate them slightly in case of overlap + // based on ugly mass diff check (no collision detection) + // single known problematic pair: (m_c=1.4, m_p=1.5) + if((int)(10*(m_pulsarMass-m_companionMass)+0.5) == 1){ + glTranslatef(0.0, 0.0, 0.01); + } + + gluDisk(m_quadricCompanionOrbitPlane, + m_companionSemiMajorAxis - sizeOffset, + m_companionSemiMajorAxis + sizeOffset, + 64, 1); } - - gluDisk(m_quadricCompanionOrbitPlane, - m_companionSemiMajorAxis - sizeOffset, - m_companionSemiMajorAxis + sizeOffset, - 64, 1); glPopMatrix(); } // pulsar's plane glPushMatrix(); - glRotatef(90.0, 1.0, 0.0, 0.0); - gluDisk(m_quadricPulsarOrbitPlane, - m_pulsarSemiMajorAxis - sizeOffset, - m_pulsarSemiMajorAxis + sizeOffset, - 64, 1); + { + glRotatef(90.0, 1.0, 0.0, 0.0); + gluDisk(m_quadricPulsarOrbitPlane, + m_pulsarSemiMajorAxis - sizeOffset, + m_pulsarSemiMajorAxis + sizeOffset, + 64, 1); + } glPopMatrix(); } }