void SceneObject::sumEnergyToSingleEnergy() { if (this->isVolumetric() && countHashGrid) { countHashGrid->sumEnergyToSingleEnergy(); return; } totalEnergy = energyDensity[getTriangleNum() - 1]; for (int i = getTriangleNum() - 1; i >= 1; i--) energyDensity[i] -= energyDensity[i - 1]; }
void SceneObject::singleEnergyToSumEnergy() { if (this->isVolumetric() && countHashGrid) { countHashGrid->singleEnergyToSumEnergy(); return; } for (int i = 1; i < getTriangleNum(); i++) energyDensity[i] += energyDensity[i - 1]; totalEnergy = energyDensity[getTriangleNum() - 1]; }
void SceneObject::preprocessOtherSampler() { totalEnergy = 0.f; energyDensity.clear(); energyDensity.resize(getTriangleNum()); for (int i = 0; i < getTriangleNum(); i++) { energyDensity[i] = 0.f; areaValues.push_back(getTriangleArea(i)); } }
void AbstractObject::prepareForSurfaceSampling(){ float areaValue = 0; for(uint i = 0; i < getTriangleNum(); i++){ areaValue += getTriangleArea(i); areaThreshold.push_back(areaValue); } boundArea = areaValue; }
void SceneObject::preprocessEmissionSampler() { totalArea = weight = 0.f; for(unsigned k=0; k<getTriangleNum(); k++) { totalArea += getTriangleArea(k); areaValues.push_back(totalArea); } weight = totalArea; }
void SceneObject::scaleEnergyDensity(const float scale) { if (this->isVolumetric() && countHashGrid) { countHashGrid->scaleEnergyDensity(scale); return; } totalEnergy *= scale; for (int i = 0; i < getTriangleNum(); i++) energyDensity[i] *= scale; }