All   Archive   Code   News   Projects  


My name is Stephen Schieberl. I live in the woods near Portland, Oregon. Hit me up to work together.

Ban the Rewind?


Pictured: The VTF sample demonstrates how to shape a sphere using a texture If you've worked with Cinder, you know that you can draw 3D shapes like spheres, cubes, cylinders and more through some convenient functions. What you might not know is that you could do it a lot faster. When you tell Cinder to draw a sphere, it has to do all the math to create it before uploading it to your video card to be drawn. If you want to draw hundreds of spheres, this can start to get pretty slow. However, this is not a problem if you are able to create the model one time as a VboMesh or a TriMesh and re-use it. Building a mesh to create a common shape such as a sphere or cube can quickly turn into a daunting task. Plotting the geometry efficiently where each position also has proper surface normals and texture map coordinates can prove to be quite challenging. Enter Cinder-MeshHelper. CINDER-MESHHELPER ON GITHUB Cinder-MeshHelper takes away the math and mystery of creating basic 2D and 3D shapes as a TriMesh. It also provides shortcuts for creating custom meshes. The class contains static methods for generating shapes made of GL_TRIANGLES which include vertex indices, positions, normals, and texture coordinates. The dimension of all shapes is 1.0. That is, a radius is always 1.0, a height is always 1.0, an edge length is always 1.0, etc. Just create your mesh, scale it, and draw it, like so: ci::Vec2i resolution( 32, 16 ); ci::gl::VboMesh sphere( MeshHelper::createSphere( resolution ) ); gl::pushMatrices(); gl::scale( Vec3f::one() * 10.0f ); gl::draw( sphere ); gl::popMatrices(); Pictured: 262,144 textured cubes with lighting at 60+ fps The block contains four applications. Two are identical, one with TriMesh shapes and one with VboMesh shapes. These demonstrate all supported primitives and one custom mesh. Another demonstrates VBO instancing, a technique which allows you to make a single call to OpenGL with one VBO and draw many instances in GLSL. The last shows off vertex texture fetching (VTF), a technique which uses texture data to modify geometry.