Main Page | Namespace List | Class Hierarchy | Alphabetical List | Compound List | File List | Compound Members | File Members

TranslationLight.h

Go to the documentation of this file.
00001 //------------------------------------------------------------------------------
00002 // Lamp : Open source game middleware
00003 // Copyright (C) 2004  Junpei Ohtani ( Email : junpee@users.sourceforge.jp )
00004 //
00005 // This library is free software; you can redistribute it and/or
00006 // modify it under the terms of the GNU Lesser General Public
00007 // License as published by the Free Software Foundation; either
00008 // version 2.1 of the License, or (at your option) any later version.
00009 //
00010 // This library is distributed in the hope that it will be useful,
00011 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00012 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013 // Lesser General Public License for more details.
00014 //
00015 // You should have received a copy of the GNU Lesser General Public
00016 // License along with this library; if not, write to the Free Software
00017 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00018 //------------------------------------------------------------------------------
00019 
00020 /** @file
00021  * 変換ライトヘッダ
00022  * @author Junpee
00023  */
00024 
00025 #ifndef TRANSLATION_LIGHT_H_
00026 #define TRANSLATION_LIGHT_H_
00027 
00028 namespace Lamp{
00029     class Scene;
00030 }
00031 
00032 namespace LampForMaya{
00033 
00034 class TranslationAmbientLight;
00035 class TranslationDirectionalLight;
00036 class TranslationPointLight;
00037 
00038 //------------------------------------------------------------------------------
00039 /**
00040  * 変換ライト
00041  */
00042 class TranslationLight{
00043 friend class TranslationLightManager;
00044 public:
00045     /**
00046      * デストラクタ
00047      */
00048     virtual ~TranslationLight();
00049 
00050     /**
00051      * 分析
00052      * @return 成功すればtrue
00053      */
00054     virtual bool analyze() = 0;
00055 
00056     /**
00057      * Lampへの変換
00058      * @param scene シーン
00059      * @return 成功すればtrue
00060      */
00061     virtual bool convertToLamp(Scene* scene) = 0;
00062 
00063     /**
00064      * オブジェクトの取得
00065      * @return オブジェクト
00066      */
00067     virtual MObject getObject() const{ return object_; }
00068 
00069     /**
00070      * 名前の取得
00071      * @return 名前
00072      */
00073     virtual String getName() const{ return name_; }
00074 
00075     //--------------------------------------------------------------------------
00076     // RTTI
00077     //--------------------------------------------------------------------------
00078     /**
00079      * アンビエントライトかどうか
00080      * @return アンビエントライトならtrue
00081      */
00082     virtual bool isAmbientLight() const{ return false; }
00083 
00084     /**
00085      * アンビエントライトへのキャスト
00086      * @return アンビエントライト。型が違えばNULLを返す。
00087      */
00088     virtual TranslationAmbientLight* castAmbientLight() const{
00089         if(isAmbientLight()){
00090             return (TranslationAmbientLight*)this;
00091         }
00092         return NULL;
00093     }
00094 
00095     //--------------------------------------------------------------------------
00096     /**
00097      * ディレクショナルライトかどうか
00098      * @return ディレクショナルライトならtrue
00099      */
00100     virtual bool isDirectionalLight() const{ return false; }
00101 
00102     /**
00103      * ディレクショナルライトへのキャスト
00104      * @return ディレクショナルライト。型が違えばNULLを返す。
00105      */
00106     virtual TranslationDirectionalLight* castDirectionalLight() const{
00107         if(isDirectionalLight()){
00108             return (TranslationDirectionalLight*)this;
00109         }
00110         return NULL;
00111     }
00112 
00113     //--------------------------------------------------------------------------
00114     /**
00115      * ポイントライトかどうか
00116      * @return ポイントライトならtrue
00117      */
00118     virtual bool isPointLight() const{ return false; }
00119 
00120     /**
00121      * ポイントライトへのキャスト
00122      * @return ポイントライト。型が違えばNULLを返す。
00123      */
00124     virtual TranslationPointLight* castPointLight() const{
00125         if(isPointLight()){
00126             return (TranslationPointLight*)this;
00127         }
00128         return NULL;
00129     }
00130 
00131     //--------------------------------------------------------------------------
00132 
00133 protected:
00134     /**
00135      * コンストラクタ
00136      * @param initializeDagPath 初期化するDagパス
00137      * @param initializeName 初期化する名前
00138      */
00139     TranslationLight(
00140         const MDagPath& initializeDagPath, const String& initializeName);
00141 
00142     /**
00143      * ライトの分析
00144      */
00145     virtual bool analyzeLight();
00146 
00147     /**
00148      * レンジの計算
00149      * @param decayRate 減衰率
00150      * @return レンジ
00151      */
00152     virtual float calcRange(int decayRate){
00153         // 減衰無し
00154         if(decayRate == 0){
00155             return 1.84467435e+019f;
00156         }
00157         // 輝度を強さとする
00158         float luminance = exportColor_.r * 0.298912f +
00159             exportColor_.g * 0.586611f + exportColor_.b * 0.114477f;
00160         // 一次減衰
00161         if(decayRate == 1){
00162             return minimumLightPower * luminance;
00163         // 二次減衰
00164         }else if(decayRate == 2){
00165             return Math::sqrt(minimumLightPower * luminance);
00166         }
00167         return 0.f;
00168     }
00169 
00170     /// Dagパス
00171     MDagPath dagPath_;
00172     /// オブジェクト
00173     MObject object_;
00174     /// 名前
00175     String name_;
00176     /// ライトカラー
00177     Color3f color_;
00178     /// 出力カラー
00179     Color3f exportColor_;
00180     /// ライト強度
00181     float intensity_;
00182     /// ライトマスク
00183     int lightMask_;
00184     /// 表示フラグ
00185     bool visibility_;
00186 
00187     /// 最小ライト強度
00188     static float minimumLightPower;
00189 
00190 private:
00191     // コピーコンストラクタの隠蔽
00192     TranslationLight(const TranslationLight& copy);
00193 
00194     // 代入コピーの隠蔽
00195     void operator =(const TranslationLight& copy);
00196 
00197 };
00198 
00199 //------------------------------------------------------------------------------
00200 } // End of namespace LampForMaya
00201 #endif // End of TRANSLATION_LIGHT_H_
00202 //------------------------------------------------------------------------------
00203 

Generated on Wed Mar 16 10:29:56 2005 for LampForMaya by doxygen 1.3.2