#include "sphereglrenderer.h" #if !defined (_USE_MATH_DEFINES) #define _USE_MATH_DEFINES #endif #include #include SphereGlRenderer::SphereGlRenderer() { } SphereGlRenderer::SphereGlRenderer(int nPoints) { init(nPoints); } void SphereGlRenderer::init(int nPoints) { initWithGlLineStrip(nPoints); } void SphereGlRenderer::render() { if(!m_indices.empty()) { const size_t& size = m_indices.size(); for(int i=0; i(size); ++i) glVertex3fv(&m_values[m_indices[i]][0]); } else { const size_t& size = m_values.size(); for(int i=0; i(size); ++i) glVertex3fv(&m_values[i][0]); } } const std::vector &SphereGlRenderer::getValues() const { return m_values; } const std::vector &SphereGlRenderer::getThetaPhiValues() const { return m_thetaPhiValues; } const std::vector &SphereGlRenderer::getIndices() const { return m_indices; } void SphereGlRenderer::initWithGlLineStrip(int nPoints) { int nPointsPhi = nPoints; int nPointsTheta = nPoints; int endPhiSecondPart = nPointsPhi; int firstPart = nPointsTheta*nPointsPhi; int secondPart = ((endPhiSecondPart-1)*nPointsTheta)+endPhiSecondPart-1; m_values.resize(firstPart+1); m_thetaPhiValues.resize(m_values.size()); m_indices.resize(m_values.size()+secondPart); float finalTheta = (float)(M_PI*2.0f); float finalPhi = finalTheta; float stepTheta = finalTheta / ((float)nPointsTheta); float stepPhi = finalPhi / ((float)nPointsPhi); float cosPhi, sinPhi, cosTheta, sinTheta, lastPhi = 0.0f; float currentTheta = 0; size_t currentIndex = 0; bool useReverse = true; bool reverse = false; for ( int i=0; i