diff options
Diffstat (limited to 'src/glsphere.cpp')
| -rw-r--r-- | src/glsphere.cpp | 60 |
1 files changed, 10 insertions, 50 deletions
diff --git a/src/glsphere.cpp b/src/glsphere.cpp index 77cb7f7..1a40540 100644 --- a/src/glsphere.cpp +++ b/src/glsphere.cpp @@ -3,9 +3,8 @@ GLSphere::GLSphere(double radius, int stacks, int slices) : GLBody(radius) { - // Force an even number - m_stacks = stacks / 2 * 2; - m_slices = slices / 2 * 2; + m_stacks = stacks; + m_slices = slices; } void GLSphere::makeSurface(QVector<GLPoint> *pointContainer, @@ -18,70 +17,31 @@ void GLSphere::makeSurface(QVector<GLPoint> *pointContainer, QVector3D northpol = v_Y; QVector3D southpol = -v_Y; - QVector<QVector3D> firstPointRow = calculateRow(0); - - QVector<QVector3D> sliceA = firstPointRow; - QVector<QVector3D> sliceB; + QVector3D point1; + QVector3D point2; m_firstPoint = m_points->size(); for (int slice = 1; slice < m_slices; slice += 2) { - sliceB = calculateRow(slice); - m_points->append(GLPoint(m_radius * northpol, northpol, t0, m_color)); - for (int i = 0; i < m_stacks - 1; i++) + for (int stack = 1; stack < m_stacks; stack++) { - m_points->append(GLPoint(m_radius * sliceA[i], sliceA[i], - t0, m_color)); - - m_points->append(GLPoint(m_radius * sliceB[i], sliceB[i], - t0, m_color)); - } - - m_points->append(GLPoint(m_radius * southpol, southpol, t0, m_color)); + point1 = calculatePoint(2 * M_PI * slice / m_slices, stack * M_PI / m_stacks); + m_points->append(GLPoint(m_radius * point1, point1, t0, m_color)); - sliceA = calculateRow(slice + 1); + point2 = calculatePoint(2 * M_PI * (slice - 1) / m_slices, stack * M_PI / m_stacks); + m_points->append(GLPoint(m_radius * point2, point2, t0, m_color)); - for (int i = m_stacks - 2; i >= 0; i--) - { - m_points->append(GLPoint(m_radius * sliceA[i], sliceA[i], - t0, m_color)); - - m_points->append(GLPoint(m_radius * sliceB[i], sliceB[i], - t0, m_color)); } - m_points->append(GLPoint(m_radius * northpol, northpol, t0, m_color)); + m_points->append(GLPoint(m_radius * southpol, southpol, t0, m_color)); } m_nextPoint = m_points->size(); } -QVector<QVector3D> GLSphere::calculateRow(int slice) -{ - if(slice == m_stacks) - { - return firstRow; - } - - QVector<QVector3D> longitude; - - for (int stack = 1; stack < m_stacks; stack++) - { - longitude.append(calculatePoint(2 * M_PI * slice / m_slices, - stack * M_PI / m_stacks)); - } - - if (slice == 0) - { - firstRow = longitude; - } - - return longitude; -} - QVector3D GLSphere::calculatePoint(double sliceRotation, double stackRotation) { double x = sin(stackRotation) * sin(sliceRotation); |
