REMOVED: the DrawModel function from classifierInterface (they all do exactly the...
[mldemos:baraks-mldemos.git] / Core / glUtils.h
1 #ifndef GLUTILS_H\r
2 #define GLUTILS_H\r
3 \r
4 /**\r
5  *  From NinjaRat\r
6  *  http://musingsofninjarat.wordpress.com/spheres-through-triangle-tessellation/\r
7  *\r
8  */\r
9 \r
10 #include <stdlib.h>\r
11 #include <stdio.h>\r
12 #include <math.h>\r
13 #include <vector>\r
14 #include <mymaths.h>\r
15 \r
16 #include <QVector>\r
17 #include <QMatrix4x4>\r
18 #include <QVector3D>\r
19 #include <QtOpenGL>\r
20 #include <QGLFunctions>\r
21 \r
22 #ifndef GL_MULTISAMPLE\r
23 #define GL_MULTISAMPLE 0x809D\r
24 #define GL_POINT_SPRITE 0x8861\r
25 #define GL_COORD_REPLACE 0x8862\r
26 #define GL_PROGRAM_POINT_SIZE_EXT 0x8642\r
27 #endif\r
28 \r
29 \r
30 #define rat_octahedron_solid_base       1\r
31 #define rat_icosahedron_solid_base      2\r
32 \r
33 #define _A 0.525731112119133606f\r
34 #define _B 0.850650808352039932f\r
35 \r
36 #ifndef MATH_PI\r
37 #       ifndef M_PI\r
38 #               define MATH_PI 3.14159f\r
39 #       else\r
40 #               define MATH_PI M_PI\r
41 #       endif\r
42 #endif\r
43 \r
44 \r
45 struct GLObject\r
46 {\r
47     QVector<QVector3D> vertices;\r
48     QVector<QVector3D> normals;\r
49     QVector<QVector4D> colors;\r
50     QVector<QVector4D> barycentric;\r
51     QMatrix4x4 model;\r
52     QString objectType;\r
53     QString style;\r
54 };\r
55 \r
56 struct GLLight\r
57 {\r
58     GLfloat ambientLight[4];\r
59     GLfloat diffuseLight[4];\r
60     GLfloat specularLight[4];\r
61     GLfloat position[4];\r
62     GLLight();\r
63     GLLight(float x, float y, float z);\r
64     void SetPosition(float x, float y, float z);\r
65     void SetAmbient(float r, float g, float b, float a=1.f);\r
66     void SetDiffuse(float r, float g, float b, float a=1.f);\r
67     void SetSpecular(float r, float g, float b, float a=1.f);\r
68 };\r
69 \r
70 extern unsigned int octa_indices[8][3];\r
71 extern float octa_verts[6][3];\r
72 extern unsigned int icosa_indices[20][3];\r
73 extern float icosa_verts[12][3];\r
74 extern inline void normalize_vert(float *a);\r
75 extern void draw_recursive_tri(float *a,float *b,float *c,unsigned int div,float r);\r
76 extern void DrawTessellatedSphere(float radius=1.f, unsigned int detail=3,int solid_base=1);\r
77 extern void DrawStandardSphere(double r=1.f, int lats=32, int longs=32);\r
78 extern void DrawSphereIsolines(double r=1.f, int segments=64);\r
79 extern GLuint DrawGaussian(float *mean, float *eigVal, float *eigVec, float prior=1.f, bool wireframe=true,\r
80                                         float colorRed=0.5f, float colorGreen=0.5f, float colorBlue=0.5f);\r
81 extern GLuint DrawMeshGrid(float *values, float *mins, float *maxes, int xSteps, int ySteps, int valueDim);\r
82 extern std::pair<QVector<QVector3D>, QMatrix4x4> DrawGaussian(float radius, float *mean, float *eigVal, float *eigVec);\r
83 extern std::pair<QVector<QVector3D>, QMatrix4x4> DrawGaussianLines(float radius, float *mean, float *eigVal, float *eigVec);\r
84 extern GLObject GenerateMeshGrid(fvec &gridPoints, int xSteps, fvec mins, fvec maxes, int xInd=0, int yInd=1, int zInd=2);\r
85 extern GLObject GenerateMeshGrid(float *gridPoints, int xSteps, int ySteps, fvec mins, fvec maxes, int xInd=0, int yInd=1, int zInd=2);\r
86 \r
87 #endif // GLUTILS_H\r