source: trunk/vizservers/nanovis/Grid.cpp @ 828

Last change on this file since 828 was 776, checked in by vrinside, 17 years ago

Add 3D surface plot and grid rendering

File size: 4.3 KB
Line 
1#include <GL/glew.h>
2#include <GL/gl.h>
3#include "Grid.h"
4
5Grid::Grid()
6: _axisColor(1.0f, 1.0f, 1.0f), _font(0), _axisGridLineCount(5.0f, 5.0f, 5.0f),
7_axisMin(0.0f, 0.0f, 0.0f), _axisMax(1.0f, 1.0f, 1.0f), _gridLineColor(1.0f, 1.0f, 1.0f), _visible(false)
8{
9        __axisScale = _axisMax - _axisMin;
10    _axisName[0] = "X";
11    _axisName[1] = "Y";
12    _axisName[2] = "Z";
13}
14
15void Grid::render()
16{
17        glPushMatrix();
18        glEnable(GL_DEPTH_TEST);
19
20        //glTranslatef(0.5f, 0.5f, 0.5f);
21        glScalef(1.0f, __axisScale.y / __axisScale.x, __axisScale.z / __axisScale.x);
22        glTranslatef(-0.5f, -0.5f, -0.5f);
23        glLineWidth(2.0f);
24    glColor3f(_axisColor.x, _axisColor.y, _axisColor.z);
25
26        glBegin(GL_LINES);
27                glVertex3f(0.0f,0.0f,0.0f);
28                glVertex3f(1.2f,0.0f,0.0f);
29                glVertex3f(0.0f,0.0f,0.0f);
30                glVertex3f(0.0f,1.2f,0.0f);
31                glVertex3f(0.0f, 0.0f, 0.0f);
32                glVertex3f(0.0f, 0.0f, 1.2f);
33        glEnd();
34
35    glDisable(GL_TEXTURE_2D);
36        glLineWidth(1.0f);
37        glEnable(GL_BLEND);
38    glColor3f(_gridLineColor.x, _gridLineColor.y, _gridLineColor.z);
39        glBegin(GL_LINES);
40
41        float linecount = 2.0f;
42        float linecountY = 4.0f;
43                // +y
44                for (int i = 1; i <= (int) _axisGridLineCount.y; ++i)
45                {
46                        glVertex3f(0.0f, i / _axisGridLineCount.y, 0.0f);
47                        glVertex3f(1.1f, i / _axisGridLineCount.y, 0.0f);
48                }
49               
50                for (int i = 1; i <= (int) _axisGridLineCount.x; ++i)
51                {
52                        glVertex3f(i / _axisGridLineCount.x, 0.0f, 0.0f);
53                        glVertex3f(i / _axisGridLineCount.x, 1.0f, 0.0f);
54                }
55
56                for (int i = 1; i <= (int) _axisGridLineCount.z; ++i)
57                {
58                        glVertex3f(0.0f, 0.0f, i / _axisGridLineCount.z);
59                        glVertex3f(0.0f, 1.0f, i / _axisGridLineCount.z);
60                }
61
62                for (int i = 1; i <= (int) _axisGridLineCount.y; ++i)
63                {
64                        glVertex3f(0.0f, i / _axisGridLineCount.y, 0.0f);
65                        glVertex3f(0.0f, i / _axisGridLineCount.y, 1.0f);
66                }
67
68                for (int i = 1; i <= (int) _axisGridLineCount.x; ++i)
69                {
70                        glVertex3f(i / _axisGridLineCount.x,0.0f, 0.0f);
71                        glVertex3f(i / _axisGridLineCount.x,0.0f, 1.1f);
72                }
73
74                for (int i = 1; i <= (int) _axisGridLineCount.z; ++i)
75                {
76                        glVertex3f(0.0f, 0.0f, i / _axisGridLineCount.z);
77                        glVertex3f(1.1f, 0.0f, i / _axisGridLineCount.z);
78                }
79        glEnd();
80
81        if (_font)
82        {
83                double x = 1.0f, y = 0.0f, z = 0.0f;
84                double mv[16], prjm[16];
85                int viewport[4];
86                double winx, winy, winz;
87                glGetDoublev(GL_MODELVIEW_MATRIX, mv);
88                glGetDoublev(GL_PROJECTION_MATRIX, prjm);
89                glGetIntegerv(GL_VIEWPORT, viewport);
90
91               
92                _font->begin();
93                if (gluProject(1.2, 0.0, 0.0, mv, prjm, viewport, &winx, &winy, &winz))
94                {
95                        glLoadIdentity();
96                        glTranslatef((int) winx, viewport[3] - (int) winy, 0);
97                        _font->draw((const char*) _axisName[0]);
98                }
99                               
100                if (gluProject(0.0, 1.2, 0.0, mv, prjm, viewport, &winx, &winy, &winz))
101                {
102                        glLoadIdentity();
103                        glTranslatef((int) winx, viewport[3] - (int)winy, 0);
104                        _font->draw((const char*) _axisName[1]);
105                }
106
107                if (gluProject(0.0, 0.0, 1.2, mv, prjm, viewport, &winx, &winy, &winz))
108                {
109                        glLoadIdentity();
110                        glTranslatef((int) winx, (int) viewport[3] - (int)winy, 0.0f);
111                        _font->draw((const char*) _axisName[2]);
112                }
113
114                glColor4f(1.0f, 1.0f, 0.0f, 0.5f);
115                char buff[20];
116                // Y
117                for (int i = 1; i <= (int) _axisGridLineCount.y; ++i)
118                {
119                        if (gluProject(1.2, i / _axisGridLineCount.y, 0.0f, mv, prjm, viewport, &winx, &winy, &winz))
120                        {
121                                glLoadIdentity();
122                                glTranslatef((int) winx, (int) viewport[3] - (int)winy, 0.0f);
123                                sprintf(buff, "%0.2f", __axisScale.y / _axisGridLineCount.y * i);
124                                _font->draw(buff);
125                        }
126                }
127
128                for (int i = 1; i <= (int) _axisGridLineCount.z; ++i)
129                {
130                        if (gluProject(1.2, 0.0, i / _axisGridLineCount.z , mv, prjm, viewport, &winx, &winy, &winz))
131                        {
132                                glLoadIdentity();
133                                glTranslatef((int) winx, (int) viewport[3] - (int)winy, 0.0f);
134                                sprintf(buff, "%0.2f", __axisScale.z / _axisGridLineCount.z * i);
135                                _font->draw(buff);
136                        }
137                }
138
139                for (int i = 1; i <= (int) _axisGridLineCount.x; ++i)
140                {
141                        if (gluProject( i / _axisGridLineCount.x, 0.0f, 1.2, mv, prjm, viewport, &winx, &winy, &winz))
142                        {
143                                glLoadIdentity();
144                                glTranslatef((int) winx, (int) viewport[3] - (int)winy, 0.0f);
145                                sprintf(buff, "%0.2f", __axisScale.x / _axisGridLineCount.x * i);
146                                _font->draw(buff);
147                        }
148                }
149
150                _font->end();
151        };
152
153        glPopMatrix();
154        glDisable(GL_DEPTH_TEST);
155        glDisable(GL_BLEND);
156}
157 
158void Grid::setFont(R2Fonts* font)
159{
160//      if (font == _font) return;
161//      if (font) font->addRef();
162//      if (_font) _font->unrefDelete();
163       
164        _font = font;
165}
Note: See TracBrowser for help on using the repository browser.