/* -*- Mode: C; tab-width: 4 -*- */
/* bubble3d.c - 3D bubbles */
-#if !defined( lint ) && !defined( SABER )
+#if 0
static const char sccsid[] = "@(#)bubble3d.c 4.11 98/06/16 xlockmore";
-
#endif
/*-
GLfloat *nudge_angle_incr; /* Amount by which we increase each nudge
* angle in each frame.
*/
+ GLfloat color[4];
} bubble;
/* Should be taken care of already... but just in case */
/* Create a new bubble. */
void *
-glb_bubble_new(GLfloat x, GLfloat y, GLfloat z, GLfloat scale,
+glb_bubble_new(glb_data *d, GLfloat x, GLfloat y, GLfloat z, GLfloat scale,
GLfloat y_incr, GLfloat scale_incr)
{
int i, j;
/* GLfloat axes [glb_config.nr_nudge_axes][3]; */
GLfloat axes[5][3]; /* HARD CODED for SunCC */
int nr_vertices;
- glb_vertex *vertices = glb_sphere_get_vertices(&nr_vertices);
+ glb_vertex *vertices = glb_sphere_get_vertices(d, &nr_vertices);
bubble *b = (bubble *) malloc(sizeof *b);
if (b == 0)
return 0;
+ if (glb_config.bubble_colour[0] == -1.0) {
+ b->color[0] = ((float) (NRAND(100)) / 100.0);
+ b->color[1] = ((float) (NRAND(100)) / 100.0);
+ b->color[2] = ((float) (NRAND(100)) / 100.0);
+ } else {
+ b->color[0] = glb_config.bubble_colour[0];
+ b->color[1] = glb_config.bubble_colour[1];
+ b->color[2] = glb_config.bubble_colour[2];
+ }
+ b->color[3] = glb_config.bubble_colour[3];
+
+
b->contributions = (GLfloat *) malloc(sizeof (GLfloat) * nr_vertices *
glb_config.nr_nudge_axes);
if (b->contributions == 0) {
/* Draw a bubble. */
void
-glb_bubble_draw(void *bb)
+glb_bubble_draw(glb_data *d, void *bb)
{
int i, j;
bubble *b = (bubble *) bb;
int nr_vertices;
- glb_vertex *vertices = glb_sphere_get_vertices(&nr_vertices);
+ glb_vertex *vertices = glb_sphere_get_vertices(d, &nr_vertices);
int nr_triangles;
- glb_triangle *triangles = glb_sphere_get_triangles(&nr_triangles);
+ glb_triangle *triangles = glb_sphere_get_triangles(d, &nr_triangles);
glb_vertex *new_vertices;
new_vertices = (glb_vertex *) malloc(sizeof (glb_vertex) * nr_vertices);
/* Draw the bubble. */
glBegin(GL_TRIANGLES);
+
+ glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, b->color);
+
for (i = 0; i < nr_triangles; ++i) {
glNormal3fv(new_vertices[triangles[i][0]]);
glVertex3fv(new_vertices[triangles[i][0]]);
glEnd();
glPopMatrix();
(void) free((void *) new_vertices);
+ glb_config.polygon_count += nr_triangles;
}
/* Return y value. */