summaryrefslogtreecommitdiffstats
path: root/examples/demo/opengl/gllandscape.h
diff options
context:
space:
mode:
Diffstat (limited to 'examples/demo/opengl/gllandscape.h')
-rw-r--r--examples/demo/opengl/gllandscape.h98
1 files changed, 98 insertions, 0 deletions
diff --git a/examples/demo/opengl/gllandscape.h b/examples/demo/opengl/gllandscape.h
new file mode 100644
index 0000000..ca87676
--- /dev/null
+++ b/examples/demo/opengl/gllandscape.h
@@ -0,0 +1,98 @@
+#ifndef GLLANDSCAPE_H
+#define GLLANDSCAPE_H
+
+#include <qgl.h>
+
+class GLLandscape : public QGLWidget
+{
+ Q_OBJECT
+
+public:
+ GLLandscape( QWidget * parent = 0, const char * name = 0 );
+ ~GLLandscape();
+
+public slots:
+ void rotateX( int );
+ void rotateY( int );
+ void rotateZ( int );
+ void zoom( int );
+ void fractalize();
+ void resetGrid();
+
+ void setWireframe( int );
+ void setFilled( int );
+ void setSmoothShaded( int );
+ void setLandscape( int );
+ void setGridSize( int );
+
+ void toggleWaveAnimation( bool );
+
+signals:
+ void rotatedX( int );
+ void rotatedY( int );
+ void rotatedZ( int );
+
+protected:
+ void paintGL();
+ void initializeGL();
+ void resizeGL( int w, int h );
+ void mousePressEvent( QMouseEvent * );
+ void mouseReleaseEvent( QMouseEvent * );
+ void mouseMoveEvent( QMouseEvent * );
+ void timerEvent( QTimerEvent * );
+ void showEvent( QShowEvent * );
+ void hideEvent( QHideEvent * );
+
+ void drawWireframe();
+ void drawFilled();
+ void drawSmoothShaded();
+ void drawAxis();
+ void drawCube();
+
+private:
+ enum Axis { XAxis, YAxis, ZAxis };
+ enum RenderModes { Wireframe, Filled, SmoothShaded, Landscape };
+ enum Views { DefaultView, CurrentView, AxisView };
+
+ void rotate( GLfloat deg, Axis axis );
+ void calculateVertexNormals();
+ void averageNormals();
+ void createGrid( int size );
+ void destroyGrid();
+ void initDisplayLists();
+
+ RenderModes mode;
+
+ typedef struct grid_normals {
+ double u[3], l[3];
+ } gridNormals;
+
+ // Structure used to store the vertex normals for the landscape
+ typedef struct avg_normals {
+ double n[3];
+ } avgNormals;
+
+ typedef struct viewMatrix {
+ GLfloat model[4][4]; // OpenGL model view matrix for the view
+ GLfloat projection[4][4]; // OpenGL projection matrix for the view
+ } viewMatrix;
+
+ double ** landscape; // Height field data
+ double ** wave; // Wave data
+ double ** wt; // Parameterized wave data
+ gridNormals ** normals;
+ avgNormals ** vertexNormals;
+ viewMatrix views[3];
+
+ QPoint oldPos;
+ GLfloat oldX, oldY, oldZ;
+ bool initFractals;
+ int gridSize, gridHalf;
+ bool animationRunning;
+ bool mouseButtonDown;
+ int cubeTimer, animTimer;
+ GLfloat cubeRot;
+ GLint axisList, cubeList;
+};
+
+#endif