void MengerSponge::setDepth( int d ) { if( d < 1 ) return; depth =d; makeSponge(); }
InstancedSponge::InstancedSponge(unsigned recursion, QList<string>& attributes) { bufferCount = 1; makeSponge(recursion, {0, 0, 0}, 1.0f); setMesh(MeshLoader::load(attributes, "cube.obj")); calculateBufferSize(); setCastShadows(false); }
MengerSponge::MengerSponge(const QList<string> & attributes, unsigned recursion) { mesh = new Mesh(attributes); makeSponge(recursion, {0, 0, 0}, 1.0f); mesh->init(); mesh->setDrawType(GL_TRIANGLES); glError; }
void MengerSponge::setMode( int m ) { mode =m; makeSponge(); }
void InstancedSponge::makeSponge( unsigned recursion, const vector<float> & position, float size) { if (recursion == 0) { addCube(position, size); } else { recursion-=1; size/=3.0f; float trans = size*2; // TOP makeSponge(recursion, {position[0], position[1]+trans, position[2]+trans}, size); makeSponge(recursion, {position[0]-trans, position[1]+trans, position[2]}, size); makeSponge(recursion, {position[0], position[1]+trans, position[2]-trans}, size); makeSponge(recursion, {position[0]+trans, position[1]+trans, position[2]}, size); makeSponge(recursion, {position[0]+trans, position[1]+trans, position[2]+trans}, size); makeSponge(recursion, {position[0]+trans, position[1]+trans, position[2]-trans}, size); makeSponge(recursion, {position[0]-trans, position[1]+trans, position[2]+trans}, size); makeSponge(recursion, {position[0]-trans, position[1]+trans, position[2]-trans}, size); // MIDDLE makeSponge(recursion, {position[0]+trans, position[1], position[2]+trans}, size); makeSponge(recursion, {position[0]+trans, position[1], position[2]-trans}, size); makeSponge(recursion, {position[0]-trans, position[1], position[2]+trans}, size); makeSponge(recursion, {position[0]-trans, position[1], position[2]-trans}, size); // BOTTOM makeSponge(recursion, {position[0], position[1]-trans, position[2]+trans}, size); makeSponge(recursion, {position[0], position[1]-trans, position[2]-trans}, size); makeSponge(recursion, {position[0]+trans, position[1]-trans, position[2]}, size); makeSponge(recursion, {position[0]-trans, position[1]-trans, position[2]}, size); makeSponge(recursion, {position[0]+trans, position[1]-trans, position[2]+trans}, size); makeSponge(recursion, {position[0]+trans, position[1]-trans, position[2]-trans}, size); makeSponge(recursion, {position[0]-trans, position[1]-trans, position[2]+trans}, size); makeSponge(recursion, {position[0]-trans, position[1]-trans, position[2]-trans}, size); } }