void CompleteBoxPruningTest::Init() { m_firstTime = true; SRand(0); mBoxes = new AABB[mNbBoxes]; mBoxPtrs = new const AABB*[mNbBoxes]; mBoxTime = new float[mNbBoxes]; for(udword i=0; i<mNbBoxes; i++) { Point Center, Extents; Center.x = (UnitRandomFloat()-0.5f) * 100.0f; Center.y = (UnitRandomFloat()-0.5f) * 10.0f; Center.z = (UnitRandomFloat()-0.5f) * 100.0f; Extents.x = 2.0f + UnitRandomFloat() * 2.0f; Extents.y = 2.0f + UnitRandomFloat() * 2.0f; Extents.z = 2.0f + UnitRandomFloat() * 2.0f; mBoxes[i].SetCenterExtents(Center, Extents); mBoxPtrs[i] = &mBoxes[i]; mBoxTime[i] = 2000.0f*UnitRandomFloat(); } }
void IndexedTriangle::RandomPoint(const Point* verts, Point& random) const { if(!verts) return; // Random barycentric coords float Alpha = UnitRandomFloat(); float Beta = UnitRandomFloat(); float Gamma = UnitRandomFloat(); float OneOverTotal = 1.0f / (Alpha + Beta + Gamma); Alpha *= OneOverTotal; Beta *= OneOverTotal; Gamma *= OneOverTotal; const Point& p0 = verts[mVRef[0]]; const Point& p1 = verts[mVRef[1]]; const Point& p2 = verts[mVRef[2]]; random = Alpha*p0 + Beta*p1 + Gamma*p2; }