text3d.h 5.36 KB
Newer Older
1
2
3
/*******************************************************************************
* CGoGN: Combinatorial and Geometric modeling with Generic N-dimensional Maps  *
* version 0.1                                                                  *
4
* Copyright (C) 2009-2012, IGG Team, LSIIT, University of Strasbourg           *
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
*                                                                              *
* This library is free software; you can redistribute it and/or modify it      *
* under the terms of the GNU Lesser General Public License as published by the *
* Free Software Foundation; either version 2.1 of the License, or (at your     *
* option) any later version.                                                   *
*                                                                              *
* This library is distributed in the hope that it will be useful, but WITHOUT  *
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or        *
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License  *
* for more details.                                                            *
*                                                                              *
* You should have received a copy of the GNU Lesser General Public License     *
* along with this library; if not, write to the Free Software Foundation,      *
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA.           *
*                                                                              *
20
* Web site: http://cgogn.unistra.fr/                                           *
21
22
23
24
25
26
27
28
29
* Contact information: cgogn@unistra.fr                                        *
*                                                                              *
*******************************************************************************/

#ifndef __TEXT_3D__
#define __TEXT_3D__

#include "Utils/GLSLShader.h"
#include "Geometry/vector_gen.h"
sylvain's avatar
sylvain committed
30

Sylvain Thery's avatar
Sylvain Thery committed
31
namespace CGoGN { namespace Utils { namespace SVG { class SVGOut ; } } }
32
33
34
35
36
37

namespace CGoGN
{
namespace Utils
{

Pierre Kraemer's avatar
merge..    
Pierre Kraemer committed
38
class Strings3D : public GLSLShader
39
40
41
42
43
44
45
46
47
48
49
50
51
52
{
protected:
    static const unsigned int WIDTHFONT = 32;

    static const unsigned int REALWIDTHFONT = 18;

    static const unsigned int WIDTHTEXTURE = 512;

    static const unsigned int HEIGHTTEXTURE = 256;

    static const unsigned int CHARSPERLINE = WIDTHTEXTURE/WIDTHFONT;

    static const unsigned int CHARSPERCOL = HEIGHTTEXTURE/WIDTHFONT;

53
54
55
56
57
    static std::string vertexShaderText;

    static std::string fragmentShaderText1;
    static std::string fragmentShaderText2;

58
    static Strings3D*  m_instance0;
59
60
61
62
63
64
65
66
67

	std::vector<std::string> m_strings;

	unsigned int m_nbChars;

    std::vector< std::pair<unsigned int, unsigned int> > m_strpos;

    std::vector< Geom::Vec3f > m_strTranslate;

68
    Utils::VBO* m_vbo1;
69

Sylvain Thery's avatar
Sylvain Thery committed
70
71
    float m_scale;

72
73
    Geom::Vec4f m_color;

74
    unsigned int sendOneStringToVBO(const std::string& str, float **buffer);
75

76
    CGoGNGLuint m_idTexture;
77

78
    CGoGNGLuint m_uniform_texture;
79

80
    CGoGNGLuint m_uniform_scale;
81

82
83
84
    CGoGNGLuint m_uniform_position;

    CGoGNGLuint m_uniform_color;
Sylvain's avatar
Sylvain committed
85
86
87
88
	
	CGoGNGLuint m_uniform_planeX;
	
	CGoGNGLuint m_uniform_planeY;
89
90

public:
Sylvain's avatar
Sylvain committed
91
	Strings3D(bool withBackground = true, const Geom::Vec3f& bgc = Geom::Vec3f(0), bool with_plane=false);
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109

	~Strings3D();

	/**
	 * add astring
	 * @param string to add to pool of string
	 * @return the id of string for rendering
	 */
	unsigned int addString(const std::string& str);

	/**
	 * add astring with its position
	 * @param string to add to pool of string
	 * @param pos the position of text
	 * @return the id of string (future use:updating data)
	 */
	unsigned int addString(const std::string& str, const Geom::Vec3f& pos);

Sylvain Thery's avatar
Sylvain Thery committed
110
111
112
113
114
	/**
	 * clear the string and position database
	 */
	void clear();

115
	/**
untereiner's avatar
untereiner committed
116
	 * once all string are stored, we must send it to the graphic card
117
118
119
120
	 */
	void sendToVBO();

	/**
Sylvain's avatar
Sylvain committed
121
	 * draw one string
122
123
124
125
126
127
128
129
130
	 * @param idSt the id of string
	 * @param pos the position of text
	 */
	void draw(unsigned int idSt, const Geom::Vec3f& pos);

	/**
	* Draw all text stored with their position
	* @param color the color of text
	*/
131
132
	void drawAll(const Geom::Vec4f& color);

Sylvain Thery's avatar
Sylvain Thery committed
133
	void drawAll(const Geom::Vec3f& color){ drawAll( Geom::Vec4f(color[0],color[1],color[2],m_color[3])); }
134

135
136
137
138
139

	/**
	* call once before several draw(id,pos)
	* @param color the color of text
	*/
140
141
	void predraw(const Geom::Vec4f& color);

Sylvain Thery's avatar
Sylvain Thery committed
142
	void predraw(const Geom::Vec3f& color){ predraw( Geom::Vec4f(color[0],color[1],color[2],m_color[3])); }
143

144

145
146
147
148
	/**
	* call just before a draw
	* @param color the color of text
	*/
149
150
	void changeColor(const Geom::Vec4f& color);

Sylvain Thery's avatar
Sylvain Thery committed
151
	void changeColor(const Geom::Vec3f& color){ changeColor( Geom::Vec4f(color[0],color[1],color[2],m_color[3])); }
152
153
154
155
156
157

	/**
	 * change opacity but keep color (0 is totally transparent 1 is totally opaque)
	 * @param opacity
	 */
	void changeOpacity(float op);
158

159
160
161
162
163
164
165
166
167
168
	/**
	* call once after several draw(id,pos)
	*/
	void postdraw();

	/**
	 * set the scale for font rendering
	 * @param scale
	 */
	void setScale(float scale);
Sylvain's avatar
Sylvain committed
169
170
171
172
	
	/**
	* set the plane of rendering for VR rendering
	*/
Sylvain Thery's avatar
Sylvain Thery committed
173
	void setPlane(const Geom::Vec3f& ox, const Geom::Vec3f& oy);
174

175
176
177
178
179
180
181
182
	/**
	 * Update string content
	 * @warning size can not be changed
	 * @param idSt string id
	 * @param str new string content
	 */
	void updateString(unsigned int idSt, const std::string& str);

Sylvain Thery's avatar
Sylvain Thery committed
183
184

	void toSVG(Utils::SVG::SVGOut& svg);
185
};
Pierre Kraemer's avatar
merge..    
Pierre Kraemer committed
186
187
188
189
190

} // namespace Utils

} // namespace CGoGN

191
#endif