X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fbuilders%2Fcylinder.cpp;fp=source%2Fbuilders%2Fcylinder.cpp;h=901a0f4b43cf057872a752960e30678a2a980b24;hp=0000000000000000000000000000000000000000;hb=7aaec9a70b8d7733429bec043f8e33e02956f266;hpb=bec07999d95b76f4b47cffcc564d0cd0afc0435e diff --git a/source/builders/cylinder.cpp b/source/builders/cylinder.cpp new file mode 100644 index 00000000..901a0f4b --- /dev/null +++ b/source/builders/cylinder.cpp @@ -0,0 +1,86 @@ +#define _USE_MATH_DEFINES +#include +#include "cylinder.h" +#include "primitivebuilder.h" + +using namespace std; + +namespace Msp { +namespace GL { + +CylinderBuilder::CylinderBuilder(float r, float l, unsigned s): + radius(r), + length(l), + segments(s) +{ + if(segments<3) + segments = 3; +} + +void CylinderBuilder::build(PrimitiveBuilder &builder) const +{ + if(generate_tbn) + builder.binormal(0, 1, 0); + for(unsigned i=0; i<2; ++i) + { + float z = (i-0.5)*length; + builder.normal(0, 0, i*2.0-1.0); + builder.texcoord(0.5, 0.5); + if(generate_tbn) + builder.tangent((i ? 1 : -1), 0, 0); + builder.vertex(0, 0, z); + for(unsigned j=0; j