GLUGG - OpenGL Utilities for Geometry Generation

Proudly presenting: GLUGG!


GLUGG stands for OpenGL Utilities for Geometry Generation. This is a source-only package, one C file (two with the gluggShapes) and one header file plus demos, or just header only for C++, that will make it easier for you to generate geometry directly from code. You specify one vertex at a time, optionally with normal vector and texture coordinates, and GLUGG will return a VAO that you can use to draw the shape, or get the data for other purposes, like save it to disc. GLUGG supports primitives like triangle fans and triangle strips which will help you by remembering previous vertices to make the actual triangles easier to manage, and can even generate Bézier patches.


Motivation and background


Ever since OpenGL deprecated the immediate mode and display lists, the art of procedural generation of geometry has fallen out of view. Old demos are tedious to port to the new style, and writing new code for procedural geometry generation is totally up to you, OpenGL having no support for it any more.


In order to modernize the old “gears” demo (glutGears, glxGears), I wrote some utility functions for collecting vertices procedurally. This felt quite useful, and I expanded it to dealing with Bézier curves, from which I generated the Utah Teaset from code as well as a demo for fitting Bézier patches together.


Then it sat on my disc for a long time, just being the code for these demos.


But recently, 2021, I got the responsibility to handle the TNM084 course, which is about procedural methods. Hey, how about using GLUGG for that? I have also ran into some cases where I could see how this package could help students with problems in their projects in other courses. PS: It has now been successfully used for a lab about procedural generation of trees!


So I picked it up to dust it off. It needed documentation and at least one simpler demo. Sure thing! But then I got inspired and added multiple demos and, maybe most importantly, extended it to multiple modes which simplifies the generation even further.


It is notable that the package contains a set of shapes that you can build from, and that also makes GLUGG a replacement for the shapes in the old GLUT. These are not in MicroGlut since model creation is beside the point for MicroGlut, but here we can produce them in a more modern way.


Upcoming feature: skinning weights


2022, I made a draft for a brand new version, sporting support for skinning weights as part of the system. This is in development, with a few different options on how to produce and use skinning weights. It is intended for educational use for experiments with the skin&bones concept. As it looks now, I should be able to add this to the existing GLUGG without affecting any of the old functionality.


This is at present not available for download, but I am sending it to project groups who want to try it. Three course projects have been based on this so far.


Downloads


Here is the current package, with demos and documentation, version 1.3 as of 2022-03-20:


Download version 1.3, C++ version, with makefiles, tested on Linux.


Download version 1.3, prelimnary C++ version. (No makefiles yet, only tested on Mac.)


Download version 1.3. (Simplifies the API by using the new struct gluggModel.)


Zipped version of 1.3 in case you can’t unpack tgz.


Download version 1.2. (Adds calls for making it possible to dispose models from GPU memory.)


Download version 1.1. (Adds the matrix stack, color attribute array, the separate gluggShapes and the snowman demo.)


Download version 1.0. (First version as of 2021-05-07)


Demos


All demos are included in the package above.


Triangle


We start with not one but three simple demos, the standard white triangle, now generated from code instead of arrays, plus a color version of it, but also the “gluggModes” demo that demonstrates the four different data collection modes.

Skärmavbild 2021-05-07 kl. 11.04.35


The white triangle


Color triangle


This is a small step from the white triangle, with colors given for each vertex.

Skärmavbild 2021-05-07 kl. 11.04.50


The color triangle


gluggModes


This is yet another very simple demo, demonstrating the different recording modes in GLUGG.


Skärmavbild 2021-05-07 kl. 11.05.04


gluggModes, with GLUGG_TRIANGLES (red), GLUGG_QUADS (green), GLUGG_TRIANGLE_STRIP (yellow) and GLUGG_TRIANGLE_FAN (cyan).


GLUGG shapes


Here you can see how different shapes can be generated with GLUGG. The demo uses the glutShapes unit, more precisely using the parts based on code from FreeGLUT, but converted to GLUGG, and thereby to more modern code.


Skärmavbild 2021-05-07 kl. 11.06.01


GLUGG shapes


GLUGG more shapes


The previous demo skipped over a number of shapes that were provided by GLU in those days, so I made these too, this time from scratch, now also in gluggShapes. This includes cylinder, sphere, cone and ellipsoid.


Skärmavbild 2021-05-07 kl. 11.07.00


More shapes


Sphere


What, another sphere? Unlike the slice-based sphere above, this is made by tesselating a tetrahedron, another way to generate a sphere. It is based on code that I no longer know the origin of. But what is that red mess? It is what you get when you don’t tesselate enough.


Skärmavbild 2021-05-07 kl. 11.07.29


The “sphere” demo


GLUGG gears


glxGears is the standard demo for GLX, that is Mesa on Linux and similar platforms, the one that all Linux users run to check that Mesa has been correctly installed. AFAIK it originated as glutGears, which is nowhere to be found but I recreated it in modernized form, which was the very starting point for GLUGG. GLUGG as such did not exist yet but my glutGears included some routines that would eventually become the first version. That makes this demo the one that I am the most fond of, second to the teaset.


Skärmavbild 2021-05-07 kl. 11.08.01


GLUGG gears


Boing


Boing was originally a demo for Amiga, made at a time when 3D animation of this quality was unheard of. Later, it was recreated as GLboing. This demo seems to be lost, but a port of it can be found as a GLFW demo, as very old-fashioned immediate mode code. From that, I ported it to MicroGlut, but it was still old-fashioned. Now, using GLUGG, it is much more modern, uploading the data properly to GPU buffers like all GLUGG code does.


Skärmavbild 2021-05-07 kl. 11.08.32


boing!


GLUGG sweeper


GLUGG sweeper shows how you can generate rotation symmetric shapes from a set of points.


Skärmavbild 2021-05-07 kl. 11.09.01


GLUGG sweeper


Surface


“surface” demonstrates how you fit together Bézier patches. It makes 4 Bezier patches, with the center vertices kept in a plane to ensure continuity.


Skärmavbild 2021-05-07 kl. 11.09.24


surface


Simple snowman


This demo is based on the snowman from Lighthouse3D. It shows how to use the matrix stack, and combining objects from gluggShapes.


Skärmavbild 2021-12-24 kl. 09.48.21

Simple snowman



The UTAH Teaset!


And finally, the proud #1 demo, my favorite, the dream for anyone who has been messing around with the Utah Teapot for years without knowing that it was a whole set, the Utah teaset! This is generated from a slightly extended version of the original data (and the changes are documented in the code). The code is also able to save the models as OBJ files.


Skärmavbild 2021-05-07 kl. 11.10.19


UTAH Teaset


Note: Several of these demos are based on code from other sources. I have done my best to document this appropriately. Original copyright notices are kept.

This page is maintained by Ingemar Ragnemalm.