Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ElmerCSC
GitHub Repository: ElmerCSC/elmerfem
Path: blob/devel/post/src/graphics/graphics.c
3203 views
1
/*****************************************************************************
2
*
3
* Elmer, A Finite Element Software for Multiphysical Problems
4
*
5
* Copyright 1st April 1995 - , CSC - IT Center for Science Ltd., Finland
6
*
7
* This program is free software; you can redistribute it and/or
8
* modify it under the terms of the GNU General Public License
9
* as published by the Free Software Foundation; either version 2
10
* of the License, or (at your option) any later version.
11
*
12
* This program is distributed in the hope that it will be useful,
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
* GNU General Public License for more details.
16
*
17
* You should have received a copy of the GNU General Public License
18
* along with this program (in file fem/GPL-2); if not, write to the
19
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20
* Boston, MA 02110-1301, USA.
21
*
22
*****************************************************************************/
23
24
/*******************************************************************************
25
*
26
* Graphics main module & some utilities
27
*
28
*******************************************************************************
29
*
30
* Author: Juha Ruokolainen
31
*
32
* Address: CSC - IT Center for Science Ltd.
33
* Keilaranta 14, P.O. BOX 405
34
* 02101 Espoo, Finland
35
* Tel. +358 0 457 2723
36
* Telefax: +358 0 457 2302
37
* EMail: [email protected]
38
*
39
* Date: 27 Sep 1995
40
*
41
* Modified by:
42
*
43
* Date of modification:
44
*
45
* $Id: graphics.c,v 1.4 2003/02/06 09:37:50 jpr Exp $
46
*
47
* $Log: graphics.c,v $
48
* Revision 1.4 2003/02/06 09:37:50 jpr
49
* *** empty log message ***
50
*
51
* Revision 1.3 2001/07/06 11:55:24 jpr
52
* *** empty log message ***
53
*
54
* Revision 1.2 1998/07/31 13:36:54 jpr
55
*
56
* Added id, started log.
57
*
58
*
59
******************************************************************************/
60
61
#define MODULE_GRAPHICS
62
63
#include "../elmerpost.h"
64
65
void gra_clip_plane( int plane, double equation[] )
66
{
67
glClipPlane( (int)GL_CLIP_PLANE0+plane, equation );
68
glEnable( (int)GL_CLIP_PLANE0+plane );
69
}
70
71
void gra_disable_clip( int plane )
72
{
73
glDisable( (int)GL_CLIP_PLANE0+plane );
74
}
75
76
void gra_init()
77
{
78
GLfloat pos[4] = { 0.0,0.0,1.0,0.0 };
79
80
GLfloat amb[4] = { 0.2,0.2,0.2,1.0 };
81
GLfloat spc[4] = { 1.0,1.0,1.0,1.0 };
82
GLfloat dif[4] = { 0.8,0.8,0.8,1.0 };
83
84
glPixelStorei( GL_PACK_ALIGNMENT, 1 );
85
glPixelStorei( GL_UNPACK_ALIGNMENT, 1 );
86
87
glMatrixMode(GL_PROJECTION);
88
89
glLoadIdentity();
90
gluPerspective( 30.0,1.0,1.0,20.0 );
91
glMatrixMode( GL_MODELVIEW );
92
glLoadIdentity();
93
94
glColorMaterial( GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE );
95
glEnable( GL_COLOR_MATERIAL );
96
97
glLightModeli( GL_LIGHT_MODEL_TWO_SIDE,1 );
98
glLightModelf( GL_LIGHT_MODEL_LOCAL_VIEWER,1.0 );
99
glEnable( GL_LIGHTING );
100
101
glLightfv( GL_LIGHT0, GL_POSITION, pos );
102
glLightfv( GL_LIGHT0, GL_DIFFUSE, dif );
103
glLightfv( GL_LIGHT0, GL_SPECULAR, spc );
104
glLightfv( GL_LIGHT0, GL_AMBIENT, amb );
105
106
glEnable( GL_LIGHT0 );
107
108
gluLookAt( 0.0,0.0,5.0,0.0,0.0,0.0,0.0,1.0,0.0 );
109
110
glEnable( GL_NORMALIZE );
111
glEnable( GL_DEPTH_TEST );
112
113
glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
114
glDisable( GL_BLEND );
115
116
glCullFace( GL_BACK );
117
glDisable( GL_CULL_FACE );
118
glDepthRange( 0.0,1.0 );
119
glDepthMask( GL_TRUE );
120
glDepthFunc( GL_LEQUAL );
121
122
// Enable anti-aliasing:
123
#if 0
124
glEnable( GL_BLEND );
125
glEnable( GL_LINE_SMOOTH );
126
glEnable( GL_POLYGON_SMOOTH );
127
#endif
128
}
129
130
void gra_draw_viewport_frame()
131
{
132
float Color[4];
133
134
GLboolean DepthEnabled;
135
136
glLineWidth( 1.0 );
137
138
glGetBooleanv( GL_DEPTH_TEST,&DepthEnabled );
139
glDisable( GL_DEPTH_TEST );
140
141
glPushMatrix();
142
glLoadIdentity();
143
144
glMatrixMode( GL_PROJECTION );
145
glPushMatrix();
146
glLoadIdentity();
147
148
glGetFloatv( GL_CURRENT_COLOR,Color );
149
150
glColor4f( 0.0,1.0,0.0,1.0 );
151
152
glBegin( GL_LINE_LOOP );
153
glVertex2f(-1.0,-1.0 );
154
glVertex2f( 1.0,-1.0 );
155
glVertex2f( 1.0, 1.0 );
156
glVertex2f(-1.0, 1.0 );
157
glEnd();
158
159
glColor4fv( Color );
160
161
glPopMatrix();
162
163
glMatrixMode( GL_MODELVIEW );
164
glPopMatrix();
165
if ( DepthEnabled ) glEnable( GL_DEPTH_TEST );
166
}
167
168
void gra_set_projection( camera_proj_t Proj,double FieldAngle,
169
double lx,double hx,double ly,double hy,double Near,double Far, int frame )
170
{
171
int ilx = (GraphicsXSize-1)*lx + 0.5;
172
int iwidth = (GraphicsXSize-1)*(hx-lx) + 0.5;
173
174
int ily = (GraphicsYSize-1)*ly + 0.5;
175
int iheight = (GraphicsYSize-1)*(hy-ly) + 0.5;
176
177
double Aspect = (double)iwidth/(double)iheight;
178
179
glViewport( ilx,ily,iwidth,iheight );
180
181
if ( frame ) gra_draw_viewport_frame();
182
183
glMatrixMode( GL_PROJECTION );
184
185
glLoadIdentity();
186
187
if ( Proj == camera_proj_ortho )
188
glOrtho( -Aspect,Aspect,-1.0,1.0,Near,Far );
189
else
190
gluPerspective( FieldAngle,Aspect,Near,Far );
191
192
glMatrixMode( GL_MODELVIEW );
193
}
194
195
void gra_bbox( double XMin,double XMax,double YMin,double YMax,double ZMin,double ZMax )
196
{
197
GLboolean TexEnabled,DepthEnabled;
198
void gra_set_colormap( colormap_t * );
199
colormap_t *gra_get_colormap(), *SaveColorMap;
200
201
#if 0
202
glGetBooleanv(GL_TEXTURE_1D,&TexEnabled);
203
if ( TexEnabled ) glDisable(GL_TEXTURE_1D);
204
#else
205
SaveColorMap = gra_get_colormap();
206
gra_set_colormap( NULL );
207
#endif
208
209
#if 0
210
glGetBooleanv(GL_DEPTH_TEST,&DepthEnabled);
211
if ( DepthEnabled ) glDisable(GL_DEPTH_TEST);
212
#endif
213
glLineWidth( 1.0 );
214
215
glDisable( GL_LIGHTING );
216
glBegin(GL_LINE_LOOP);
217
glVertex3f( XMin, YMin, ZMin );
218
glVertex3f( XMax, YMin, ZMin );
219
glVertex3f( XMax, YMax, ZMin );
220
glVertex3f( XMin, YMax, ZMin );
221
glEnd();
222
223
glBegin(GL_LINE_LOOP);
224
glVertex3f( XMin, YMin, ZMax );
225
glVertex3f( XMax, YMin, ZMax );
226
glVertex3f( XMax, YMax, ZMax );
227
glVertex3f( XMin, YMax, ZMax );
228
glEnd();
229
230
glBegin(GL_LINES);
231
glVertex3f( XMin, YMin, ZMin );
232
glVertex3f( XMin, YMin, ZMax );
233
234
glVertex3f( XMax, YMin, ZMin );
235
glVertex3f( XMax, YMin, ZMax );
236
237
glVertex3f( XMax, YMax, ZMin );
238
glVertex3f( XMax, YMax, ZMax );
239
240
glVertex3f( XMin, YMax, ZMin );
241
glVertex3f( XMin, YMax, ZMax );
242
glEnd();
243
244
glBegin(GL_LINES);
245
glVertex3f( 0.0,0.0,0.0 );
246
glVertex3f( 0.5,0.0,0.0 );
247
248
glVertex3f( 0.6,-0.1,0.0 );
249
glVertex3f( 0.8, 0.1,0.0 );
250
251
glVertex3f( 0.6, 0.1,0.0 );
252
glVertex3f( 0.8,-0.1,0.0 );
253
glEnd();
254
255
glBegin(GL_LINES);
256
glVertex3f( 0.0,0.0,0.0 );
257
glVertex3f( 0.0,0.5,0.0 );
258
259
glVertex3f(-0.1, 0.7,0.0 );
260
glVertex3f( 0.0, 0.6,0.0 );
261
262
glVertex3f( 0.0, 0.6,0.0 );
263
glVertex3f( 0.1, 0.7,0.0 );
264
265
glVertex3f( 0.0, 0.6,0.0 );
266
glVertex3f( 0.0, 0.5,0.0 );
267
glEnd();
268
269
glBegin(GL_LINES);
270
glVertex3f( 0.0,0.0,0.0 );
271
glVertex3f( 0.0,0.0,0.5 );
272
273
glVertex3f( -0.1, 0.1, 0.6 );
274
glVertex3f( 0.1, 0.1, 0.6 );
275
276
glVertex3f( 0.1, 0.1, 0.6 );
277
glVertex3f( -0.1,-0.1, 0.6 );
278
279
glVertex3f( -0.1,-0.1, 0.6 );
280
glVertex3f( 0.1,-0.1, 0.6 );
281
glEnd();
282
glEnable( GL_LIGHTING );
283
284
#if 0
285
if ( TexEnabled ) glEnable( GL_TEXTURE_1D );
286
#else
287
gra_set_colormap( SaveColorMap );
288
#endif
289
290
#if 0
291
if ( DepthEnabled ) glEnable( GL_DEPTH_TEST );
292
#endif
293
}
294
295
296