00001 /*************************************************************************** 00002 * Copyright (C) 1998-2009 by authors (see AUTHORS.txt ) * 00003 * * 00004 * This file is part of LuxRender. * 00005 * * 00006 * Lux Renderer is free software; you can redistribute it and/or modify * 00007 * it under the terms of the GNU General Public License as published by * 00008 * the Free Software Foundation; either version 3 of the License, or * 00009 * (at your option) any later version. * 00010 * * 00011 * Lux Renderer is distributed in the hope that it will be useful, * 00012 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 00013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 00014 * GNU General Public License for more details. * 00015 * * 00016 * You should have received a copy of the GNU General Public License * 00017 * along with this program. If not, see <http://www.gnu.org/licenses/>. * 00018 * * 00019 * This project is based on PBRT ; see http://www.pbrt.org * 00020 * Lux Renderer website : http://www.luxrender.net * 00021 ***************************************************************************/ 00022 00023 // equalenergy.cpp* 00024 #include "lux.h" 00025 #include "texture.h" 00026 #include "equalspd.h" 00027 #include "paramset.h" 00028 00029 namespace lux 00030 { 00031 00032 // EqualEnergyTexture Declarations 00033 template <class T> 00034 class EqualEnergyFloatTexture : public Texture<T> { 00035 public: 00036 // EqualEnergyTexture Public Methods 00037 EqualEnergyFloatTexture(const T &v) { value = v; } 00038 virtual ~EqualEnergyFloatTexture() { } 00039 virtual T Evaluate(const TsPack *tspack, const DifferentialGeometry &) const { 00040 return value; 00041 } 00042 private: 00043 T value; 00044 }; 00045 00046 template <class T> 00047 class EqualEnergySpectrumTexture : public Texture<T> { 00048 public: 00049 // EqualEnergyTexture Public Methods 00050 EqualEnergySpectrumTexture(const float &t) { 00051 e = t; 00052 weight = 1.f; 00053 } 00054 virtual ~EqualEnergySpectrumTexture() { } 00055 virtual T Evaluate(const TsPack *tspack, const DifferentialGeometry &) const { 00056 return SWCSpectrum(e * weight); 00057 } 00058 virtual void SetPower(float power, float area) { 00059 weight = power / (area * M_PI * 1.f); 00060 } 00061 private: 00062 float e; 00063 float weight; 00064 }; 00065 00066 class EqualEnergyTexture 00067 { 00068 public: 00069 static Texture<float> * CreateFloatTexture(const Transform &tex2world, const TextureParams &tp); 00070 static Texture<SWCSpectrum> * CreateSWCSpectrumTexture(const Transform &tex2world, const TextureParams &tp); 00071 }; 00072 00073 }//namespace lux 00074