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

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

Modified scaling grids and heightmaps in order to match the grid and the heightmap. It is still needed to rendering axis.

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, 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, 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        glScalef(1.0 / __axisScale.x, __axisScale.y / __axisScale.x, __axisScale.z / __axisScale.x);
21
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 + _axisMin.y);
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 + _axisMin.z);
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 + _axisMin.x);
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.