Archive for the ‘requests’ tag
glgeom::create_sphere()
Per the first ever user request (thanks Dave), GLGeom has a new feature:
glgeom::primitive_buffer glgeom::create_sphere();
Implementation
The code, located here, works as follows:
- Creates a unit cube
- Moves vertices onto the surface of a unit sphere
- Split each quad into four quads via introducing a quad midpoint
- Move the new vertex onto the surface of the unit sphere
- Repeat steps 3 & 4 for several iterations
Why add this?
While LxEngine does already support loading meshes from Blender files, I do like the idea of providing some basic shapes for the GLGeom library. It does have practical application: especially when throwing together a quick test or maybe implementing a research project, it can be nice to create a zero-dependencies executable that creates rather than loads the geometry it needs. I see this as a feature useful for the small samples and tests use cases.
Image
The result is a (fairly) evenly divided sphere:
…and yes, the “snow” from the previous post is still in the image – I lazily hacked the new functionality into Tutorial 5 for testing
And also, since the rasterizer is OpenGL 3.2 based, it renders using triangles rather than (the now deprecated) quads. Thus, I mention “quads” above, yet the wireframe image displays a sphere composed of triangles. The conversion takes place at the LxEngine rasterization level so I’ve ceased to think too much about such conversions!
Details
The create_sphere() function creates a glgeom::primitive_buffer with the following properties:
primitive.type = "quads"; primitive.vertex.positions = /*vector filled with the unit sphere positions*/; primitive.vertex.normals = /*vector filled with normals for each vertex*/; primitive.indices = /*four 16-bit indices per quad in the sphere*/; primitive.bbox = /*unit bounding box*/; primitive.bsphere = /*unit bounding sphere*/;

