//-------------------------------------------------------------- void ofConePrimitive::set( float _radius, float _height, int radiusSegments, int heightSegments, int capSegments, ofPrimitiveMode mode ) { radius = _radius; height = _height; resolution.set(radiusSegments, heightSegments, capSegments); int resX = getResolution().x; int resY = getResolution().y-1; int resZ = getResolution().z-1; int indexStep = 2; if(mode == OF_PRIMITIVE_TRIANGLES) { indexStep = 6; resX = resX-1; } strides[ 0 ][0] = 0; strides[ 0 ][1] = (resX)*(resY) * indexStep; vertices[0][0] = 0; vertices[0][1] = getResolution().x * getResolution().y; strides[ 1 ][0] = strides[ 0 ][0] + strides[ 0 ][1]; strides[ 1 ][1] = (resX)*(resZ) * indexStep; vertices[1][0] = vertices[0][0] + vertices[0][1]; vertices[1][1] = getResolution().x * getResolution().z; getMesh() = ofMesh::cone( getRadius(), getHeight(), getResolution().x, getResolution().y, getResolution().z, mode ); normalizeAndApplySavedTexCoords(); }
//---------------------------------------------------------- void ofIcoSpherePrimitive::setResolution( int iterations ) { // store the number of iterations in the resolution // resolution = iterations; getMesh() = ofMesh::icosphere( getRadius(), getResolution() ); normalizeAndApplySavedTexCoords(); }
//---------------------------------------------------------- void ofSpherePrimitive::set( float _radius, int res, ofPrimitiveMode mode ) { radius = _radius; resolution = res; getMesh() = ofMesh::sphere( getRadius(), getResolution(), mode ); normalizeAndApplySavedTexCoords(); }
//-------------------------------------------------------------- void ofPlanePrimitive::set(float _width, float _height, int columns, int rows, ofPrimitiveMode mode) { width = _width; height = _height; resolution.set( columns, rows ); getMesh() = ofMesh::plane( getWidth(), getHeight(), getResolution().x, getResolution().y, mode ); normalizeAndApplySavedTexCoords(); }
//-------------------------------------------------------------- void ofBoxPrimitive::set( float width, float height, float depth, int resWidth, int resHeight, int resDepth) { size.x = width; size.y = height; size.z = depth; resolution.set( resWidth, resHeight, resDepth ); int resX = getResolution().x; int resY = getResolution().y; int resZ = getResolution().z; //FRONT, resY, resX strides[ SIDE_FRONT ][0] = 0; strides[ SIDE_FRONT ][1] = (resY-1)*(resX-1)*6; vertices[SIDE_FRONT][0] = 0; vertices[SIDE_FRONT][1] = resX * resY; //RIGHT, resY, resZ strides[ SIDE_RIGHT ][0] = strides[ SIDE_FRONT ][0] + strides[ SIDE_FRONT ][1]; strides[ SIDE_RIGHT ][1] = (resY-1)*(resZ-1)*6; vertices[SIDE_RIGHT][0] = vertices[SIDE_FRONT][0] + vertices[SIDE_FRONT][1]; vertices[SIDE_RIGHT][1] = resY * resZ; //LEFT, resY, resZ strides[ SIDE_LEFT ][0] = strides[ SIDE_RIGHT ][0] + strides[ SIDE_RIGHT ][1]; strides[ SIDE_LEFT ][1] = (resY-1)*(resZ-1)*6; vertices[SIDE_LEFT][0] = vertices[SIDE_RIGHT][0] + vertices[SIDE_RIGHT][1]; vertices[SIDE_LEFT][1] = resY * resZ; //BACK, resY, resX strides[ SIDE_BACK ][0] = strides[ SIDE_LEFT ][0] + strides[ SIDE_LEFT ][1]; strides[ SIDE_BACK ][1] = (resY-1)*(resX-1)*6; vertices[SIDE_BACK][0] = vertices[SIDE_LEFT][0] + vertices[SIDE_LEFT][1]; vertices[SIDE_BACK][1] = resY * resX; //TOP, resZ, resX strides[ SIDE_TOP ][0] = strides[ SIDE_BACK ][0] + strides[ SIDE_BACK ][1]; strides[ SIDE_TOP ][1] = (resZ-1)*(resX-1)*6; vertices[SIDE_TOP][0] = vertices[SIDE_BACK][0] + vertices[SIDE_BACK][1]; vertices[SIDE_TOP][1] = resZ * resX; //BOTTOM, resZ, resX strides[ SIDE_BOTTOM ][0] = strides[ SIDE_TOP ][0]+strides[ SIDE_TOP ][1]; strides[ SIDE_BOTTOM ][1] = (resZ-1)*(resX-1)*6; vertices[SIDE_BOTTOM][0] = vertices[SIDE_TOP][0] + vertices[SIDE_TOP][1]; vertices[SIDE_BOTTOM][1] = resZ * resX; getMesh() = ofMesh::box( getWidth(), getHeight(), getDepth(), getResolution().x, getResolution().y, getResolution().z ); normalizeAndApplySavedTexCoords(); }
//-------------------------------------------------------------- void ofCylinderPrimitive::set(float _radius, float _height, int radiusSegments, int heightSegments, int capSegments, bool _bCapped, ofPrimitiveMode mode) { radius = _radius; height = _height; bCapped = _bCapped; resolution.set( radiusSegments, heightSegments, capSegments ); int resX = getResolution().x; int resY = getResolution().y-1; int resZ = getResolution().z-1; int indexStep = 2; if(mode == OF_PRIMITIVE_TRIANGLES) { indexStep = 6; resX = resX-1; } // 0 -> top cap strides[0][0] = 0; strides[0][1] = resX * resZ * indexStep; vertices[0][0] = 0; vertices[0][1] = getResolution().x * getResolution().z; // 1 -> cylinder // if(bCapped) { strides[1][0] = strides[0][0] + strides[0][1]; vertices[1][0] = vertices[0][0] + vertices[0][1]; } else { strides[1][0] = 0; vertices[1][0] = 0; } strides[1][1] = resX * resY * indexStep; vertices[1][1] = getResolution().x * getResolution().y; // 2 -> bottom cap strides[2][0] = strides[1][0] + strides[1][1]; strides[2][1] = resX * resZ * indexStep; vertices[2][0] = vertices[1][0]+vertices[1][1]; vertices[2][1] = getResolution().x * getResolution().z; getMesh() = ofMesh::cylinder( getRadius(), getHeight(), getResolution().x, getResolution().y, getResolution().z, getCapped(), mode ); //setMode(mode); normalizeAndApplySavedTexCoords(); }