void baseObject::init() { setMaxMin(); width = xMax - xMin; height = yMax - yMin; texture = 0; bSelected = false; texRotation = 0; for (int i = 0; i < 4; ++i) color[i] = 1.0f; }
void WriterCompareTriangle::cutscene(int nbVertices, const osg::BoundingBox& sceneBox) { osg::BoundingBox::vec_type length = sceneBox._max - sceneBox._min; static const unsigned int k = 4; unsigned int nbVerticesX = (nbVertices * k) / (length.z() * length.y()); unsigned int nbVerticesY = (nbVertices * k) / (length.z() * length.x()); unsigned int nbVerticesZ = (nbVertices * k) / (length.x() * length.y()); setMaxMin (nbVerticesX, nbVerticesY, nbVerticesZ); OSG_DEBUG << "Cutting x by " << nbVerticesX << std::endl << "Cutting y by " << nbVerticesY << std::endl << "Cutting z by " << nbVerticesZ << std::endl; osg::BoundingBox::value_type blocX = length.x() / nbVerticesX; //These 3 lines set the size of a box in x, y and z osg::BoundingBox::value_type blocY = length.y() / nbVerticesY; osg::BoundingBox::value_type blocZ = length.z() / nbVerticesZ; boxList.reserve(nbVerticesX * nbVerticesY * nbVerticesZ); short yinc = 1; short xinc = 1; unsigned int y = 0; unsigned int x = 0; for (unsigned int z = 0; z < nbVerticesZ; ++z) { while (x < nbVerticesX && x >= 0) { while (y < nbVerticesY && y >= 0) { osg::BoundingBox::value_type xMin = sceneBox.xMin() + x * blocX; if (x == 0) //to prevent from mesh with no case xMin -= 10; osg::BoundingBox::value_type yMin = sceneBox.yMin() + y * blocY; if (y == 0) //to prevent from mesh with no case yMin -= 10; osg::BoundingBox::value_type zMin = sceneBox.zMin() + z * blocZ; if (z == 0) //to prevent from mesh with no case zMin -= 10; osg::BoundingBox::value_type xMax = sceneBox.xMin() + (x + 1) * blocX; if (x == nbVerticesX - 1) //to prevent from mesh with no case xMax += 10; osg::BoundingBox::value_type yMax = sceneBox.yMin() + (y + 1) * blocY; if (y == nbVerticesY - 1) //to prevent from mesh with no case yMax += 10; osg::BoundingBox::value_type zMax = sceneBox.zMin() + (z + 1) * blocZ; if (z == nbVerticesZ - 1) //to prevent from mesh with no case zMax += 10; boxList.push_back(osg::BoundingBox(xMin, // Add a box to the list yMin, zMin, xMax, yMax, zMax)); y += yinc; } yinc = -yinc; y += yinc; x += xinc; } xinc = -xinc; x += xinc; } }
void WriterCompareTriangle::cutscene(int nbVertices, const osg::BoundingBox & sceneBox) { osg::BoundingBox::vec_type length = sceneBox._max - sceneBox._min; static const float k = 1.3f; // Arbitrary constant multiplier for density computation ("simulates" non-uniform point distributions) // Computes "density" of points, and thus the number of blocks to divide the mesh into int nbVerticesX = static_cast<int>( (nbVertices * k) / (length.z() * length.y()) ); int nbVerticesY = static_cast<int>( (nbVertices * k) / (length.z() * length.x()) ); int nbVerticesZ = static_cast<int>( (nbVertices * k) / (length.x() * length.y()) ); setMaxMin (nbVerticesX, nbVerticesY, nbVerticesZ); // This function prevent from cutting the scene in too many blocs OSG_INFO << "Cutting x by " << nbVerticesX << std::endl << "Cutting y by " << nbVerticesY << std::endl << "Cutting z by " << nbVerticesZ << std::endl; osg::BoundingBox::value_type blocX = length.x() / nbVerticesX; // These 3 lines set the size of a bloc in x, y and z osg::BoundingBox::value_type blocY = length.y() / nbVerticesY; osg::BoundingBox::value_type blocZ = length.z() / nbVerticesZ; boxList.reserve(nbVerticesX * nbVerticesY * nbVerticesZ); short yinc = 1; short xinc = 1; int y = 0; int x = 0; for (int z = 0; z < nbVerticesZ; ++z) { while (x < nbVerticesX && x >= 0) { while (y < nbVerticesY && y >= 0) { osg::BoundingBox::value_type xMin = sceneBox.xMin() + x * blocX; if (x == 0) //to prevent from mesh with no case xMin -= 10; osg::BoundingBox::value_type yMin = sceneBox.yMin() + y * blocY; if (y == 0) //to prevent from mesh with no case yMin -= 10; osg::BoundingBox::value_type zMin = sceneBox.zMin() + z * blocZ; if (z == 0) //to prevent from mesh with no case zMin -= 10; osg::BoundingBox::value_type xMax = sceneBox.xMin() + (x + 1) * blocX; if (x == nbVerticesX - 1) //to prevent from mesh with no case xMax += 10; osg::BoundingBox::value_type yMax = sceneBox.yMin() + (y + 1) * blocY; if (y == nbVerticesY - 1) //to prevent from mesh with no case yMax += 10; osg::BoundingBox::value_type zMax = sceneBox.zMin() + (z + 1) * blocZ; if (z == nbVerticesZ - 1) //to prevent from mesh with no case zMax += 10; boxList.push_back(osg::BoundingBox(xMin, // Add a bloc to the list yMin, zMin, xMax, yMax, zMax)); y += yinc; } yinc = -yinc; y += yinc; x += xinc; } xinc = -xinc; x += xinc; } }