From 90ac955006749ecf6ea021bc7cf736a6c21095af Mon Sep 17 00:00:00 2001 From: Mika Salmela Date: Fri, 3 Oct 2014 16:47:44 +0300 Subject: Fix surface normals on ascending/descending MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Normals and triangles are generated according to data direction. Task-number: QTRD-3160 Change-Id: Ia4286467682628930da3d82b204fd1ec078a396a Reviewed-by: Miikka Heikkinen Reviewed-by: Tomi Korpipää --- src/datavisualization/utils/surfaceobject_p.h | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) (limited to 'src/datavisualization/utils/surfaceobject_p.h') diff --git a/src/datavisualization/utils/surfaceobject_p.h b/src/datavisualization/utils/surfaceobject_p.h index f373eb5d..39d10445 100644 --- a/src/datavisualization/utils/surfaceobject_p.h +++ b/src/datavisualization/utils/surfaceobject_p.h @@ -49,6 +49,13 @@ public: Undefined }; + enum DataDimensions { + BothAscending = 0, + XDescending = 1, + ZDescending = 2, + BothDescending = XDescending | ZDescending + }; + public: SurfaceObject(Surface3DRenderer *renderer); virtual ~SurfaceObject(); @@ -64,7 +71,7 @@ public: void updateSmoothItem(const QSurfaceDataArray &dataArray, int row, int column, bool polar); void updateCoarseItem(const QSurfaceDataArray &dataArray, int row, int column, bool polar); void createSmoothIndices(int x, int y, int endX, int endY); - void createCoarseIndices(int x, int y, int columns, int rows); + void createCoarseSubSection(int x, int y, int columns, int rows); void createSmoothGridlineIndices(int x, int y, int endX, int endY); void createCoarseGridlineIndices(int x, int y, int endX, int endY); void uploadBuffers(); @@ -78,11 +85,16 @@ public: inline void activateSurfaceTexture(bool value) { m_returnTextureBuffer = value; } private: - QVector3D normal(const QVector3D &a, const QVector3D &b, const QVector3D &c, bool flipNormal); + void createCoarseIndices(GLint *indices, int &p, int row, int upperRow, int j); + void createNormals(int &p, int row, int upperRow, int j); + void createSmoothNormalBodyLine(int &totalIndex, int column); + void createSmoothNormalUpperLine(int &totalIndex); + QVector3D createSmoothNormalBodyLineItem(int x, int y); + QVector3D createSmoothNormalUpperLineItem(int x, int y); + QVector3D normal(const QVector3D &a, const QVector3D &b, const QVector3D &c); void createBuffers(const QVector &vertices, const QVector &uvs, - const QVector &normals, const GLint *indices, - bool changeGeometry); - bool checkFlipNormal(const QSurfaceDataArray &array); + const QVector &normals, const GLint *indices); + void checkDirections(const QSurfaceDataArray &array); inline void getNormalizedVertex(const QSurfaceDataItem &data, QVector3D &vertex, bool polar, bool flipXZ); @@ -103,6 +115,8 @@ private: float m_maxY; GLuint m_uvTextureBuffer; bool m_returnTextureBuffer; + int m_dataDimension; + int m_oldDataDimension; }; QT_END_NAMESPACE_DATAVISUALIZATION -- cgit v1.2.3