public:
SGTexturedTriangleBin()
{
- seed = new mt;
- mt_init(seed, 123);
+ mt_init(&seed, 123);
}
// Computes and adds random surface points to the points list.
// The points are offsetted away from the triangles in
// offset * positive normal direction.
void addRandomSurfacePoints(float coverage, float offset,
- std::vector<SGVec3f>& points) const
+ std::vector<SGVec3f>& points)
{
unsigned num = getNumTriangles();
for (unsigned i = 0; i < num; ++i) {
// For partial units of area, use a zombie door method to
// create the proper random chance of a light being created
// for this triangle
- float unit = area + mt_rand(seed)*coverage;
+ float unit = area + mt_rand(&seed)*coverage;
SGVec3f offsetVector = offset*normalize(normal);
// generate a light point for each unit of area
while ( coverage < unit ) {
- float a = mt_rand(seed);
- float b = mt_rand(seed);
+ float a = mt_rand(&seed);
+ float b = mt_rand(&seed);
if ( a + b > 1 ) {
a = 1 - a;
b = 1 - b;
}
void addRandomPoints(float coverage,
- std::vector<SGVec3f>& points) const
+ std::vector<SGVec3f>& points)
{
unsigned num = getNumTriangles();
for (unsigned i = 0; i < num; ++i) {
// for partial units of area, use a zombie door method to
// create the proper random chance of an object being created
// for this triangle.
- double num = area / coverage + mt_rand(seed);
+ double num = area / coverage + mt_rand(&seed);
// place an object each unit of area
while ( num > 1.0 ) {
- float a = mt_rand(seed);
- float b = mt_rand(seed);
+ float a = mt_rand(&seed);
+ float b = mt_rand(&seed);
if ( a + b > 1 ) {
a = 1 - a;
b = 1 - b;
private:
// Random seed for the triangle.
- mt* seed;
+ mt seed;
};
#endif
void computeRandomSurfaceLights(SGMaterialLib* matlib)
{
- SGMaterialTriangleMap::const_iterator i;
+ SGMaterialTriangleMap::iterator i;
// generate a repeatable random seed
- mt* seed = new mt;
- mt_init(seed, unsigned(123));
+ mt seed;
+ mt_init(&seed, unsigned(123));
for (i = materialTriangleMap.begin(); i != materialTriangleMap.end(); ++i) {
SGMaterial *mat = matlib->find(i->first);
i->second.addRandomSurfacePoints(coverage, 3, randomPoints);
std::vector<SGVec3f>::iterator j;
for (j = randomPoints.begin(); j != randomPoints.end(); ++j) {
- float zombie = mt_rand(seed);
+ float zombie = mt_rand(&seed);
// factor = sg_random() ^ 2, range = 0 .. 1 concentrated towards 0
- float factor = mt_rand(seed);
+ float factor = mt_rand(&seed);
factor *= factor;
float bright = 1;
void computeRandomObjects(SGMaterialLib* matlib)
{
- SGMaterialTriangleMap::const_iterator i;
+ SGMaterialTriangleMap::iterator i;
for (i = materialTriangleMap.begin(); i != materialTriangleMap.end(); ++i) {
SGMaterial *mat = matlib->find(i->first);
if (!mat)
if (tileGeometryBin.randomModels.getNumModels() > 0) {
// Generate a repeatable random seed
- mt* seed = new mt;
- mt_init(seed, unsigned(123));
+ mt seed;
+ mt_init(&seed, unsigned(123));
// Determine an rotation matrix for the models to place them
// perpendicular to the earth's surface. We use the same matrix,
if (obj.model->get_heading_type() == SGMatModel::HEADING_RANDOM) {
// Rotate the object around the z axis.
- double hdg = mt_rand(seed) * M_PI * 2;
+ double hdg = mt_rand(&seed) * M_PI * 2;
osg::Matrix rot(cos(hdg), -sin(hdg), 0, 0,
sin(hdg), cos(hdg), 0, 0,
0, 0, 1, 0,