diff options
| author | Stefan Suhren <suhren.stefan@fh-swf.de> | 2015-11-13 12:15:53 +0100 |
|---|---|---|
| committer | Stefan Suhren <suhren.stefan@fh-swf.de> | 2015-11-13 12:15:53 +0100 |
| commit | 735f71d208ef91a2f5cb64c8865446fa7a46de35 (patch) | |
| tree | d445f1d37fd77b061d3f9ec92fcfd032fbeeac08 /src/glsphere.cpp | |
| parent | 0f8ceacadd3190123cd736260a0401baa8130239 (diff) | |
| download | Multimedia-735f71d208ef91a2f5cb64c8865446fa7a46de35.tar.gz Multimedia-735f71d208ef91a2f5cb64c8865446fa7a46de35.zip | |
Add GLSphere with a points cloud
Diffstat (limited to 'src/glsphere.cpp')
| -rw-r--r-- | src/glsphere.cpp | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/src/glsphere.cpp b/src/glsphere.cpp new file mode 100644 index 0000000..d77ef95 --- /dev/null +++ b/src/glsphere.cpp @@ -0,0 +1,52 @@ +#include "glsphere.h" + +GLSphere::GLSphere(double radius, int stacks, int slices) + : GLBody(radius) +{ + m_stacks = stacks; + m_slices = slices; +} + +void GLSphere::makeSurface(QVector<GLPoint> *pointContainer, + QVector<GLshort> *indexContainer) +{ + GLBody::makeSurface(pointContainer, indexContainer); + + QVector3D n0 = v_XYZ; //dummy normal + QVector3D t0 = QVector3D(0.0, 0.0, 0.0); //dummy texture + + QVector3D northpol = v_Y * m_radius; + QVector3D southpol = -v_Y * m_radius; + + m_firstPoint = m_points->size(); + + for (int slice = 1; slice < m_slices; slice += 2) + { + m_points->append(GLPoint(northpol, n0, t0, GLColorRgba::clMagenta)); + + for (int stack = 1; stack < m_stacks; stack++) + { + m_points->append(GLPoint(calculatePoint(2 * M_PI * slice / m_slices, + stack * M_PI / m_stacks), n0, t0, + m_color)); + + m_points->append(GLPoint(calculatePoint(2 * M_PI * (slice - 1) / m_slices, + stack * M_PI / m_stacks), n0, t0, + m_color)); + + } + + m_points->append(GLPoint(southpol, n0, t0, GLColorRgba::clMagenta)); + } + + m_nextPoint = m_points->size(); +} + +QVector3D GLSphere::calculatePoint(double sliceRotation, double stackRotation) +{ + double x = m_radius * sin(stackRotation) * sin(sliceRotation); + double y = m_radius * cos(stackRotation); + double z = m_radius * sin(stackRotation) * cos(sliceRotation); + + return QVector3D(x, y, z); +} |
