Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ElmerCSC
GitHub Repository: ElmerCSC/elmerfem
Path: blob/devel/post/src/camera/testglp.cc
3203 views
1
/*
2
* "fogpot.c" - A test program demonstrating the use of glFog() for
3
* depth-cueing.
4
*/
5
6
#include <GL/glaux.h>
7
#include <GL/glpfile.h>
8
9
10
/*
11
* These #define constants are provided for compatibility between MS Windows
12
* and the rest of the world.
13
*
14
* CALLBACK and APIENTRY are function modifiers under MS Windows.
15
*/
16
17
#ifndef WIN32
18
# define CALLBACK
19
# define APIENTRY
20
#endif /* !WIN32 */
21
22
GLfloat rotation = 0.0;
23
GLPfile *output;
24
25
26
/*
27
* 'reshape_scene()' - Change the size of the scene...
28
*/
29
30
void CALLBACK
31
reshape_scene(GLsizei width, /* I - Width of the window in pixels */
32
GLsizei height) /* I - Height of the window in pixels */
33
{
34
/*
35
* Reset the current viewport and perspective transformation...
36
*/
37
38
glViewport(0, 0, width, height);
39
40
glMatrixMode(GL_PROJECTION);
41
glLoadIdentity();
42
gluPerspective(22.5, (float)width / (float)height, 0.1, 1000.0);
43
44
glMatrixMode(GL_MODELVIEW);
45
}
46
47
48
/*
49
* 'draw_scene()' - Draw a scene containing a cube with a sphere in front of
50
* it.
51
*/
52
53
void CALLBACK
54
draw_scene(void)
55
{
56
static float red_light[4] = { 1.0, 0.0, 0.0, 1.0 };
57
static float red_pos[4] = { 1.0, 1.0, 1.0, 0.0 };
58
static float blue_light[4] = { 0.0, 0.0, 1.0, 1.0 };
59
static float blue_pos[4] = { -1.0, -1.0, -1.0, 0.0 };
60
static float fog_color[4] = { 0.0, 0.0, 0.0, 0.0 };
61
62
63
/*
64
* Enable drawing features that we need...
65
*/
66
67
glEnable(GL_DEPTH_TEST);
68
glEnable(GL_LIGHTING);
69
glEnable(GL_LIGHT0);
70
glEnable(GL_LIGHT1);
71
72
glShadeModel(GL_SMOOTH);
73
// glShadeModel(GL_FLAT);
74
75
if (output != NULL)
76
output->StartPage();
77
78
/*
79
* Clear the color and depth buffers...
80
*/
81
82
glClearColor(0.0, 0.0, 0.0, 0.0);
83
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
84
85
/*
86
* Draw the cube and sphere in different colors...
87
*
88
* We have positioned two lights in this scene. The first is red and
89
* located above, to the right, and behind the viewer. The second is blue
90
* and located below, to the left, and in front of the viewer.
91
*/
92
93
glLightfv(GL_LIGHT0, GL_DIFFUSE, red_light);
94
glLightfv(GL_LIGHT0, GL_POSITION, red_pos);
95
96
glLightfv(GL_LIGHT1, GL_DIFFUSE, blue_light);
97
glLightfv(GL_LIGHT1, GL_POSITION, blue_pos);
98
99
glEnable(GL_COLOR_MATERIAL);
100
101
// glEnable(GL_FOG);
102
glFogf(GL_FOG_DENSITY, 0.25);
103
glFogfv(GL_FOG_COLOR, fog_color);
104
105
glPushMatrix();
106
glTranslatef(-1.0, -0.5, -15.0);
107
glRotatef(-rotation, 0.0, 1.0, 0.0);
108
glRotatef(rotation, 1.0, 0.0, 0.0);
109
glColor3f(1.0, 1.0, 0.0);
110
111
auxSolidCylinder(1.0, 1.0);
112
glPopMatrix();
113
114
glPushMatrix();
115
glTranslatef(1.0, 0.0, -10.0);
116
glRotatef(rotation, 0.0, 1.0, 0.0);
117
glRotatef(rotation, 1.0, 0.0, 0.0);
118
119
glColor3f(0.0, 1.0, 1.0);
120
auxSolidTeapot(1.0);
121
glPopMatrix();
122
123
if (output != NULL)
124
{
125
if (output->EndPage() == 0)
126
{
127
delete output;
128
output = NULL;
129
};
130
};
131
132
auxSwapBuffers();
133
}
134
135
136
/*
137
* 'rotate_objects()' - Rotate while we are idle...
138
*/
139
140
void CALLBACK
141
rotate_objects(void)
142
{
143
rotation += 2.0;
144
if (rotation >= 360.0)
145
rotation -= 360.0;
146
147
draw_scene();
148
}
149
150
151
/*
152
* 'main()' - Initialize the window and display the scene until the user presses
153
* the ESCape key.
154
*/
155
156
void
157
main(void)
158
{
159
auxInitDisplayMode(AUX_RGB | AUX_DEPTH | AUX_DOUBLE);
160
auxInitPosition(256, 256, 768, 512);
161
auxInitWindow("Fogged Teapots");
162
163
auxReshapeFunc(reshape_scene);
164
auxIdleFunc(rotate_objects);
165
166
output = new GLPfile("test.ps");
167
168
auxMainLoop(draw_scene);
169
}
170
171
172
/*
173
* End of "fogpot.c".
174
*/
175
176