From 88d5a271d2e75aef2249d450d325b84fd0e21207 Mon Sep 17 00:00:00 2001 From: Stefan Suhren Date: Mon, 14 Dec 2015 14:52:52 +0100 Subject: Make the radius the real one and add one for the circles --- src/gldisc.cpp | 29 +++++++++++++++++++---------- src/gldisc.h | 1 + 2 files changed, 20 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/gldisc.cpp b/src/gldisc.cpp index 48cd8be..a2c22b5 100644 --- a/src/gldisc.cpp +++ b/src/gldisc.cpp @@ -1,13 +1,19 @@ #include "gldisc.h" -GLDisc::GLDisc(double radius, double height, int sides, GLColorRgba color, QString textureFile) - :GLBody(radius, color, textureFile) +GLDisc::GLDisc(double radius, double height, int sides, GLColorRgba color, + QString textureFile) + : GLBody(sqrt(pow(radius, 2) + pow(0.5 * height, 2)), color, textureFile) { m_height = height; m_sides = sides; + + m_center = v_Z * 0.5 * m_height; + + m_circleRadius = radius; } -void GLDisc::makeSurface(QVector *pointContainer, QVector *indexContainer) +void GLDisc::makeSurface(QVector *pointContainer, + QVector *indexContainer) { GLBody::makeSurface(pointContainer, indexContainer); @@ -15,25 +21,28 @@ void GLDisc::makeSurface(QVector *pointContainer, QVector *ind m_points->append(GLPoint(v_Zero, -v_Z, QVector3D(0.5, 0.5, 0.0), m_color)); - for(int side = 0; side < m_sides; side++) + for (int side = 0; side < m_sides; side++) { QVector2D tmp = calculatePoint(side * 2 * M_PI / m_sides); QVector2D tmpTextCoo = (0.5 * tmp) + QVector2D(0.5, 0.5); - m_points->append(GLPoint(m_radius * tmp, -v_Z, tmpTextCoo, m_color)); - m_points->append(GLPoint(m_radius * tmp, tmp, tmpTextCoo, m_color)); - m_points->append(GLPoint(QVector3D(m_radius * tmp, m_height), tmp, tmpTextCoo, m_color)); - m_points->append(GLPoint(QVector3D(m_radius * tmp, m_height), v_Z, tmpTextCoo, m_color)); + m_points->append(GLPoint(m_circleRadius * tmp, -v_Z, tmpTextCoo, m_color)); + m_points->append(GLPoint(m_circleRadius * tmp, tmp, tmpTextCoo, m_color)); + m_points->append(GLPoint(QVector3D(m_circleRadius * tmp, m_height), tmp, tmpTextCoo, + m_color)); + m_points->append(GLPoint(QVector3D(m_circleRadius * tmp, m_height), v_Z, tmpTextCoo, + m_color)); } - m_points->append(GLPoint(m_height * v_Z, v_Z, QVector3D(0.5, 0.5, 0.0), m_color)); + m_points->append(GLPoint(m_height * v_Z, v_Z, QVector3D(0.5, 0.5, 0.0), + m_color)); m_nextPoint = m_points->size(); m_firstIndex = m_indices->size(); - for(int side = 0; side < m_sides - 1; side++) + for (int side = 0; side < m_sides - 1; side++) { m_indices->append(m_firstPoint); m_indices->append(m_firstPoint + 1 + 4 * side); diff --git a/src/gldisc.h b/src/gldisc.h index 5031e84..bd9d99d 100644 --- a/src/gldisc.h +++ b/src/gldisc.h @@ -17,6 +17,7 @@ private: QVector2D calculatePoint(double sideAngle); double m_height; + double m_circleRadius; int m_sides; }; -- cgit v1.2.3-70-g09d2